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 : 248181262 : gimple_logical_inverted_value (tree t, tree *res_ops, tree (*valueize)(tree) ATTRIBUTE_UNUSED)
11 : : {
12 : 248181262 : const tree type = TREE_TYPE (t);
13 : 248181262 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
14 : 248181262 : switch (TREE_CODE (t))
15 : : {
16 : 207015247 : case SSA_NAME:
17 : 207015247 : if (gimple *_d1 = get_def (valueize, t))
18 : : {
19 : 81929317 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20 : 90390011 : switch (gimple_assign_rhs_code (_a1))
21 : : {
22 : 0 : case TRUTH_NOT_EXPR:
23 : 0 : {
24 : 0 : tree _p0 = gimple_assign_rhs1 (_a1);
25 : 0 : _p0 = do_valueize (valueize, _p0);
26 : 0 : {
27 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
28 : 0 : {
29 : 0 : res_ops[0] = captures[0];
30 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 18, __FILE__, __LINE__, false);
31 : 0 : return true;
32 : : }
33 : : }
34 : 692025 : break;
35 : : }
36 : 692025 : case BIT_NOT_EXPR:
37 : 692025 : {
38 : 692025 : tree _p0 = gimple_assign_rhs1 (_a1);
39 : 692025 : _p0 = do_valueize (valueize, _p0);
40 : 692025 : if (gimple_truth_valued_p (_p0, valueize))
41 : : {
42 : 487923 : {
43 : 487923 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
44 : 487923 : {
45 : 487923 : res_ops[0] = captures[0];
46 : 487923 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 19, __FILE__, __LINE__, false);
47 : 487923 : return true;
48 : : }
49 : : }
50 : : }
51 : : break;
52 : : }
53 : 1544926 : case EQ_EXPR:
54 : 1544926 : {
55 : 1544926 : tree _p0 = gimple_assign_rhs1 (_a1);
56 : 1544926 : _p0 = do_valueize (valueize, _p0);
57 : 1544926 : tree _p1 = gimple_assign_rhs2 (_a1);
58 : 1544926 : _p1 = do_valueize (valueize, _p1);
59 : 1544926 : if (tree_swap_operands_p (_p0, _p1))
60 : 18579 : std::swap (_p0, _p1);
61 : 1544926 : if (integer_zerop (_p1))
62 : : {
63 : 607366 : {
64 : 607366 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
65 : 607366 : {
66 : 607366 : res_ops[0] = captures[0];
67 : 607366 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 20, __FILE__, __LINE__, false);
68 : 607366 : return true;
69 : : }
70 : : }
71 : : }
72 : 248181262 : break;
73 : : }
74 : 1712556 : case NE_EXPR:
75 : 1712556 : {
76 : 1712556 : tree _p0 = gimple_assign_rhs1 (_a1);
77 : 1712556 : _p0 = do_valueize (valueize, _p0);
78 : 1712556 : tree _p1 = gimple_assign_rhs2 (_a1);
79 : 1712556 : _p1 = do_valueize (valueize, _p1);
80 : 1712556 : if (tree_swap_operands_p (_p0, _p1))
81 : 15175 : std::swap (_p0, _p1);
82 : 1712556 : if (gimple_truth_valued_p (_p0, valueize))
83 : : {
84 : 34290 : if (integer_truep (_p1))
85 : : {
86 : 304 : {
87 : 304 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
88 : 304 : {
89 : 304 : res_ops[0] = captures[0];
90 : 304 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 21, __FILE__, __LINE__, false);
91 : 304 : return true;
92 : : }
93 : : }
94 : : }
95 : : }
96 : 248181262 : break;
97 : : }
98 : 149701 : case BIT_XOR_EXPR:
99 : 149701 : {
100 : 149701 : tree _p0 = gimple_assign_rhs1 (_a1);
101 : 149701 : _p0 = do_valueize (valueize, _p0);
102 : 149701 : tree _p1 = gimple_assign_rhs2 (_a1);
103 : 149701 : _p1 = do_valueize (valueize, _p1);
104 : 149701 : if (tree_swap_operands_p (_p0, _p1))
105 : 7553 : std::swap (_p0, _p1);
106 : 149701 : if (gimple_truth_valued_p (_p0, valueize))
107 : : {
108 : 14208 : if (integer_truep (_p1))
109 : : {
110 : 52 : {
111 : 52 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
112 : 52 : {
113 : 52 : res_ops[0] = captures[0];
114 : 52 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 22, __FILE__, __LINE__, false);
115 : 52 : return true;
116 : : }
117 : : }
118 : : }
119 : : }
120 : 248181262 : break;
121 : : }
122 : : default:;
123 : : }
124 : : }
125 : : break;
126 : : default:;
127 : : }
128 : : return false;
129 : : }
130 : :
131 : : bool
132 : 48 : gimple_simplify_2 (gimple_match_op *res_op, gimple_seq *seq,
133 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
134 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
135 : : {
136 : 48 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
137 : 96 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
138 : 48 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
139 : 96 : && wi::to_widest (captures[2]) == element_precision (TREE_TYPE (captures[0])) - 1
140 : : )
141 : : {
142 : 48 : gimple_seq *lseq = seq;
143 : 48 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail161;
144 : 48 : {
145 : 48 : res_op->set_op (ABS_EXPR, type, 1);
146 : 48 : res_op->ops[0] = captures[0];
147 : 48 : res_op->resimplify (lseq, valueize);
148 : 48 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 55, __FILE__, __LINE__, true);
149 : 48 : return true;
150 : : }
151 : 0 : next_after_fail161:;
152 : : }
153 : : return false;
154 : : }
155 : :
156 : : bool
157 : 1 : gimple_simplify_7 (gimple_match_op *res_op, gimple_seq *seq,
158 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
159 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
160 : : {
161 : 1 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
162 : 1 : gimple_seq *lseq = seq;
163 : 1 : if (lseq
164 : 1 : && (!single_use (captures[0])))
165 : 0 : lseq = NULL;
166 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail166;
167 : 1 : {
168 : 1 : res_op->set_op (BIT_IOR_EXPR, type, 2);
169 : 1 : res_op->ops[0] = captures[1];
170 : 1 : res_op->ops[1] = captures[2];
171 : 1 : res_op->resimplify (lseq, valueize);
172 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 60, __FILE__, __LINE__, true);
173 : : return true;
174 : : }
175 : 0 : next_after_fail166:;
176 : 0 : return false;
177 : : }
178 : :
179 : : bool
180 : 29064 : gimple_simplify_11 (gimple_match_op *res_op, gimple_seq *seq,
181 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
182 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
183 : : const enum tree_code ARG_UNUSED (op))
184 : : {
185 : 29064 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
186 : 29064 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[1]))
187 : 22996 : && tree_nop_conversion_p (type, TREE_TYPE (captures[4]))
188 : 58128 : && (wi::to_wide (captures[2]) & wi::to_wide (captures[5])) == 0
189 : : )
190 : : {
191 : 188 : gimple_seq *lseq = seq;
192 : 188 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail170;
193 : 188 : {
194 : 188 : res_op->set_op (BIT_IOR_EXPR, type, 2);
195 : 188 : {
196 : 188 : tree _o1[1], _r1;
197 : 188 : _o1[0] = captures[0];
198 : 188 : if (type != TREE_TYPE (_o1[0])
199 : 188 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
200 : : {
201 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
202 : 0 : tem_op.resimplify (lseq, valueize);
203 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
204 : 0 : if (!_r1) goto next_after_fail170;
205 : : }
206 : : else
207 : : _r1 = _o1[0];
208 : 188 : res_op->ops[0] = _r1;
209 : : }
210 : 188 : {
211 : 188 : tree _o1[1], _r1;
212 : 188 : _o1[0] = captures[3];
213 : 188 : if (type != TREE_TYPE (_o1[0])
214 : 188 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
215 : : {
216 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
217 : 0 : tem_op.resimplify (lseq, valueize);
218 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
219 : 0 : if (!_r1) goto next_after_fail170;
220 : : }
221 : : else
222 : : _r1 = _o1[0];
223 : 188 : res_op->ops[1] = _r1;
224 : : }
225 : 188 : res_op->resimplify (lseq, valueize);
226 : 188 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 64, __FILE__, __LINE__, true);
227 : 188 : return true;
228 : : }
229 : : next_after_fail170:;
230 : : }
231 : : return false;
232 : : }
233 : :
234 : : bool
235 : 16 : gimple_simplify_18 (gimple_match_op *res_op, gimple_seq *seq,
236 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
237 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
238 : : {
239 : 16 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
240 : 16 : gimple_seq *lseq = seq;
241 : 16 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail177;
242 : 16 : {
243 : 16 : res_op->set_op (BIT_AND_EXPR, type, 2);
244 : 16 : res_op->ops[0] = captures[0];
245 : 16 : res_op->ops[1] = captures[1];
246 : 16 : res_op->resimplify (lseq, valueize);
247 : 16 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 71, __FILE__, __LINE__, true);
248 : : return true;
249 : : }
250 : 0 : next_after_fail177:;
251 : 0 : return false;
252 : : }
253 : :
254 : : bool
255 : 72 : gimple_simplify_21 (gimple_match_op *res_op, gimple_seq *seq,
256 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
257 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
258 : : {
259 : 72 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
260 : 72 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[0]))
261 : 72 : && element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
262 : : )
263 : : {
264 : 72 : gimple_seq *lseq = seq;
265 : 72 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail180;
266 : 72 : {
267 : 72 : res_op->set_op (BIT_XOR_EXPR, type, 2);
268 : 72 : {
269 : 72 : tree _o1[1], _r1;
270 : 72 : _o1[0] = captures[0];
271 : 72 : if (type != TREE_TYPE (_o1[0])
272 : 72 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
273 : : {
274 : 28 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
275 : 28 : tem_op.resimplify (lseq, valueize);
276 : 28 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
277 : 28 : if (!_r1) goto next_after_fail180;
278 : : }
279 : : else
280 : : _r1 = _o1[0];
281 : 44 : res_op->ops[0] = _r1;
282 : : }
283 : 44 : {
284 : 44 : tree _o1[1], _r1;
285 : 44 : _o1[0] = captures[1];
286 : 44 : if (type != TREE_TYPE (_o1[0])
287 : 44 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
288 : : {
289 : 7 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
290 : 7 : tem_op.resimplify (lseq, valueize);
291 : 7 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
292 : 7 : if (!_r1) goto next_after_fail180;
293 : : }
294 : : else
295 : : _r1 = _o1[0];
296 : 44 : res_op->ops[1] = _r1;
297 : : }
298 : 44 : res_op->resimplify (lseq, valueize);
299 : 44 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 74, __FILE__, __LINE__, true);
300 : 44 : return true;
301 : : }
302 : : next_after_fail180:;
303 : : }
304 : : return false;
305 : : }
306 : :
307 : : bool
308 : 0 : gimple_simplify_30 (gimple_match_op *res_op, gimple_seq *seq,
309 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
310 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
311 : : const enum tree_code ARG_UNUSED (op))
312 : : {
313 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
314 : 0 : gimple_seq *lseq = seq;
315 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail191;
316 : 0 : {
317 : 0 : tree tem;
318 : 0 : tem = constant_boolean_node (true, type);
319 : 0 : res_op->set_value (tem);
320 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 84, __FILE__, __LINE__, true);
321 : : return true;
322 : : }
323 : 0 : next_after_fail191:;
324 : 0 : return false;
325 : : }
326 : :
327 : : bool
328 : 479 : gimple_simplify_32 (gimple_match_op *res_op, gimple_seq *seq,
329 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
330 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
331 : : const enum tree_code ARG_UNUSED (inner_op),
332 : : const enum tree_code ARG_UNUSED (outer_op))
333 : : {
334 : 479 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
335 : 479 : {
336 : 479 : bool fail = false;
337 : 479 : wide_int zero_mask_not;
338 : 479 : wide_int C0;
339 : 479 : wide_int cst_emit;
340 : 479 : if (TREE_CODE (captures[1]) == SSA_NAME)
341 : 479 : zero_mask_not = get_nonzero_bits (captures[1]);
342 : : else
343 : : fail = true;
344 : 479 : if (inner_op == BIT_XOR_EXPR)
345 : : {
346 : 255 : C0 = wi::bit_and_not (wi::to_wide (captures[2]), wi::to_wide (captures[3]));
347 : 255 : cst_emit = C0 | wi::to_wide (captures[3]);
348 : : }
349 : : else
350 : : {
351 : 224 : C0 = wi::to_wide (captures[2]);
352 : 224 : cst_emit = C0 ^ wi::to_wide (captures[3]);
353 : : }
354 : 479 : if (!fail && (C0 & zero_mask_not) == 0
355 : : )
356 : : {
357 : 9 : gimple_seq *lseq = seq;
358 : 9 : if (lseq
359 : 9 : && (!single_use (captures[0])))
360 : 0 : lseq = NULL;
361 : 9 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail193;
362 : 9 : {
363 : 9 : res_op->set_op (outer_op, type, 2);
364 : 9 : res_op->ops[0] = captures[1];
365 : 9 : res_op->ops[1] = wide_int_to_tree (type, cst_emit);
366 : 9 : res_op->resimplify (lseq, valueize);
367 : 9 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 85, __FILE__, __LINE__, true);
368 : 9 : return true;
369 : : }
370 : 0 : next_after_fail193:;
371 : : }
372 : : else
373 : : {
374 : 470 : if (!fail && (wi::to_wide (captures[3]) & zero_mask_not) == 0
375 : : )
376 : : {
377 : 5 : gimple_seq *lseq = seq;
378 : 5 : if (lseq
379 : 5 : && (!single_use (captures[0])))
380 : 0 : lseq = NULL;
381 : 5 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail194;
382 : 5 : {
383 : 5 : res_op->set_op (inner_op, type, 2);
384 : 5 : res_op->ops[0] = captures[1];
385 : 5 : res_op->ops[1] = wide_int_to_tree (type, cst_emit);
386 : 5 : res_op->resimplify (lseq, valueize);
387 : 5 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 86, __FILE__, __LINE__, true);
388 : 5 : return true;
389 : : }
390 : 0 : next_after_fail194:;
391 : : }
392 : : }
393 : 479 : }
394 : 465 : return false;
395 : : }
396 : :
397 : : bool
398 : 66 : gimple_simplify_43 (gimple_match_op *res_op, gimple_seq *seq,
399 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
400 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
401 : : {
402 : 66 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
403 : 66 : if (canonicalize_math_after_vectorization_p ()
404 : 46 : && vectorized_internal_fn_supported_p (IFN_COND_NOT, type)
405 : 0 : && is_truth_type_for (type, TREE_TYPE (captures[0]))
406 : : )
407 : : {
408 : 0 : if (integer_all_onesp (captures[1]) && integer_zerop (captures[2])
409 : : )
410 : : {
411 : 0 : gimple_seq *lseq = seq;
412 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail207;
413 : 0 : {
414 : 0 : res_op->set_op (CFN_COND_NOT, type, 3);
415 : 0 : res_op->ops[0] = captures[0];
416 : 0 : res_op->ops[1] = captures[3];
417 : 0 : res_op->ops[2] = captures[3];
418 : 0 : res_op->resimplify (lseq, valueize);
419 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 99, __FILE__, __LINE__, true);
420 : 0 : return true;
421 : : }
422 : 0 : next_after_fail207:;
423 : : }
424 : : }
425 : : else
426 : : {
427 : 66 : if (integer_all_onesp (captures[2]) && integer_zerop (captures[1])
428 : : )
429 : : {
430 : 0 : gimple_seq *lseq = seq;
431 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail208;
432 : 0 : {
433 : 0 : res_op->set_op (CFN_COND_NOT, type, 3);
434 : 0 : {
435 : 0 : tree _o1[1], _r1;
436 : 0 : _o1[0] = captures[0];
437 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
438 : 0 : tem_op.resimplify (lseq, valueize);
439 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
440 : 0 : if (!_r1) goto next_after_fail208;
441 : 0 : res_op->ops[0] = _r1;
442 : : }
443 : 0 : res_op->ops[1] = captures[3];
444 : 0 : res_op->ops[2] = captures[3];
445 : 0 : res_op->resimplify (lseq, valueize);
446 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 100, __FILE__, __LINE__, true);
447 : 0 : return true;
448 : : }
449 : : next_after_fail208:;
450 : : }
451 : : }
452 : : return false;
453 : : }
454 : :
455 : : bool
456 : 9 : gimple_simplify_52 (gimple_match_op *res_op, gimple_seq *seq,
457 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
458 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
459 : : {
460 : 9 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
461 : 9 : if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type)
462 : 9 : && !TYPE_SATURATING (type) && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (captures[0]))
463 : 9 : && !TYPE_OVERFLOW_TRAPS (TREE_TYPE (captures[0]))
464 : 18 : && !TYPE_SATURATING (TREE_TYPE (captures[0]))
465 : : )
466 : : {
467 : 9 : gimple_seq *lseq = seq;
468 : 9 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail219;
469 : 9 : {
470 : 9 : res_op->set_op (BIT_NOT_EXPR, type, 1);
471 : 9 : {
472 : 9 : tree _o1[1], _r1;
473 : 9 : {
474 : 9 : tree _o2[2], _r2;
475 : 9 : _o2[0] = captures[1];
476 : 9 : _o2[1] = captures[2];
477 : 9 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
478 : 9 : tem_op.resimplify (lseq, valueize);
479 : 9 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
480 : 9 : if (!_r2) goto next_after_fail219;
481 : 5 : _o1[0] = _r2;
482 : : }
483 : 5 : if (type != TREE_TYPE (_o1[0])
484 : 5 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
485 : : {
486 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
487 : 4 : tem_op.resimplify (lseq, valueize);
488 : 4 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
489 : 4 : if (!_r1) goto next_after_fail219;
490 : : }
491 : : else
492 : : _r1 = _o1[0];
493 : 5 : res_op->ops[0] = _r1;
494 : : }
495 : 5 : res_op->resimplify (lseq, valueize);
496 : 5 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 111, __FILE__, __LINE__, true);
497 : 5 : return true;
498 : : }
499 : : next_after_fail219:;
500 : : }
501 : : return false;
502 : : }
503 : :
504 : : bool
505 : 1307797 : gimple_simplify_61 (gimple_match_op *res_op, gimple_seq *seq,
506 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
507 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
508 : : const enum tree_code ARG_UNUSED (op))
509 : : {
510 : 1307797 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
511 : 1307797 : if (!TYPE_SATURATING (type)
512 : : )
513 : : {
514 : 1307797 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
515 : 2587576 : && !FIXED_POINT_TYPE_P (type)
516 : : )
517 : : {
518 : 1279779 : if (INTEGRAL_TYPE_P (type)
519 : 1279203 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
520 : 1149469 : && TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (captures[0]))
521 : 907590 : && types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[1]))
522 : 873181 : && !TYPE_OVERFLOW_TRAPS (type)
523 : 2152960 : && !TYPE_OVERFLOW_SANITIZED (type)
524 : : )
525 : : {
526 : 873181 : gimple_seq *lseq = seq;
527 : 873181 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail236;
528 : 873181 : {
529 : 873181 : res_op->set_op (NOP_EXPR, type, 1);
530 : 873181 : {
531 : 873181 : tree _o1[2], _r1;
532 : 873181 : _o1[0] = captures[0];
533 : 873181 : _o1[1] = captures[1];
534 : 873181 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
535 : 873181 : tem_op.resimplify (NULL, valueize);
536 : 873181 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
537 : 873181 : if (!_r1) goto next_after_fail236;
538 : 38902 : res_op->ops[0] = _r1;
539 : : }
540 : 38902 : res_op->resimplify (lseq, valueize);
541 : 38902 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 128, __FILE__, __LINE__, true);
542 : 38902 : return true;
543 : : }
544 : : next_after_fail236:;
545 : : }
546 : : }
547 : : }
548 : : return false;
549 : : }
550 : :
551 : : bool
552 : 18 : gimple_simplify_67 (gimple_match_op *res_op, gimple_seq *seq,
553 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
554 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
555 : : {
556 : 18 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
557 : 18 : if (INTEGRAL_TYPE_P (type)
558 : : && (
559 : : 1
560 : : || !TREE_SIDE_EFFECTS (captures[1]))
561 : : )
562 : : {
563 : 18 : gimple_seq *lseq = seq;
564 : 18 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail243;
565 : 18 : {
566 : 18 : res_op->set_op (COND_EXPR, type, 3);
567 : 18 : {
568 : 18 : tree _o1[1], _r1;
569 : 18 : _o1[0] = captures[2];
570 : 18 : if (boolean_type_node != TREE_TYPE (_o1[0])
571 : 18 : && !useless_type_conversion_p (boolean_type_node, TREE_TYPE (_o1[0])))
572 : : {
573 : 18 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, boolean_type_node, _o1[0]);
574 : 18 : tem_op.resimplify (lseq, valueize);
575 : 18 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
576 : 18 : if (!_r1) goto next_after_fail243;
577 : : }
578 : : else
579 : : _r1 = _o1[0];
580 : 18 : res_op->ops[0] = _r1;
581 : : }
582 : 18 : res_op->ops[1] = captures[1];
583 : 18 : res_op->ops[2] = captures[0];
584 : 18 : res_op->resimplify (lseq, valueize);
585 : 18 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 135, __FILE__, __LINE__, true);
586 : 18 : return true;
587 : : }
588 : : next_after_fail243:;
589 : : }
590 : : return false;
591 : : }
592 : :
593 : : bool
594 : 32 : gimple_simplify_72 (gimple_match_op *res_op, gimple_seq *seq,
595 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
596 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
597 : : const combined_fn ARG_UNUSED (POPCOUNT))
598 : : {
599 : 32 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
600 : 32 : gimple_seq *lseq = seq;
601 : 32 : if (lseq
602 : 16 : && (!single_use (captures[0])
603 : 16 : || !single_use (captures[1])
604 : 16 : || !single_use (captures[4])
605 : 16 : || !single_use (captures[5])))
606 : 16 : lseq = NULL;
607 : 32 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail248;
608 : 32 : {
609 : 32 : res_op->set_op (PLUS_EXPR, type, 2);
610 : 32 : {
611 : 32 : tree _o1[1], _r1;
612 : 32 : _o1[0] = captures[2];
613 : 32 : gimple_match_op tem_op (res_op->cond.any_else (), POPCOUNT, type, _o1[0]);
614 : 32 : tem_op.resimplify (lseq, valueize);
615 : 32 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
616 : 32 : if (!_r1) goto next_after_fail248;
617 : 16 : res_op->ops[0] = _r1;
618 : : }
619 : 16 : {
620 : 16 : tree _o1[1], _r1;
621 : 16 : _o1[0] = captures[3];
622 : 16 : gimple_match_op tem_op (res_op->cond.any_else (), POPCOUNT, type, _o1[0]);
623 : 16 : tem_op.resimplify (lseq, valueize);
624 : 16 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
625 : 16 : if (!_r1) goto next_after_fail248;
626 : 16 : res_op->ops[1] = _r1;
627 : : }
628 : 16 : res_op->resimplify (lseq, valueize);
629 : 16 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 140, __FILE__, __LINE__, true);
630 : : return true;
631 : : }
632 : : next_after_fail248:;
633 : : return false;
634 : : }
635 : :
636 : : bool
637 : 0 : gimple_simplify_79 (gimple_match_op *res_op, gimple_seq *seq,
638 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
639 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
640 : : {
641 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
642 : 0 : gimple_seq *lseq = seq;
643 : 0 : if (lseq
644 : 0 : && (!single_use (captures[0])
645 : 0 : || !single_use (captures[3])))
646 : 0 : lseq = NULL;
647 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail255;
648 : 0 : {
649 : 0 : res_op->set_op (MINUS_EXPR, type, 2);
650 : 0 : res_op->ops[0] = captures[2];
651 : 0 : {
652 : 0 : tree _o1[2], _r1;
653 : 0 : _o1[0] = captures[1];
654 : 0 : _o1[1] = captures[2];
655 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
656 : 0 : tem_op.resimplify (lseq, valueize);
657 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
658 : 0 : if (!_r1) goto next_after_fail255;
659 : 0 : res_op->ops[1] = _r1;
660 : : }
661 : 0 : res_op->resimplify (lseq, valueize);
662 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 147, __FILE__, __LINE__, true);
663 : : return true;
664 : : }
665 : : next_after_fail255:;
666 : : return false;
667 : : }
668 : :
669 : : bool
670 : 34334 : gimple_simplify_86 (gimple_match_op *res_op, gimple_seq *seq,
671 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
672 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
673 : : {
674 : 34334 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
675 : 34334 : if (!TYPE_SATURATING (type)
676 : : )
677 : : {
678 : 34334 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
679 : 66725 : && !FIXED_POINT_TYPE_P (type)
680 : : )
681 : : {
682 : 32391 : gimple_seq *lseq = seq;
683 : 32391 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail262;
684 : 32391 : {
685 : 32391 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
686 : 32391 : res_op->ops[0] = captures[1];
687 : 32391 : res_op->resimplify (lseq, valueize);
688 : 32391 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 153, __FILE__, __LINE__, true);
689 : 32391 : return true;
690 : : }
691 : 0 : next_after_fail262:;
692 : : }
693 : : }
694 : : return false;
695 : : }
696 : :
697 : : bool
698 : 2442 : gimple_simplify_89 (gimple_match_op *res_op, gimple_seq *seq,
699 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
700 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
701 : : {
702 : 2442 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
703 : 2442 : if (!TYPE_SATURATING (type)
704 : : )
705 : : {
706 : 2442 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
707 : 4300 : && !FIXED_POINT_TYPE_P (type)
708 : : )
709 : : {
710 : 1858 : gimple_seq *lseq = seq;
711 : 1858 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail267;
712 : 1858 : {
713 : 1858 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
714 : 1858 : res_op->ops[0] = captures[1];
715 : 1858 : res_op->resimplify (lseq, valueize);
716 : 1858 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 158, __FILE__, __LINE__, true);
717 : 1858 : return true;
718 : : }
719 : 0 : next_after_fail267:;
720 : : }
721 : : }
722 : : return false;
723 : : }
724 : :
725 : : bool
726 : 1786 : gimple_simplify_93 (gimple_match_op *res_op, gimple_seq *seq,
727 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
728 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
729 : : {
730 : 1786 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
731 : 1786 : if (!TYPE_SATURATING (type)
732 : : )
733 : : {
734 : 1786 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
735 : 3572 : && !FIXED_POINT_TYPE_P (type)
736 : : )
737 : : {
738 : 1786 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
739 : 1786 : || (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
740 : 1786 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
741 : : )
742 : : {
743 : 766 : gimple_seq *lseq = seq;
744 : 766 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail273;
745 : 766 : {
746 : 766 : res_op->set_op (NOP_EXPR, type, 1);
747 : 766 : res_op->ops[0] = captures[1];
748 : 766 : res_op->resimplify (lseq, valueize);
749 : 766 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 164, __FILE__, __LINE__, true);
750 : 766 : return true;
751 : : }
752 : 0 : next_after_fail273:;
753 : : }
754 : : }
755 : : }
756 : : return false;
757 : : }
758 : :
759 : : bool
760 : 0 : gimple_simplify_98 (gimple_match_op *res_op, gimple_seq *seq,
761 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
762 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
763 : : const enum tree_code ARG_UNUSED (log1),
764 : : const enum tree_code ARG_UNUSED (log2),
765 : : const combined_fn ARG_UNUSED (popcount))
766 : : {
767 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
768 : 0 : gimple_seq *lseq = seq;
769 : 0 : if (lseq
770 : 0 : && (!single_use (captures[0])
771 : 0 : || !single_use (captures[1])
772 : 0 : || !single_use (captures[3])
773 : 0 : || !single_use (captures[5])
774 : 0 : || !single_use (captures[6])))
775 : 0 : lseq = NULL;
776 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail280;
777 : 0 : {
778 : 0 : res_op->set_op (popcount, type, 1);
779 : 0 : {
780 : 0 : tree _o1[2], _r1;
781 : 0 : _o1[0] = captures[2];
782 : 0 : _o1[1] = captures[4];
783 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), log2, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
784 : 0 : tem_op.resimplify (lseq, valueize);
785 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
786 : 0 : if (!_r1) goto next_after_fail280;
787 : 0 : res_op->ops[0] = _r1;
788 : : }
789 : 0 : res_op->resimplify (lseq, valueize);
790 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 171, __FILE__, __LINE__, true);
791 : : return true;
792 : : }
793 : : next_after_fail280:;
794 : : return false;
795 : : }
796 : :
797 : : bool
798 : 23 : gimple_simplify_102 (gimple_match_op *res_op, gimple_seq *seq,
799 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
800 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
801 : : {
802 : 23 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
803 : 23 : gimple_seq *lseq = seq;
804 : 23 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail284;
805 : 23 : {
806 : 23 : res_op->set_op (BIT_IOR_EXPR, type, 2);
807 : 23 : res_op->ops[0] = captures[0];
808 : 23 : res_op->ops[1] = captures[1];
809 : 23 : res_op->resimplify (lseq, valueize);
810 : 23 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 175, __FILE__, __LINE__, true);
811 : : return true;
812 : : }
813 : 0 : next_after_fail284:;
814 : 0 : return false;
815 : : }
816 : :
817 : : bool
818 : 2 : gimple_simplify_107 (gimple_match_op *res_op, gimple_seq *seq,
819 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
820 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
821 : : {
822 : 2 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
823 : 4 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
824 : 4 : && TYPE_PRECISION (TREE_TYPE (captures[0])) == 1
825 : : )
826 : : {
827 : 2 : gimple_seq *lseq = seq;
828 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail289;
829 : 2 : {
830 : 2 : res_op->set_op (BIT_IOR_EXPR, type, 2);
831 : 2 : res_op->ops[0] = captures[0];
832 : 2 : {
833 : 2 : tree _o1[2], _r1;
834 : 2 : _o1[0] = captures[1];
835 : 2 : _o1[1] = build_one_cst (type);
836 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
837 : 2 : tem_op.resimplify (lseq, valueize);
838 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
839 : 2 : if (!_r1) goto next_after_fail289;
840 : 1 : res_op->ops[1] = _r1;
841 : : }
842 : 1 : res_op->resimplify (lseq, valueize);
843 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 179, __FILE__, __LINE__, true);
844 : 1 : return true;
845 : : }
846 : : next_after_fail289:;
847 : : }
848 : : return false;
849 : : }
850 : :
851 : : bool
852 : 0 : gimple_simplify_114 (gimple_match_op *res_op, gimple_seq *seq,
853 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
854 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
855 : : {
856 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
857 : 0 : gimple_seq *lseq = seq;
858 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail296;
859 : 0 : {
860 : 0 : res_op->set_op (BIT_IOR_EXPR, type, 2);
861 : 0 : res_op->ops[0] = captures[0];
862 : 0 : res_op->ops[1] = captures[3];
863 : 0 : res_op->resimplify (lseq, valueize);
864 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 184, __FILE__, __LINE__, true);
865 : : return true;
866 : : }
867 : 0 : next_after_fail296:;
868 : 0 : return false;
869 : : }
870 : :
871 : : bool
872 : 3084 : gimple_simplify_123 (gimple_match_op *res_op, gimple_seq *seq,
873 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
874 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
875 : : const enum tree_code ARG_UNUSED (op),
876 : : const enum tree_code ARG_UNUSED (rop))
877 : : {
878 : 3084 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
879 : 3084 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[0]))
880 : 3084 : && element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
881 : : )
882 : : {
883 : 2926 : gimple_seq *lseq = seq;
884 : 2926 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail305;
885 : 2926 : {
886 : 2926 : res_op->set_op (BIT_NOT_EXPR, type, 1);
887 : 2926 : {
888 : 2926 : tree _o1[2], _r1;
889 : 2926 : {
890 : 2926 : tree _o2[1], _r2;
891 : 2926 : _o2[0] = captures[0];
892 : 2926 : if (type != TREE_TYPE (_o2[0])
893 : 2926 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
894 : : {
895 : 203 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o2[0]);
896 : 203 : tem_op.resimplify (lseq, valueize);
897 : 203 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
898 : 203 : if (!_r2) goto next_after_fail305;
899 : : }
900 : : else
901 : : _r2 = _o2[0];
902 : 2835 : _o1[0] = _r2;
903 : : }
904 : 2835 : {
905 : 2835 : tree _o2[1], _r2;
906 : 2835 : _o2[0] = captures[1];
907 : 2835 : if (type != TREE_TYPE (_o2[0])
908 : 2835 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
909 : : {
910 : 171 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o2[0]);
911 : 171 : tem_op.resimplify (lseq, valueize);
912 : 171 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
913 : 171 : if (!_r2) goto next_after_fail305;
914 : : }
915 : : else
916 : : _r2 = _o2[0];
917 : 2815 : _o1[1] = _r2;
918 : : }
919 : 2815 : gimple_match_op tem_op (res_op->cond.any_else (), rop, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
920 : 2815 : tem_op.resimplify (lseq, valueize);
921 : 2815 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
922 : 2815 : if (!_r1) goto next_after_fail305;
923 : 1137 : res_op->ops[0] = _r1;
924 : : }
925 : 1137 : res_op->resimplify (lseq, valueize);
926 : 1137 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 190, __FILE__, __LINE__, true);
927 : 1137 : return true;
928 : : }
929 : : next_after_fail305:;
930 : : }
931 : : return false;
932 : : }
933 : :
934 : : bool
935 : 10 : gimple_simplify_136 (gimple_match_op *res_op, gimple_seq *seq,
936 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
937 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
938 : : const enum tree_code ARG_UNUSED (bitop),
939 : : const enum tree_code ARG_UNUSED (rbitop))
940 : : {
941 : 10 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
942 : 10 : gimple_seq *lseq = seq;
943 : 10 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail322;
944 : 10 : {
945 : 10 : tree tem;
946 : 10 : tem = captures[2];
947 : 10 : res_op->set_value (tem);
948 : 10 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 196, __FILE__, __LINE__, true);
949 : : return true;
950 : : }
951 : 0 : next_after_fail322:;
952 : 0 : return false;
953 : : }
954 : :
955 : : bool
956 : 21 : gimple_simplify_140 (gimple_match_op *res_op, gimple_seq *seq,
957 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
958 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
959 : : const enum tree_code ARG_UNUSED (op))
960 : : {
961 : 21 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
962 : 21 : if (bitwise_equal_p (captures[4], captures[7])
963 : : )
964 : : {
965 : 14 : gimple_seq *lseq = seq;
966 : 14 : if (lseq
967 : 7 : && (!single_use (captures[0])
968 : 7 : || !single_use (captures[1])
969 : 7 : || !single_use (captures[2])
970 : 7 : || !single_use (captures[3])))
971 : 7 : lseq = NULL;
972 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail327;
973 : 14 : {
974 : 14 : res_op->set_op (NOP_EXPR, type, 1);
975 : 14 : {
976 : 14 : tree _o1[2], _r1;
977 : 14 : {
978 : 14 : tree _o2[2], _r2;
979 : 14 : _o2[0] = captures[5];
980 : 14 : {
981 : 14 : tree _o3[1], _r3;
982 : 14 : _o3[0] = captures[6];
983 : 14 : if (TREE_TYPE (_o2[0]) != TREE_TYPE (_o3[0])
984 : 14 : && !useless_type_conversion_p (TREE_TYPE (_o2[0]), TREE_TYPE (_o3[0])))
985 : : {
986 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (_o2[0]), _o3[0]);
987 : 0 : tem_op.resimplify (lseq, valueize);
988 : 0 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
989 : 0 : if (!_r3) goto next_after_fail327;
990 : : }
991 : : else
992 : : _r3 = _o3[0];
993 : 14 : _o2[1] = _r3;
994 : : }
995 : 14 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
996 : 14 : tem_op.resimplify (lseq, valueize);
997 : 14 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
998 : 14 : if (!_r2) goto next_after_fail327;
999 : 7 : _o1[0] = _r2;
1000 : : }
1001 : 7 : {
1002 : 7 : tree _o2[1], _r2;
1003 : 7 : _o2[0] = captures[4];
1004 : 7 : if (TREE_TYPE (_o1[0]) != TREE_TYPE (_o2[0])
1005 : 7 : && !useless_type_conversion_p (TREE_TYPE (_o1[0]), TREE_TYPE (_o2[0])))
1006 : : {
1007 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (_o1[0]), _o2[0]);
1008 : 0 : tem_op.resimplify (lseq, valueize);
1009 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1010 : 0 : if (!_r2) goto next_after_fail327;
1011 : : }
1012 : : else
1013 : : _r2 = _o2[0];
1014 : 7 : _o1[1] = _r2;
1015 : : }
1016 : 7 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_IOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1017 : 7 : tem_op.resimplify (lseq, valueize);
1018 : 7 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1019 : 7 : if (!_r1) goto next_after_fail327;
1020 : 7 : res_op->ops[0] = _r1;
1021 : : }
1022 : 7 : res_op->resimplify (lseq, valueize);
1023 : 7 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 198, __FILE__, __LINE__, true);
1024 : 7 : return true;
1025 : : }
1026 : : next_after_fail327:;
1027 : : }
1028 : : return false;
1029 : : }
1030 : :
1031 : : bool
1032 : 0 : gimple_simplify_155 (gimple_match_op *res_op, gimple_seq *seq,
1033 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1034 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1035 : : const enum tree_code ARG_UNUSED (eqne))
1036 : : {
1037 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1038 : 0 : if (eqne == EQ_EXPR
1039 : : )
1040 : : {
1041 : 0 : gimple_seq *lseq = seq;
1042 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail363;
1043 : 0 : {
1044 : 0 : tree tem;
1045 : 0 : tem = captures[0];
1046 : 0 : res_op->set_value (tem);
1047 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 227, __FILE__, __LINE__, true);
1048 : 0 : return true;
1049 : : }
1050 : 0 : next_after_fail363:;
1051 : : }
1052 : : else
1053 : : {
1054 : 0 : if (eqne == NE_EXPR
1055 : : )
1056 : : {
1057 : 0 : gimple_seq *lseq = seq;
1058 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail364;
1059 : 0 : {
1060 : 0 : tree tem;
1061 : 0 : tem = constant_boolean_node (true, type);
1062 : 0 : res_op->set_value (tem);
1063 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 228, __FILE__, __LINE__, true);
1064 : 0 : return true;
1065 : : }
1066 : 0 : next_after_fail364:;
1067 : : }
1068 : : }
1069 : : return false;
1070 : : }
1071 : :
1072 : : bool
1073 : 491 : gimple_simplify_161 (gimple_match_op *res_op, gimple_seq *seq,
1074 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1075 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1076 : : {
1077 : 491 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1078 : 982 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
1079 : 966 : && TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[1]))
1080 : : )
1081 : : {
1082 : 435 : gimple_seq *lseq = seq;
1083 : 435 : if (lseq
1084 : 235 : && (!single_use (captures[0])
1085 : 235 : || !single_use (captures[2])))
1086 : 200 : lseq = NULL;
1087 : 435 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail383;
1088 : 435 : {
1089 : 435 : res_op->set_op (LE_EXPR, type, 2);
1090 : 435 : res_op->ops[0] = captures[3];
1091 : 435 : {
1092 : 435 : tree _o1[2], _r1;
1093 : 435 : _o1[0] = captures[1];
1094 : 435 : _o1[1] = build_int_cst (TREE_TYPE (captures[1]), 1);
1095 : 435 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1096 : 435 : tem_op.resimplify (lseq, valueize);
1097 : 435 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1098 : 435 : if (!_r1) goto next_after_fail383;
1099 : 235 : res_op->ops[1] = _r1;
1100 : : }
1101 : 235 : res_op->resimplify (lseq, valueize);
1102 : 235 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 211, __FILE__, __LINE__, true);
1103 : 235 : return true;
1104 : : }
1105 : : next_after_fail383:;
1106 : : }
1107 : : return false;
1108 : : }
1109 : :
1110 : : bool
1111 : 0 : gimple_simplify_167 (gimple_match_op *res_op, gimple_seq *seq,
1112 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1113 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1114 : : {
1115 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1116 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
1117 : : )
1118 : : {
1119 : 0 : gimple_seq *lseq = seq;
1120 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail389;
1121 : 0 : {
1122 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
1123 : 0 : {
1124 : 0 : tree _o1[1], _r1;
1125 : 0 : _o1[0] = captures[0];
1126 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
1127 : 0 : tem_op.resimplify (lseq, valueize);
1128 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1129 : 0 : if (!_r1) goto next_after_fail389;
1130 : 0 : res_op->ops[0] = _r1;
1131 : : }
1132 : 0 : res_op->resimplify (lseq, valueize);
1133 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 232, __FILE__, __LINE__, true);
1134 : 0 : return true;
1135 : : }
1136 : : next_after_fail389:;
1137 : : }
1138 : : return false;
1139 : : }
1140 : :
1141 : : bool
1142 : 0 : gimple_simplify_171 (gimple_match_op *res_op, gimple_seq *seq,
1143 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1144 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1145 : : {
1146 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1147 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
1148 : : )
1149 : : {
1150 : 0 : gimple_seq *lseq = seq;
1151 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail393;
1152 : 0 : {
1153 : 0 : res_op->set_op (NOP_EXPR, type, 1);
1154 : 0 : {
1155 : 0 : tree _o1[1], _r1;
1156 : 0 : _o1[0] = captures[0];
1157 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
1158 : 0 : tem_op.resimplify (lseq, valueize);
1159 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1160 : 0 : if (!_r1) goto next_after_fail393;
1161 : 0 : res_op->ops[0] = _r1;
1162 : : }
1163 : 0 : res_op->resimplify (lseq, valueize);
1164 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 232, __FILE__, __LINE__, true);
1165 : 0 : return true;
1166 : : }
1167 : : next_after_fail393:;
1168 : : }
1169 : : return false;
1170 : : }
1171 : :
1172 : : bool
1173 : 0 : gimple_simplify_176 (gimple_match_op *res_op, gimple_seq *seq,
1174 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1175 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1176 : : {
1177 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1178 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
1179 : : )
1180 : : {
1181 : 0 : gimple_seq *lseq = seq;
1182 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail398;
1183 : 0 : {
1184 : 0 : res_op->set_op (NOP_EXPR, type, 1);
1185 : 0 : {
1186 : 0 : tree _o1[1], _r1;
1187 : 0 : _o1[0] = captures[0];
1188 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
1189 : 0 : tem_op.resimplify (lseq, valueize);
1190 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1191 : 0 : if (!_r1) goto next_after_fail398;
1192 : 0 : res_op->ops[0] = _r1;
1193 : : }
1194 : 0 : res_op->resimplify (lseq, valueize);
1195 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 233, __FILE__, __LINE__, true);
1196 : 0 : return true;
1197 : : }
1198 : : next_after_fail398:;
1199 : : }
1200 : : return false;
1201 : : }
1202 : :
1203 : : bool
1204 : 0 : gimple_simplify_183 (gimple_match_op *res_op, gimple_seq *seq,
1205 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1206 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1207 : : const combined_fn ARG_UNUSED (COPYSIGN_ALL))
1208 : : {
1209 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1210 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
1211 : : )
1212 : : {
1213 : 0 : gimple_seq *lseq = seq;
1214 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail405;
1215 : 0 : {
1216 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
1217 : 0 : {
1218 : 0 : tree _o1[1], _r1;
1219 : 0 : _o1[0] = captures[0];
1220 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
1221 : 0 : tem_op.resimplify (lseq, valueize);
1222 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1223 : 0 : if (!_r1) goto next_after_fail405;
1224 : 0 : res_op->ops[0] = _r1;
1225 : : }
1226 : 0 : res_op->resimplify (lseq, valueize);
1227 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 235, __FILE__, __LINE__, true);
1228 : 0 : return true;
1229 : : }
1230 : : next_after_fail405:;
1231 : : }
1232 : : return false;
1233 : : }
1234 : :
1235 : : bool
1236 : 2572 : gimple_simplify_192 (gimple_match_op *res_op, gimple_seq *seq,
1237 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1238 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1239 : : {
1240 : 2572 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1241 : 2572 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
1242 : 2572 : && tree_nop_conversion_p (type, TREE_TYPE (captures[1]))
1243 : : )
1244 : : {
1245 : 1845 : gimple_seq *lseq = seq;
1246 : 1845 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail416;
1247 : 1845 : {
1248 : 1845 : res_op->set_op (MULT_EXPR, type, 2);
1249 : 1845 : {
1250 : 1845 : tree _o1[1], _r1;
1251 : 1845 : _o1[0] = captures[0];
1252 : 1845 : if (type != TREE_TYPE (_o1[0])
1253 : 1845 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
1254 : : {
1255 : 1225 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
1256 : 1225 : tem_op.resimplify (lseq, valueize);
1257 : 1225 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1258 : 1225 : if (!_r1) goto next_after_fail416;
1259 : : }
1260 : : else
1261 : : _r1 = _o1[0];
1262 : 1280 : res_op->ops[0] = _r1;
1263 : : }
1264 : 1280 : {
1265 : 1280 : tree _o1[1], _r1;
1266 : 1280 : {
1267 : 1280 : tree _o2[1], _r2;
1268 : 1280 : _o2[0] = captures[1];
1269 : 1280 : gimple_match_op tem_op (res_op->cond.any_else (), NEGATE_EXPR, TREE_TYPE (_o2[0]), _o2[0]);
1270 : 1280 : tem_op.resimplify (lseq, valueize);
1271 : 1280 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1272 : 1280 : if (!_r2) goto next_after_fail416;
1273 : 1276 : _o1[0] = _r2;
1274 : : }
1275 : 1276 : if (type != TREE_TYPE (_o1[0])
1276 : 1276 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
1277 : : {
1278 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
1279 : 2 : tem_op.resimplify (lseq, valueize);
1280 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1281 : 2 : if (!_r1) goto next_after_fail416;
1282 : : }
1283 : : else
1284 : : _r1 = _o1[0];
1285 : 1276 : res_op->ops[1] = _r1;
1286 : : }
1287 : 1276 : res_op->resimplify (lseq, valueize);
1288 : 1276 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 242, __FILE__, __LINE__, true);
1289 : 1276 : return true;
1290 : : }
1291 : : next_after_fail416:;
1292 : : }
1293 : : return false;
1294 : : }
1295 : :
1296 : : bool
1297 : 3170 : gimple_simplify_207 (gimple_match_op *res_op, gimple_seq *seq,
1298 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1299 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1300 : : const enum tree_code ARG_UNUSED (cmp))
1301 : : {
1302 : 3170 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1303 : 6340 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
1304 : 2830 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
1305 : 4808 : && tree_expr_nonzero_p (captures[1])
1306 : : )
1307 : : {
1308 : 166 : gimple_seq *lseq = seq;
1309 : 166 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail432;
1310 : 166 : {
1311 : 166 : res_op->set_op (cmp, type, 2);
1312 : 166 : res_op->ops[0] = captures[0];
1313 : 166 : res_op->ops[1] = captures[2];
1314 : 166 : res_op->resimplify (lseq, valueize);
1315 : 166 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 257, __FILE__, __LINE__, true);
1316 : 166 : return true;
1317 : : }
1318 : 0 : next_after_fail432:;
1319 : : }
1320 : : return false;
1321 : : }
1322 : :
1323 : : bool
1324 : 4659 : gimple_simplify_213 (gimple_match_op *res_op, gimple_seq *seq,
1325 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1326 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1327 : : const enum tree_code ARG_UNUSED (op))
1328 : : {
1329 : 4659 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1330 : 4659 : gimple_seq *lseq = seq;
1331 : 4659 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail454;
1332 : 4659 : {
1333 : 4659 : res_op->set_op (op, type, 2);
1334 : 4659 : res_op->ops[0] = captures[1];
1335 : 4659 : res_op->ops[1] = captures[2];
1336 : 4659 : res_op->resimplify (lseq, valueize);
1337 : 4659 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 278, __FILE__, __LINE__, true);
1338 : : return true;
1339 : : }
1340 : 0 : next_after_fail454:;
1341 : 0 : return false;
1342 : : }
1343 : :
1344 : : bool
1345 : 11 : gimple_simplify_218 (gimple_match_op *res_op, gimple_seq *seq,
1346 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1347 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1348 : : const enum tree_code ARG_UNUSED (op))
1349 : : {
1350 : 11 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1351 : 11 : if (tree_nop_conversion_p (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))
1352 : 11 : && tree_nop_conversion_p (TREE_TYPE (captures[0]), TREE_TYPE (captures[2]))
1353 : 22 : && (CONSTANT_CLASS_P (captures[3]) || (single_use (captures[1]) && single_use (captures[0])))
1354 : : )
1355 : : {
1356 : 10 : gimple_seq *lseq = seq;
1357 : 10 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail459;
1358 : 10 : {
1359 : 10 : res_op->set_op (op, type, 2);
1360 : 10 : res_op->ops[0] = captures[3];
1361 : 10 : res_op->ops[1] = build_zero_cst (TREE_TYPE (captures[3]));
1362 : 10 : res_op->resimplify (lseq, valueize);
1363 : 10 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 279, __FILE__, __LINE__, true);
1364 : 10 : return true;
1365 : : }
1366 : 0 : next_after_fail459:;
1367 : : }
1368 : : return false;
1369 : : }
1370 : :
1371 : : bool
1372 : 24429 : gimple_simplify_225 (gimple_match_op *res_op, gimple_seq *seq,
1373 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1374 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1375 : : const enum tree_code ARG_UNUSED (minmax),
1376 : : const enum tree_code ARG_UNUSED (cmp),
1377 : : const enum tree_code ARG_UNUSED (out))
1378 : : {
1379 : 24429 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1380 : 24429 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
1381 : : )
1382 : : {
1383 : 23477 : gimple_seq *lseq = seq;
1384 : 23477 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail466;
1385 : 23477 : {
1386 : 23477 : res_op->set_op (out, type, 2);
1387 : 23477 : res_op->ops[0] = captures[0];
1388 : 23477 : res_op->ops[1] = captures[1];
1389 : 23477 : res_op->resimplify (lseq, valueize);
1390 : 23477 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 289, __FILE__, __LINE__, true);
1391 : 23477 : return true;
1392 : : }
1393 : 0 : next_after_fail466:;
1394 : : }
1395 : : return false;
1396 : : }
1397 : :
1398 : : bool
1399 : 12244 : gimple_simplify_232 (gimple_match_op *res_op, gimple_seq *seq,
1400 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1401 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1402 : : const enum tree_code ARG_UNUSED (cmp))
1403 : : {
1404 : 12244 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1405 : 12244 : if (tree_fits_shwi_p (captures[3])
1406 : 12244 : && tree_to_shwi (captures[3]) > 0
1407 : 24460 : && tree_to_shwi (captures[3]) < TYPE_PRECISION (TREE_TYPE (captures[2]))
1408 : : )
1409 : : {
1410 : 12212 : {
1411 : 12212 : tree t0 = TREE_TYPE (captures[2]);
1412 : 12212 : unsigned int prec = TYPE_PRECISION (t0);
1413 : 12212 : wide_int c1 = wi::to_wide (captures[3]);
1414 : 12212 : wide_int c2 = wi::to_wide (captures[4]);
1415 : 12212 : wide_int c3 = wi::to_wide (captures[5]);
1416 : 12212 : wide_int sb = wi::set_bit_in_zero (prec - 1, prec);
1417 : 12212 : if ((c2 & c3) != c3
1418 : : )
1419 : : {
1420 : 0 : gimple_seq *lseq = seq;
1421 : 0 : if (lseq
1422 : : && (!single_use (captures[0])
1423 : : || !single_use (captures[1])))
1424 : 0 : lseq = NULL;
1425 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail478;
1426 : 0 : {
1427 : 0 : tree tem;
1428 : 0 : tem = constant_boolean_node (cmp == NE_EXPR, type);
1429 : 0 : res_op->set_value (tem);
1430 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 301, __FILE__, __LINE__, true);
1431 : 0 : return true;
1432 : : }
1433 : 0 : next_after_fail478:;
1434 : : }
1435 : : else
1436 : : {
1437 : 12212 : if (TYPE_UNSIGNED (t0)
1438 : : )
1439 : : {
1440 : 11036 : if ((c3 & wi::arshift (sb, c1 - 1)) != 0
1441 : : )
1442 : : {
1443 : 0 : gimple_seq *lseq = seq;
1444 : 0 : if (lseq
1445 : : && (!single_use (captures[0])
1446 : : || !single_use (captures[1])))
1447 : 0 : lseq = NULL;
1448 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail479;
1449 : 0 : {
1450 : 0 : tree tem;
1451 : 0 : tem = constant_boolean_node (cmp == NE_EXPR, type);
1452 : 0 : res_op->set_value (tem);
1453 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 302, __FILE__, __LINE__, true);
1454 : 0 : return true;
1455 : : }
1456 : 0 : next_after_fail479:;
1457 : : }
1458 : : else
1459 : : {
1460 : 11036 : gimple_seq *lseq = seq;
1461 : 11036 : if (lseq
1462 : 3634 : && (!single_use (captures[0])
1463 : 849 : || !single_use (captures[1])))
1464 : 10572 : lseq = NULL;
1465 : 11036 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail480;
1466 : 11036 : {
1467 : 11036 : res_op->set_op (cmp, type, 2);
1468 : 11036 : {
1469 : 11036 : tree _o1[2], _r1;
1470 : 11036 : _o1[0] = captures[2];
1471 : 11036 : _o1[1] = wide_int_to_tree (t0, c2 << c1);
1472 : 11036 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1473 : 11036 : tem_op.resimplify (lseq, valueize);
1474 : 11036 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1475 : 11036 : if (!_r1) goto next_after_fail480;
1476 : 464 : res_op->ops[0] = _r1;
1477 : : }
1478 : 464 : res_op->ops[1] = wide_int_to_tree (t0, c3 << c1);
1479 : 464 : res_op->resimplify (lseq, valueize);
1480 : 464 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 303, __FILE__, __LINE__, true);
1481 : 464 : return true;
1482 : : }
1483 : 11649 : next_after_fail480:;
1484 : : }
1485 : : }
1486 : : else
1487 : : {
1488 : 1176 : {
1489 : 1176 : wide_int smask = wi::arshift (sb, c1);
1490 : 1176 : if ((c2 & smask) == 0
1491 : : )
1492 : : {
1493 : 1135 : gimple_seq *lseq = seq;
1494 : 1135 : if (lseq
1495 : 303 : && (!single_use (captures[0])
1496 : 138 : || !single_use (captures[1])))
1497 : 1045 : lseq = NULL;
1498 : 1135 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail481;
1499 : 1135 : {
1500 : 1135 : res_op->set_op (cmp, type, 2);
1501 : 1135 : {
1502 : 1135 : tree _o1[2], _r1;
1503 : 1135 : _o1[0] = captures[2];
1504 : 1135 : _o1[1] = wide_int_to_tree (t0, c2 << c1);
1505 : 1135 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1506 : 1135 : tem_op.resimplify (lseq, valueize);
1507 : 1135 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1508 : 1135 : if (!_r1) goto next_after_fail481;
1509 : 90 : res_op->ops[0] = _r1;
1510 : : }
1511 : 90 : res_op->ops[1] = wide_int_to_tree (t0, c3 << c1);
1512 : 90 : res_op->resimplify (lseq, valueize);
1513 : 90 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 304, __FILE__, __LINE__, true);
1514 : 90 : return true;
1515 : : }
1516 : 1077 : next_after_fail481:;
1517 : : }
1518 : : else
1519 : : {
1520 : 41 : if ((c3 & smask) == 0
1521 : : )
1522 : : {
1523 : 27 : gimple_seq *lseq = seq;
1524 : 27 : if (lseq
1525 : 5 : && (!single_use (captures[0])
1526 : 5 : || !single_use (captures[1])))
1527 : 24 : lseq = NULL;
1528 : 27 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail482;
1529 : 27 : {
1530 : 27 : res_op->set_op (cmp, type, 2);
1531 : 27 : {
1532 : 27 : tree _o1[2], _r1;
1533 : 27 : _o1[0] = captures[2];
1534 : 27 : _o1[1] = wide_int_to_tree (t0, (c2 << c1) | sb);
1535 : 27 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1536 : 27 : tem_op.resimplify (lseq, valueize);
1537 : 27 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1538 : 27 : if (!_r1) goto next_after_fail482;
1539 : 3 : res_op->ops[0] = _r1;
1540 : : }
1541 : 3 : res_op->ops[1] = wide_int_to_tree (t0, c3 << c1);
1542 : 3 : res_op->resimplify (lseq, valueize);
1543 : 3 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 305, __FILE__, __LINE__, true);
1544 : 3 : return true;
1545 : : }
1546 : 1077 : next_after_fail482:;
1547 : : }
1548 : : else
1549 : : {
1550 : 14 : if ((c2 & smask) != (c3 & smask)
1551 : : )
1552 : : {
1553 : 2 : gimple_seq *lseq = seq;
1554 : 2 : if (lseq
1555 : : && (!single_use (captures[0])
1556 : : || !single_use (captures[1])))
1557 : 2 : lseq = NULL;
1558 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail483;
1559 : 2 : {
1560 : 2 : tree tem;
1561 : 2 : tem = constant_boolean_node (cmp == NE_EXPR, type);
1562 : 2 : res_op->set_value (tem);
1563 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 306, __FILE__, __LINE__, true);
1564 : 2 : return true;
1565 : : }
1566 : 0 : next_after_fail483:;
1567 : : }
1568 : : else
1569 : : {
1570 : 12 : gimple_seq *lseq = seq;
1571 : 12 : if (lseq
1572 : 8 : && (!single_use (captures[0])
1573 : 8 : || !single_use (captures[1])))
1574 : 8 : lseq = NULL;
1575 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail484;
1576 : 12 : {
1577 : 12 : res_op->set_op (cmp, type, 2);
1578 : 12 : {
1579 : 12 : tree _o1[2], _r1;
1580 : 12 : _o1[0] = captures[2];
1581 : 12 : _o1[1] = wide_int_to_tree (t0, (c2 << c1) | sb);
1582 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1583 : 12 : tem_op.resimplify (lseq, valueize);
1584 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1585 : 12 : if (!_r1) goto next_after_fail484;
1586 : 4 : res_op->ops[0] = _r1;
1587 : : }
1588 : 4 : res_op->ops[1] = wide_int_to_tree (t0, (c3 << c1) | sb);
1589 : 4 : res_op->resimplify (lseq, valueize);
1590 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 307, __FILE__, __LINE__, true);
1591 : 4 : return true;
1592 : : }
1593 : 1077 : next_after_fail484:;
1594 : : }
1595 : : }
1596 : : }
1597 : 1176 : }
1598 : : }
1599 : : }
1600 : 12212 : }
1601 : : }
1602 : : return false;
1603 : : }
1604 : :
1605 : : bool
1606 : 5095455 : gimple_simplify_263 (gimple_match_op *res_op, gimple_seq *seq,
1607 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1608 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1609 : : const enum tree_code ARG_UNUSED (cmp))
1610 : : {
1611 : 5095455 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1612 : 10148088 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
1613 : 4840031 : && !(targetm.have_canonicalize_funcptr_for_compare ()
1614 : 0 : && ((POINTER_TYPE_P (TREE_TYPE (captures[1]))
1615 : 0 : && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (captures[1]))))
1616 : 0 : || (POINTER_TYPE_P (TREE_TYPE (captures[3]))
1617 : 0 : && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (captures[3]))))))
1618 : 9935486 : && single_use (captures[0])
1619 : : )
1620 : : {
1621 : 2753852 : if (TYPE_PRECISION (TREE_TYPE (captures[1])) == TYPE_PRECISION (TREE_TYPE (captures[0]))
1622 : 1267601 : && (TREE_CODE (captures[3]) == INTEGER_CST
1623 : 534951 : || captures[2] != captures[3])
1624 : 732650 : && (TYPE_UNSIGNED (TREE_TYPE (captures[1])) == TYPE_UNSIGNED (TREE_TYPE (captures[0]))
1625 : : || cmp == NE_EXPR
1626 : 699736 : || cmp == EQ_EXPR)
1627 : 165443 : && !POINTER_TYPE_P (TREE_TYPE (captures[1]))
1628 : 2909165 : && (TREE_CODE (TREE_TYPE (captures[1])) != BOOLEAN_TYPE
1629 : 28730 : || TREE_CODE (TREE_TYPE (captures[3])) == BOOLEAN_TYPE)
1630 : : )
1631 : : {
1632 : 155255 : if (TREE_CODE (captures[2]) == INTEGER_CST
1633 : : )
1634 : : {
1635 : 155255 : gimple_seq *lseq = seq;
1636 : 155255 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail569;
1637 : 155255 : {
1638 : 155255 : res_op->set_op (cmp, type, 2);
1639 : 155255 : res_op->ops[0] = captures[1];
1640 : 155255 : res_op->ops[1] = force_fit_type (TREE_TYPE (captures[1]),
1641 : 155255 : wide_int::from (wi::to_wide (captures[2]),
1642 : 155255 : MAX (TYPE_PRECISION (TREE_TYPE (captures[2])),
1643 : : TYPE_PRECISION (TREE_TYPE (captures[1]))),
1644 : 155255 : TYPE_SIGN (TREE_TYPE (captures[2]))),
1645 : 155255 : 0, TREE_OVERFLOW (captures[2]));
1646 : 155255 : res_op->resimplify (lseq, valueize);
1647 : 155255 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 383, __FILE__, __LINE__, true);
1648 : 155255 : return true;
1649 : : }
1650 : 0 : next_after_fail569:;
1651 : : }
1652 : : else
1653 : : {
1654 : 0 : gimple_seq *lseq = seq;
1655 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail570;
1656 : 0 : {
1657 : 0 : res_op->set_op (cmp, type, 2);
1658 : 0 : res_op->ops[0] = captures[1];
1659 : 0 : {
1660 : 0 : tree _o1[1], _r1;
1661 : 0 : _o1[0] = captures[2];
1662 : 0 : if (TREE_TYPE (res_op->ops[0]) != TREE_TYPE (_o1[0])
1663 : 0 : && !useless_type_conversion_p (TREE_TYPE (res_op->ops[0]), TREE_TYPE (_o1[0])))
1664 : : {
1665 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (res_op->ops[0]), _o1[0]);
1666 : 0 : tem_op.resimplify (lseq, valueize);
1667 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1668 : 0 : if (!_r1) goto next_after_fail570;
1669 : : }
1670 : : else
1671 : : _r1 = _o1[0];
1672 : 0 : res_op->ops[1] = _r1;
1673 : : }
1674 : 0 : res_op->resimplify (lseq, valueize);
1675 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 384, __FILE__, __LINE__, true);
1676 : 0 : return true;
1677 : : }
1678 : : next_after_fail570:;
1679 : : }
1680 : : }
1681 : : else
1682 : : {
1683 : 2598597 : if (TYPE_PRECISION (TREE_TYPE (captures[0])) > TYPE_PRECISION (TREE_TYPE (captures[1]))
1684 : : )
1685 : : {
1686 : 452798 : if ((cmp == EQ_EXPR || cmp == NE_EXPR
1687 : 186791 : || TYPE_UNSIGNED (TREE_TYPE (captures[0])) == TYPE_UNSIGNED (TREE_TYPE (captures[1]))
1688 : 102809 : || (!TYPE_UNSIGNED (TREE_TYPE (captures[0]))
1689 : 74406 : && TYPE_UNSIGNED (TREE_TYPE (captures[1]))))
1690 : 611186 : && (types_match (TREE_TYPE (captures[3]), TREE_TYPE (captures[1]))
1691 : 424395 : || ((TYPE_PRECISION (TREE_TYPE (captures[1]))
1692 : 424395 : >= TYPE_PRECISION (TREE_TYPE (captures[3])))
1693 : 0 : && (TYPE_UNSIGNED (TREE_TYPE (captures[1]))
1694 : 0 : == TYPE_UNSIGNED (TREE_TYPE (captures[3]))))
1695 : 424395 : || (TREE_CODE (captures[2]) == INTEGER_CST
1696 : 122528 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
1697 : 122528 : && int_fits_type_p (captures[2], TREE_TYPE (captures[1]))))
1698 : : )
1699 : : {
1700 : 121172 : gimple_seq *lseq = seq;
1701 : 121172 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail571;
1702 : 121172 : {
1703 : 121172 : res_op->set_op (cmp, type, 2);
1704 : 121172 : res_op->ops[0] = captures[1];
1705 : 121172 : {
1706 : 121172 : tree _o1[1], _r1;
1707 : 121172 : _o1[0] = captures[3];
1708 : 121172 : if (TREE_TYPE (res_op->ops[0]) != TREE_TYPE (_o1[0])
1709 : 121172 : && !useless_type_conversion_p (TREE_TYPE (res_op->ops[0]), TREE_TYPE (_o1[0])))
1710 : : {
1711 : 121172 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (res_op->ops[0]), _o1[0]);
1712 : 121172 : tem_op.resimplify (lseq, valueize);
1713 : 121172 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1714 : 121172 : if (!_r1) goto next_after_fail571;
1715 : : }
1716 : : else
1717 : : _r1 = _o1[0];
1718 : 121172 : res_op->ops[1] = _r1;
1719 : : }
1720 : 121172 : res_op->resimplify (lseq, valueize);
1721 : 121172 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 385, __FILE__, __LINE__, true);
1722 : 121172 : return true;
1723 : : }
1724 : : next_after_fail571:;
1725 : : }
1726 : : else
1727 : : {
1728 : 331626 : if (TREE_CODE (captures[2]) == INTEGER_CST
1729 : 8656 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
1730 : 340282 : && !int_fits_type_p (captures[2], TREE_TYPE (captures[1]))
1731 : : )
1732 : : {
1733 : 3121 : {
1734 : 3121 : tree min = lower_bound_in_type (TREE_TYPE (captures[3]), TREE_TYPE (captures[1]));
1735 : 3121 : tree max = upper_bound_in_type (TREE_TYPE (captures[3]), TREE_TYPE (captures[1]));
1736 : 3121 : bool above = integer_nonzerop (const_binop (LT_EXPR, type, max, captures[2]));
1737 : 3121 : bool below = integer_nonzerop (const_binop (LT_EXPR, type, captures[2], min));
1738 : 3121 : if (above || below
1739 : : )
1740 : : {
1741 : 553 : if (cmp == EQ_EXPR || cmp == NE_EXPR
1742 : : )
1743 : : {
1744 : 290 : gimple_seq *lseq = seq;
1745 : 290 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail572;
1746 : 290 : {
1747 : 290 : tree tem;
1748 : 290 : tem = constant_boolean_node (cmp == EQ_EXPR ? false : true, type);
1749 : 290 : res_op->set_value (tem);
1750 : 290 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 386, __FILE__, __LINE__, true);
1751 : 290 : return true;
1752 : : }
1753 : 0 : next_after_fail572:;
1754 : : }
1755 : : else
1756 : : {
1757 : 263 : if (cmp == LT_EXPR || cmp == LE_EXPR
1758 : : )
1759 : : {
1760 : 67 : gimple_seq *lseq = seq;
1761 : 67 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail573;
1762 : 67 : {
1763 : 67 : tree tem;
1764 : 67 : tem = constant_boolean_node (above ? true : false, type);
1765 : 67 : res_op->set_value (tem);
1766 : 67 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 387, __FILE__, __LINE__, true);
1767 : 67 : return true;
1768 : : }
1769 : 0 : next_after_fail573:;
1770 : : }
1771 : : else
1772 : : {
1773 : 196 : if (cmp == GT_EXPR || cmp == GE_EXPR
1774 : : )
1775 : : {
1776 : 196 : gimple_seq *lseq = seq;
1777 : 196 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail574;
1778 : 196 : {
1779 : 196 : tree tem;
1780 : 245 : tem = constant_boolean_node (above ? false : true, type);
1781 : 196 : res_op->set_value (tem);
1782 : 196 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 388, __FILE__, __LINE__, true);
1783 : 196 : return true;
1784 : : }
1785 : 0 : next_after_fail574:;
1786 : : }
1787 : : }
1788 : : }
1789 : : }
1790 : : }
1791 : : }
1792 : : }
1793 : : }
1794 : : }
1795 : : }
1796 : : else
1797 : : {
1798 : 4537241 : if (FLOAT_TYPE_P (TREE_TYPE (captures[1]))
1799 : 291948 : && (DECIMAL_FLOAT_TYPE_P (TREE_TYPE (captures[0]))
1800 : 145974 : == DECIMAL_FLOAT_TYPE_P (TREE_TYPE (captures[1])))
1801 : 2633023 : && (DECIMAL_FLOAT_TYPE_P (TREE_TYPE (captures[0]))
1802 : 145710 : == DECIMAL_FLOAT_TYPE_P (TREE_TYPE (captures[3])))
1803 : : )
1804 : : {
1805 : 145710 : {
1806 : 145710 : tree type1 = TREE_TYPE (captures[3]);
1807 : 145710 : if (TREE_CODE (captures[3]) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (type1))
1808 : : {
1809 : 54296 : REAL_VALUE_TYPE orig = TREE_REAL_CST (captures[3]);
1810 : 54296 : if (TYPE_PRECISION (type1) > TYPE_PRECISION (float_type_node)
1811 : 54296 : && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
1812 : 34740 : type1 = float_type_node;
1813 : 54296 : if (TYPE_PRECISION (type1) > TYPE_PRECISION (double_type_node)
1814 : 54296 : && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
1815 : 2 : type1 = double_type_node;
1816 : : }
1817 : 145710 : tree newtype
1818 : 145710 : = (element_precision (TREE_TYPE (captures[1])) > element_precision (type1)
1819 : 145710 : ? TREE_TYPE (captures[1]) : type1);
1820 : 145710 : if (element_precision (TREE_TYPE (captures[0])) > element_precision (newtype)
1821 : 145710 : && (!VECTOR_TYPE_P (type) || is_truth_type_for (newtype, type))
1822 : : )
1823 : : {
1824 : 27175 : gimple_seq *lseq = seq;
1825 : 27175 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail575;
1826 : 27175 : {
1827 : 27175 : res_op->set_op (cmp, type, 2);
1828 : 27175 : {
1829 : 27175 : tree _o1[1], _r1;
1830 : 27175 : _o1[0] = captures[1];
1831 : 27175 : if (newtype != TREE_TYPE (_o1[0])
1832 : 27175 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o1[0])))
1833 : : {
1834 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o1[0]);
1835 : 0 : tem_op.resimplify (lseq, valueize);
1836 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1837 : 0 : if (!_r1) goto next_after_fail575;
1838 : : }
1839 : : else
1840 : : _r1 = _o1[0];
1841 : 27175 : res_op->ops[0] = _r1;
1842 : : }
1843 : 27175 : {
1844 : 27175 : tree _o1[1], _r1;
1845 : 27175 : _o1[0] = captures[3];
1846 : 27175 : if (newtype != TREE_TYPE (_o1[0])
1847 : 27175 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o1[0])))
1848 : : {
1849 : 27175 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o1[0]);
1850 : 27175 : tem_op.resimplify (lseq, valueize);
1851 : 27175 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1852 : 27175 : if (!_r1) goto next_after_fail575;
1853 : : }
1854 : : else
1855 : : _r1 = _o1[0];
1856 : 27175 : res_op->ops[1] = _r1;
1857 : : }
1858 : 27175 : res_op->resimplify (lseq, valueize);
1859 : 27175 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 389, __FILE__, __LINE__, true);
1860 : 27175 : return true;
1861 : : }
1862 : : next_after_fail575:;
1863 : : }
1864 : : }
1865 : : }
1866 : : }
1867 : : return false;
1868 : : }
1869 : :
1870 : : bool
1871 : 5 : gimple_simplify_292 (gimple_match_op *res_op, gimple_seq *seq,
1872 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1873 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1874 : : const enum tree_code ARG_UNUSED (cmp),
1875 : : const enum tree_code ARG_UNUSED (rep),
1876 : : const combined_fn ARG_UNUSED (popcount))
1877 : : {
1878 : 5 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1879 : 5 : gimple_seq *lseq = seq;
1880 : 5 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail630;
1881 : 5 : {
1882 : 5 : res_op->set_op (rep, type, 2);
1883 : 5 : res_op->ops[0] = captures[0];
1884 : 5 : res_op->ops[1] = build_zero_cst (TREE_TYPE (captures[0]));
1885 : 5 : res_op->resimplify (lseq, valueize);
1886 : 5 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 434, __FILE__, __LINE__, true);
1887 : : return true;
1888 : : }
1889 : 0 : next_after_fail630:;
1890 : 0 : return false;
1891 : : }
1892 : :
1893 : : bool
1894 : 107094 : gimple_simplify_295 (gimple_match_op *res_op, gimple_seq *seq,
1895 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1896 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1897 : : const enum tree_code ARG_UNUSED (cmp),
1898 : : const enum tree_code ARG_UNUSED (icmp),
1899 : : const enum tree_code ARG_UNUSED (ncmp))
1900 : : {
1901 : 107094 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1902 : 107094 : if (types_match (type, TREE_TYPE (captures[0]))
1903 : : )
1904 : : {
1905 : 105220 : {
1906 : 105220 : enum tree_code ic = invert_tree_comparison
1907 : 105220 : (cmp, HONOR_NANS (captures[1]));
1908 : 105220 : if (ic == icmp
1909 : : )
1910 : : {
1911 : 86532 : gimple_seq *lseq = seq;
1912 : 86532 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail635;
1913 : 86532 : {
1914 : 86532 : res_op->set_op (icmp, type, 2);
1915 : 86532 : res_op->ops[0] = captures[1];
1916 : 86532 : res_op->ops[1] = captures[2];
1917 : 86532 : res_op->resimplify (lseq, valueize);
1918 : 86532 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 439, __FILE__, __LINE__, true);
1919 : 86532 : return true;
1920 : : }
1921 : 0 : next_after_fail635:;
1922 : : }
1923 : : else
1924 : : {
1925 : 18688 : if (ic == ncmp
1926 : : )
1927 : : {
1928 : 328 : gimple_seq *lseq = seq;
1929 : 328 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail636;
1930 : 328 : {
1931 : 328 : res_op->set_op (ncmp, type, 2);
1932 : 328 : res_op->ops[0] = captures[1];
1933 : 328 : res_op->ops[1] = captures[2];
1934 : 328 : res_op->resimplify (lseq, valueize);
1935 : 328 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 440, __FILE__, __LINE__, true);
1936 : 328 : return true;
1937 : : }
1938 : 0 : next_after_fail636:;
1939 : : }
1940 : : }
1941 : : }
1942 : : }
1943 : : return false;
1944 : : }
1945 : :
1946 : : bool
1947 : 85 : gimple_simplify_303 (gimple_match_op *res_op, gimple_seq *seq,
1948 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1949 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1950 : : {
1951 : 85 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1952 : 170 : if ((TYPE_UNSIGNED (type) || tree_expr_nonnegative_p (captures[0]))
1953 : 0 : && (!VECTOR_TYPE_P (type)
1954 : 0 : || target_supports_op_p (type, RSHIFT_EXPR, optab_vector)
1955 : 0 : || target_supports_op_p (type, RSHIFT_EXPR, optab_scalar))
1956 : 85 : && (useless_type_conversion_p (type, TREE_TYPE (captures[2]))
1957 : 0 : || (element_precision (type) >= element_precision (TREE_TYPE (captures[2]))
1958 : 0 : && (TYPE_UNSIGNED (TREE_TYPE (captures[2]))
1959 : 0 : || (element_precision (type)
1960 : 0 : == element_precision (TREE_TYPE (captures[2])))
1961 : 0 : || (INTEGRAL_TYPE_P (type)
1962 : 0 : && (tree_nonzero_bits (captures[0])
1963 : 85 : & wi::mask (element_precision (TREE_TYPE (captures[2])) - 1,
1964 : : true,
1965 : 85 : element_precision (type))) == 0))))
1966 : : )
1967 : : {
1968 : 0 : if (!VECTOR_TYPE_P (type)
1969 : 0 : && useless_type_conversion_p (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))
1970 : 0 : && element_precision (TREE_TYPE (captures[1])) < element_precision (type)
1971 : : )
1972 : : {
1973 : 0 : gimple_seq *lseq = seq;
1974 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail645;
1975 : 0 : {
1976 : 0 : res_op->set_op (NOP_EXPR, type, 1);
1977 : 0 : {
1978 : 0 : tree _o1[2], _r1;
1979 : 0 : _o1[0] = captures[1];
1980 : 0 : _o1[1] = captures[3];
1981 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1982 : 0 : tem_op.resimplify (lseq, valueize);
1983 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1984 : 0 : if (!_r1) goto next_after_fail645;
1985 : 0 : res_op->ops[0] = _r1;
1986 : : }
1987 : 0 : res_op->resimplify (lseq, valueize);
1988 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 449, __FILE__, __LINE__, true);
1989 : 0 : return true;
1990 : : }
1991 : : next_after_fail645:;
1992 : : }
1993 : : else
1994 : : {
1995 : 0 : gimple_seq *lseq = seq;
1996 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail646;
1997 : 0 : {
1998 : 0 : res_op->set_op (RSHIFT_EXPR, type, 2);
1999 : 0 : res_op->ops[0] = captures[0];
2000 : 0 : res_op->ops[1] = captures[3];
2001 : 0 : res_op->resimplify (lseq, valueize);
2002 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 450, __FILE__, __LINE__, true);
2003 : 0 : return true;
2004 : : }
2005 : 0 : next_after_fail646:;
2006 : : }
2007 : : }
2008 : : return false;
2009 : : }
2010 : :
2011 : : bool
2012 : 23556 : gimple_simplify_319 (gimple_match_op *res_op, gimple_seq *seq,
2013 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2014 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2015 : : const enum tree_code ARG_UNUSED (mod))
2016 : : {
2017 : 23556 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2018 : 23556 : if (!integer_zerop (captures[1])
2019 : : )
2020 : : {
2021 : 23182 : gimple_seq *lseq = seq;
2022 : 23182 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail667;
2023 : 23182 : {
2024 : 23182 : tree tem;
2025 : 23182 : tem = captures[0];
2026 : 23182 : res_op->set_value (tem);
2027 : 23182 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 469, __FILE__, __LINE__, true);
2028 : 23182 : return true;
2029 : : }
2030 : 0 : next_after_fail667:;
2031 : : }
2032 : : return false;
2033 : : }
2034 : :
2035 : : bool
2036 : 629721 : gimple_simplify_325 (gimple_match_op *res_op, gimple_seq *seq,
2037 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2038 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2039 : : const enum tree_code ARG_UNUSED (mod))
2040 : : {
2041 : 629721 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2042 : 987283 : if ((TYPE_UNSIGNED (type) || tree_expr_nonnegative_p (captures[0]))
2043 : 321376 : && INTEGRAL_TYPE_P (type)
2044 : 321376 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
2045 : 321376 : && (TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (captures[1]))
2046 : 108 : || TYPE_UNSIGNED (TREE_TYPE (captures[1]))
2047 : 108 : || !TYPE_UNSIGNED (type))
2048 : 950989 : && integer_pow2p (captures[2]) && tree_int_cst_sgn (captures[2]) > 0
2049 : : )
2050 : : {
2051 : 1763 : {
2052 : 1763 : tree utype = TREE_TYPE (captures[1]);
2053 : 1763 : if (!TYPE_OVERFLOW_WRAPS (utype))
2054 : 357 : utype = unsigned_type_for (utype);
2055 : 1763 : gimple_seq *lseq = seq;
2056 : 1763 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail673;
2057 : 1763 : {
2058 : 1763 : res_op->set_op (BIT_AND_EXPR, type, 2);
2059 : 1763 : res_op->ops[0] = captures[0];
2060 : 1763 : {
2061 : 1763 : tree _o1[1], _r1;
2062 : 1763 : {
2063 : 1763 : tree _o2[2], _r2;
2064 : 1763 : {
2065 : 1763 : tree _o3[1], _r3;
2066 : 1763 : _o3[0] = captures[1];
2067 : 1763 : if (utype != TREE_TYPE (_o3[0])
2068 : 1763 : && !useless_type_conversion_p (utype, TREE_TYPE (_o3[0])))
2069 : : {
2070 : 357 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o3[0]);
2071 : 357 : tem_op.resimplify (lseq, valueize);
2072 : 357 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
2073 : 357 : if (!_r3) goto next_after_fail673;
2074 : : }
2075 : : else
2076 : : _r3 = _o3[0];
2077 : 1763 : _o2[0] = _r3;
2078 : : }
2079 : 1763 : _o2[1] = build_one_cst (utype);
2080 : 1763 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
2081 : 1763 : tem_op.resimplify (lseq, valueize);
2082 : 1763 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2083 : 1763 : if (!_r2) goto next_after_fail673;
2084 : 1763 : _o1[0] = _r2;
2085 : : }
2086 : 1763 : if (type != TREE_TYPE (_o1[0])
2087 : 1763 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
2088 : : {
2089 : 357 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
2090 : 357 : tem_op.resimplify (lseq, valueize);
2091 : 357 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2092 : 357 : if (!_r1) goto next_after_fail673;
2093 : : }
2094 : : else
2095 : : _r1 = _o1[0];
2096 : 1763 : res_op->ops[1] = _r1;
2097 : : }
2098 : 1763 : res_op->resimplify (lseq, valueize);
2099 : 1763 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 475, __FILE__, __LINE__, true);
2100 : 1763 : return true;
2101 : : }
2102 : : next_after_fail673:;
2103 : : }
2104 : : }
2105 : : return false;
2106 : : }
2107 : :
2108 : : bool
2109 : 3084 : gimple_simplify_343 (gimple_match_op *res_op, gimple_seq *seq,
2110 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2111 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2112 : : const enum tree_code ARG_UNUSED (op))
2113 : : {
2114 : 3084 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2115 : 6168 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
2116 : 6168 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1]))
2117 : : )
2118 : : {
2119 : 1036 : gimple_seq *lseq = seq;
2120 : 1036 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail695;
2121 : 1036 : {
2122 : 1036 : res_op->set_op (op, type, 2);
2123 : 1036 : res_op->ops[0] = captures[2];
2124 : 1036 : res_op->ops[1] = captures[1];
2125 : 1036 : res_op->resimplify (lseq, valueize);
2126 : 1036 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 497, __FILE__, __LINE__, true);
2127 : 1036 : return true;
2128 : : }
2129 : 0 : next_after_fail695:;
2130 : : }
2131 : : return false;
2132 : : }
2133 : :
2134 : : bool
2135 : 22466 : gimple_simplify_349 (gimple_match_op *res_op, gimple_seq *seq,
2136 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2137 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2138 : : const enum tree_code ARG_UNUSED (cmp))
2139 : : {
2140 : 22466 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2141 : 22466 : if (wi::gt_p (wi::to_wide (captures[1]), 0, TYPE_SIGN (TREE_TYPE (captures[1])))
2142 : : )
2143 : : {
2144 : 22466 : {
2145 : 22466 : wi::overflow_type ovf;
2146 : 22466 : wide_int prod = wi::mul (wi::to_wide (captures[2]), wi::to_wide (captures[1]),
2147 : 44932 : TYPE_SIGN (TREE_TYPE (captures[1])), &ovf);
2148 : 22466 : if (ovf
2149 : : )
2150 : : {
2151 : 0 : gimple_seq *lseq = seq;
2152 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail702;
2153 : 0 : {
2154 : 0 : tree tem;
2155 : 0 : tem = constant_boolean_node (wi::lt_p (wi::to_wide (captures[2]), 0,
2156 : 0 : TYPE_SIGN (TREE_TYPE (captures[2])))
2157 : 0 : != (cmp == LT_EXPR || cmp == LE_EXPR), type);
2158 : 0 : res_op->set_value (tem);
2159 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 504, __FILE__, __LINE__, true);
2160 : 0 : return true;
2161 : : }
2162 : 0 : next_after_fail702:;
2163 : : }
2164 : : else
2165 : : {
2166 : 22466 : gimple_seq *lseq = seq;
2167 : 22466 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail703;
2168 : 22466 : {
2169 : 22466 : res_op->set_op (cmp, type, 2);
2170 : 22466 : res_op->ops[0] = captures[0];
2171 : 22466 : res_op->ops[1] = wide_int_to_tree (TREE_TYPE (captures[0]), prod);
2172 : 22466 : res_op->resimplify (lseq, valueize);
2173 : 22466 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 505, __FILE__, __LINE__, true);
2174 : 22466 : return true;
2175 : : }
2176 : 0 : next_after_fail703:;
2177 : : }
2178 : 22466 : }
2179 : : }
2180 : : return false;
2181 : : }
2182 : :
2183 : : bool
2184 : 4768 : gimple_simplify_359 (gimple_match_op *res_op, gimple_seq *seq,
2185 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2186 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2187 : : const enum tree_code ARG_UNUSED (cmp),
2188 : : const enum tree_code ARG_UNUSED (neg_cmp))
2189 : : {
2190 : 4768 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2191 : 4768 : if (flag_unsafe_math_optimizations
2192 : : )
2193 : : {
2194 : 43 : {
2195 : 43 : tree tem = const_binop (RDIV_EXPR, type, captures[2], captures[1]);
2196 : 43 : if (tem
2197 : 129 : && !(REAL_VALUE_ISINF (TREE_REAL_CST (tem))
2198 : 59 : || (real_zerop (tem) && !real_zerop (captures[1])))
2199 : : )
2200 : : {
2201 : 27 : if (real_less (&dconst0, TREE_REAL_CST_PTR (captures[1]))
2202 : : )
2203 : : {
2204 : 27 : gimple_seq *lseq = seq;
2205 : 27 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail744;
2206 : 27 : {
2207 : 27 : res_op->set_op (cmp, type, 2);
2208 : 27 : res_op->ops[0] = captures[0];
2209 : 27 : res_op->ops[1] = tem;
2210 : 27 : res_op->resimplify (lseq, valueize);
2211 : 27 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 529, __FILE__, __LINE__, true);
2212 : 27 : return true;
2213 : : }
2214 : 0 : next_after_fail744:;
2215 : : }
2216 : : else
2217 : : {
2218 : 0 : if (real_less (TREE_REAL_CST_PTR (captures[1]), &dconst0)
2219 : : )
2220 : : {
2221 : 0 : gimple_seq *lseq = seq;
2222 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail745;
2223 : 0 : {
2224 : 0 : res_op->set_op (neg_cmp, type, 2);
2225 : 0 : res_op->ops[0] = captures[0];
2226 : 0 : res_op->ops[1] = tem;
2227 : 0 : res_op->resimplify (lseq, valueize);
2228 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 530, __FILE__, __LINE__, true);
2229 : 0 : return true;
2230 : : }
2231 : 0 : next_after_fail745:;
2232 : : }
2233 : : }
2234 : : }
2235 : : }
2236 : : }
2237 : : return false;
2238 : : }
2239 : :
2240 : : bool
2241 : 25428927 : gimple_simplify_364 (gimple_match_op *res_op, gimple_seq *seq,
2242 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2243 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2244 : : const enum tree_code ARG_UNUSED (cmp),
2245 : : const enum tree_code ARG_UNUSED (acmp))
2246 : : {
2247 : 25428927 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2248 : 25428927 : {
2249 : 25428927 : tree cst = uniform_integer_cst_p (captures[1]);
2250 : 25428927 : if (tree_int_cst_sgn (cst) == -1
2251 : : )
2252 : : {
2253 : 23996 : gimple_seq *lseq = seq;
2254 : 23996 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail755;
2255 : 23996 : {
2256 : 23996 : res_op->set_op (acmp, type, 2);
2257 : 23996 : res_op->ops[0] = captures[0];
2258 : 23996 : res_op->ops[1] = build_uniform_cst (TREE_TYPE (captures[1]),
2259 : 23996 : wide_int_to_tree (TREE_TYPE (cst),
2260 : 23996 : wi::to_wide (cst)
2261 : 47992 : + 1));
2262 : 23996 : res_op->resimplify (lseq, valueize);
2263 : 23996 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 540, __FILE__, __LINE__, true);
2264 : 23996 : return true;
2265 : : }
2266 : 0 : next_after_fail755:;
2267 : : }
2268 : : }
2269 : : return false;
2270 : : }
2271 : :
2272 : : bool
2273 : 44 : gimple_simplify_370 (gimple_match_op *res_op, gimple_seq *seq,
2274 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2275 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2276 : : const enum tree_code ARG_UNUSED (cmp),
2277 : : const enum tree_code ARG_UNUSED (cmp2),
2278 : : const enum tree_code ARG_UNUSED (cmp3),
2279 : : const enum tree_code ARG_UNUSED (bit_op),
2280 : : const combined_fn ARG_UNUSED (ffs))
2281 : : {
2282 : 44 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2283 : 44 : {
2284 : 44 : int prec = TYPE_PRECISION (TREE_TYPE (captures[1]));
2285 : 44 : if (integer_zerop (captures[2])
2286 : : )
2287 : : {
2288 : 0 : gimple_seq *lseq = seq;
2289 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail761;
2290 : 0 : {
2291 : 0 : res_op->set_op (cmp2, type, 2);
2292 : 0 : res_op->ops[0] = captures[1];
2293 : 0 : res_op->ops[1] = build_zero_cst (TREE_TYPE (captures[1]));
2294 : 0 : res_op->resimplify (lseq, valueize);
2295 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 542, __FILE__, __LINE__, true);
2296 : 16 : return true;
2297 : : }
2298 : 0 : next_after_fail761:;
2299 : : }
2300 : : else
2301 : : {
2302 : 44 : if (tree_int_cst_sgn (captures[2]) < 0
2303 : : )
2304 : : {
2305 : 0 : gimple_seq *lseq = seq;
2306 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail762;
2307 : 0 : {
2308 : 0 : tree tem;
2309 : 0 : tem = constant_boolean_node (cmp == GT_EXPR ? true : false, type);
2310 : 0 : res_op->set_value (tem);
2311 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 543, __FILE__, __LINE__, true);
2312 : 0 : return true;
2313 : : }
2314 : 0 : next_after_fail762:;
2315 : : }
2316 : : else
2317 : : {
2318 : 44 : if (wi::to_widest (captures[2]) >= prec
2319 : : )
2320 : : {
2321 : 0 : gimple_seq *lseq = seq;
2322 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail763;
2323 : 0 : {
2324 : 0 : tree tem;
2325 : 0 : tem = constant_boolean_node (cmp == GT_EXPR ? false : true, type);
2326 : 0 : res_op->set_value (tem);
2327 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 544, __FILE__, __LINE__, true);
2328 : 0 : return true;
2329 : : }
2330 : 0 : next_after_fail763:;
2331 : : }
2332 : : else
2333 : : {
2334 : 44 : if (wi::to_widest (captures[2]) == prec - 1
2335 : : )
2336 : : {
2337 : 0 : gimple_seq *lseq = seq;
2338 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail764;
2339 : 0 : {
2340 : 0 : res_op->set_op (cmp3, type, 2);
2341 : 0 : res_op->ops[0] = captures[1];
2342 : 0 : res_op->ops[1] = wide_int_to_tree (TREE_TYPE (captures[1]),
2343 : 0 : wi::shifted_mask (prec - 1, 1,
2344 : : false, prec));
2345 : 0 : res_op->resimplify (lseq, valueize);
2346 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 545, __FILE__, __LINE__, true);
2347 : 0 : return true;
2348 : : }
2349 : 0 : next_after_fail764:;
2350 : : }
2351 : : else
2352 : : {
2353 : 44 : if (single_use (captures[0])
2354 : : )
2355 : : {
2356 : 44 : gimple_seq *lseq = seq;
2357 : 44 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail765;
2358 : 44 : {
2359 : 44 : res_op->set_op (bit_op, type, 2);
2360 : 44 : {
2361 : 44 : tree _o1[2], _r1;
2362 : 44 : _o1[0] = captures[1];
2363 : 44 : _o1[1] = build_zero_cst (TREE_TYPE (captures[1]));
2364 : 44 : gimple_match_op tem_op (res_op->cond.any_else (), cmp2, type, _o1[0], _o1[1]);
2365 : 44 : tem_op.resimplify (lseq, valueize);
2366 : 44 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2367 : 44 : if (!_r1) goto next_after_fail765;
2368 : 16 : res_op->ops[0] = _r1;
2369 : : }
2370 : 16 : {
2371 : 16 : tree _o1[2], _r1;
2372 : 16 : {
2373 : 16 : tree _o2[2], _r2;
2374 : 16 : _o2[0] = captures[1];
2375 : 16 : _o2[1] = wide_int_to_tree (TREE_TYPE (captures[1]),
2376 : 16 : wi::mask (tree_to_uhwi (captures[2]),
2377 : : false, prec));
2378 : 16 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
2379 : 16 : tem_op.resimplify (lseq, valueize);
2380 : 16 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2381 : 16 : if (!_r2) goto next_after_fail765;
2382 : 16 : _o1[0] = _r2;
2383 : : }
2384 : 16 : _o1[1] = build_zero_cst (TREE_TYPE (captures[1]));
2385 : 16 : gimple_match_op tem_op (res_op->cond.any_else (), cmp3, type, _o1[0], _o1[1]);
2386 : 16 : tem_op.resimplify (lseq, valueize);
2387 : 16 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2388 : 16 : if (!_r1) goto next_after_fail765;
2389 : 16 : res_op->ops[1] = _r1;
2390 : : }
2391 : 16 : res_op->resimplify (lseq, valueize);
2392 : 16 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 546, __FILE__, __LINE__, true);
2393 : 16 : return true;
2394 : : }
2395 : 28 : next_after_fail765:;
2396 : : }
2397 : : }
2398 : : }
2399 : : }
2400 : : }
2401 : : }
2402 : 28 : return false;
2403 : : }
2404 : :
2405 : : bool
2406 : 64794 : gimple_simplify_388 (gimple_match_op *res_op, gimple_seq *seq,
2407 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2408 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2409 : : const enum tree_code ARG_UNUSED (minmax))
2410 : : {
2411 : 64794 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2412 : 64794 : if (INTEGRAL_TYPE_P (type)
2413 : 64592 : && types_match (captures[1], type) && int_fits_type_p (captures[2], type)
2414 : 8436 : && TYPE_SIGN (TREE_TYPE (captures[0])) == TYPE_SIGN (type)
2415 : 67443 : && TYPE_PRECISION (TREE_TYPE (captures[0])) > TYPE_PRECISION (type)
2416 : : )
2417 : : {
2418 : 1509 : gimple_seq *lseq = seq;
2419 : 1509 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail792;
2420 : 1509 : {
2421 : 1509 : res_op->set_op (minmax, type, 2);
2422 : 1509 : res_op->ops[0] = captures[1];
2423 : 1509 : {
2424 : 1509 : tree _o1[1], _r1;
2425 : 1509 : _o1[0] = captures[2];
2426 : 1509 : if (type != TREE_TYPE (_o1[0])
2427 : 1509 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
2428 : : {
2429 : 1509 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
2430 : 1509 : tem_op.resimplify (lseq, valueize);
2431 : 1509 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2432 : 1509 : if (!_r1) goto next_after_fail792;
2433 : : }
2434 : : else
2435 : : _r1 = _o1[0];
2436 : 1509 : res_op->ops[1] = _r1;
2437 : : }
2438 : 1509 : res_op->resimplify (lseq, valueize);
2439 : 1509 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 571, __FILE__, __LINE__, true);
2440 : 1509 : return true;
2441 : : }
2442 : : next_after_fail792:;
2443 : : }
2444 : : return false;
2445 : : }
2446 : :
2447 : : bool
2448 : 829 : gimple_simplify_392 (gimple_match_op *res_op, gimple_seq *seq,
2449 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2450 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2451 : : const enum tree_code ARG_UNUSED (maxmin))
2452 : : {
2453 : 829 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2454 : 829 : if (optimize
2455 : 829 : && FLOAT_TYPE_P (type)
2456 : 48 : && FLOAT_TYPE_P (TREE_TYPE (captures[0]))
2457 : 48 : && types_match (type, TREE_TYPE (captures[1]))
2458 : 48 : && types_match (type, TREE_TYPE (captures[2]))
2459 : 877 : && element_precision (type) < element_precision (TREE_TYPE (captures[0]))
2460 : : )
2461 : : {
2462 : 48 : gimple_seq *lseq = seq;
2463 : 48 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail796;
2464 : 48 : {
2465 : 48 : res_op->set_op (maxmin, type, 2);
2466 : 48 : res_op->ops[0] = captures[1];
2467 : 48 : res_op->ops[1] = captures[2];
2468 : 48 : res_op->resimplify (lseq, valueize);
2469 : 48 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 575, __FILE__, __LINE__, true);
2470 : 48 : return true;
2471 : : }
2472 : 0 : next_after_fail796:;
2473 : : }
2474 : : return false;
2475 : : }
2476 : :
2477 : : bool
2478 : 5956128 : gimple_simplify_396 (gimple_match_op *res_op, gimple_seq *seq,
2479 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2480 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2481 : : const enum tree_code ARG_UNUSED (op))
2482 : : {
2483 : 5956128 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2484 : 5956128 : if (INTEGRAL_TYPE_P (type)
2485 : 5194098 : && op != MULT_EXPR
2486 : 5194098 : && op != RDIV_EXPR
2487 : 3700112 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
2488 : 3700112 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
2489 : 3700112 : && type_has_mode_precision_p (TREE_TYPE (captures[2]))
2490 : 3695550 : && type_has_mode_precision_p (TREE_TYPE (captures[4]))
2491 : 3695550 : && type_has_mode_precision_p (type)
2492 : 3646542 : && TYPE_PRECISION (TREE_TYPE (captures[1])) > TYPE_PRECISION (TREE_TYPE (captures[2]))
2493 : 0 : && types_match (captures[2], type)
2494 : 5956128 : && (types_match (captures[2], captures[4])
2495 : 0 : || poly_int_tree_p (captures[3]))
2496 : : )
2497 : : {
2498 : 0 : if (TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[2]))
2499 : : )
2500 : : {
2501 : 0 : gimple_seq *lseq = seq;
2502 : 0 : if (lseq
2503 : 0 : && (!single_use (captures[0])))
2504 : 0 : lseq = NULL;
2505 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail809;
2506 : 0 : {
2507 : 0 : res_op->set_op (op, type, 2);
2508 : 0 : res_op->ops[0] = captures[2];
2509 : 0 : {
2510 : 0 : tree _o1[1], _r1;
2511 : 0 : _o1[0] = captures[4];
2512 : 0 : if (type != TREE_TYPE (_o1[0])
2513 : 0 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
2514 : : {
2515 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
2516 : 0 : tem_op.resimplify (lseq, valueize);
2517 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2518 : 0 : if (!_r1) goto next_after_fail809;
2519 : : }
2520 : : else
2521 : : _r1 = _o1[0];
2522 : 0 : res_op->ops[1] = _r1;
2523 : : }
2524 : 0 : res_op->resimplify (lseq, valueize);
2525 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 576, __FILE__, __LINE__, true);
2526 : 0 : return true;
2527 : : }
2528 : : next_after_fail809:;
2529 : : }
2530 : : else
2531 : : {
2532 : 0 : {
2533 : 0 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
2534 : 0 : gimple_seq *lseq = seq;
2535 : 0 : if (lseq
2536 : 0 : && (!single_use (captures[0])))
2537 : 0 : lseq = NULL;
2538 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail810;
2539 : 0 : {
2540 : 0 : res_op->set_op (NOP_EXPR, type, 1);
2541 : 0 : {
2542 : 0 : tree _o1[2], _r1;
2543 : 0 : {
2544 : 0 : tree _o2[1], _r2;
2545 : 0 : _o2[0] = captures[2];
2546 : 0 : if (utype != TREE_TYPE (_o2[0])
2547 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
2548 : : {
2549 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
2550 : 0 : tem_op.resimplify (lseq, valueize);
2551 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2552 : 0 : if (!_r2) goto next_after_fail810;
2553 : : }
2554 : : else
2555 : : _r2 = _o2[0];
2556 : 0 : _o1[0] = _r2;
2557 : : }
2558 : 0 : {
2559 : 0 : tree _o2[1], _r2;
2560 : 0 : _o2[0] = captures[4];
2561 : 0 : if (utype != TREE_TYPE (_o2[0])
2562 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
2563 : : {
2564 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
2565 : 0 : tem_op.resimplify (lseq, valueize);
2566 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2567 : 0 : if (!_r2) goto next_after_fail810;
2568 : : }
2569 : : else
2570 : : _r2 = _o2[0];
2571 : 0 : _o1[1] = _r2;
2572 : : }
2573 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2574 : 0 : tem_op.resimplify (lseq, valueize);
2575 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2576 : 0 : if (!_r1) goto next_after_fail810;
2577 : 0 : res_op->ops[0] = _r1;
2578 : : }
2579 : 0 : res_op->resimplify (lseq, valueize);
2580 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 577, __FILE__, __LINE__, true);
2581 : 0 : return true;
2582 : : }
2583 : : next_after_fail810:;
2584 : : }
2585 : : }
2586 : : }
2587 : : else
2588 : : {
2589 : 5761354 : if (FLOAT_TYPE_P (type)
2590 : 6150932 : && DECIMAL_FLOAT_TYPE_P (TREE_TYPE (captures[0]))
2591 : 194789 : == DECIMAL_FLOAT_TYPE_P (type)
2592 : : )
2593 : : {
2594 : 194573 : {
2595 : 194573 : tree arg0 = strip_float_extensions (captures[2]);
2596 : 194573 : tree arg1 = strip_float_extensions (captures[4]);
2597 : 194573 : tree itype = TREE_TYPE (captures[0]);
2598 : 194573 : tree ty1 = TREE_TYPE (arg0);
2599 : 194573 : tree ty2 = TREE_TYPE (arg1);
2600 : 194573 : enum tree_code code = TREE_CODE (itype);
2601 : 15 : if (FLOAT_TYPE_P (ty1)
2602 : 194588 : && FLOAT_TYPE_P (ty2)
2603 : : )
2604 : : {
2605 : 194573 : {
2606 : 194573 : tree newtype = type;
2607 : 194573 : if (TYPE_MODE (ty1) == SDmode
2608 : 194109 : || TYPE_MODE (ty2) == SDmode
2609 : 388682 : || TYPE_MODE (type) == SDmode)
2610 : 955 : newtype = dfloat32_type_node;
2611 : 194573 : if (TYPE_MODE (ty1) == DDmode
2612 : 194320 : || TYPE_MODE (ty2) == DDmode
2613 : 388893 : || TYPE_MODE (type) == DDmode)
2614 : 724 : newtype = dfloat64_type_node;
2615 : 194573 : if (TYPE_MODE (ty1) == TDmode
2616 : 194097 : || TYPE_MODE (ty2) == TDmode
2617 : 388670 : || TYPE_MODE (type) == TDmode)
2618 : 707 : newtype = dfloat128_type_node;
2619 : 194573 : if ((newtype == dfloat32_type_node
2620 : 194573 : || newtype == dfloat64_type_node
2621 : 194087 : || newtype == dfloat128_type_node)
2622 : 1193 : && newtype == type
2623 : 195037 : && types_match (newtype, type)
2624 : : )
2625 : : {
2626 : 464 : gimple_seq *lseq = seq;
2627 : 464 : if (lseq
2628 : 221 : && (!single_use (captures[0])))
2629 : 397 : lseq = NULL;
2630 : 464 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail811;
2631 : 464 : {
2632 : 464 : res_op->set_op (op, type, 2);
2633 : 464 : {
2634 : 464 : tree _o1[1], _r1;
2635 : 464 : _o1[0] = captures[2];
2636 : 464 : if (newtype != TREE_TYPE (_o1[0])
2637 : 464 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o1[0])))
2638 : : {
2639 : 464 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o1[0]);
2640 : 464 : tem_op.resimplify (lseq, valueize);
2641 : 464 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2642 : 464 : if (!_r1) goto next_after_fail811;
2643 : : }
2644 : : else
2645 : : _r1 = _o1[0];
2646 : 67 : res_op->ops[0] = _r1;
2647 : : }
2648 : 67 : {
2649 : 67 : tree _o1[1], _r1;
2650 : 67 : _o1[0] = captures[4];
2651 : 67 : if (newtype != TREE_TYPE (_o1[0])
2652 : 67 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o1[0])))
2653 : : {
2654 : 67 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o1[0]);
2655 : 67 : tem_op.resimplify (lseq, valueize);
2656 : 67 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2657 : 67 : if (!_r1) goto next_after_fail811;
2658 : : }
2659 : : else
2660 : : _r1 = _o1[0];
2661 : 67 : res_op->ops[1] = _r1;
2662 : : }
2663 : 67 : res_op->resimplify (lseq, valueize);
2664 : 67 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 578, __FILE__, __LINE__, true);
2665 : 67 : return true;
2666 : : }
2667 : : next_after_fail811:;
2668 : : }
2669 : : else
2670 : : {
2671 : 194109 : {
2672 : 194109 : if (element_precision (ty1) > element_precision (newtype))
2673 : 151650 : newtype = ty1;
2674 : 194109 : if (element_precision (ty2) > element_precision (newtype))
2675 : 5486 : newtype = ty2;
2676 : 194109 : if (element_precision (newtype) < element_precision (itype)
2677 : 141 : && (!VECTOR_MODE_P (TYPE_MODE (newtype))
2678 : 0 : || target_supports_op_p (newtype, op, optab_default))
2679 : 141 : && (flag_unsafe_math_optimizations
2680 : 141 : || (element_precision (newtype) == element_precision (type)
2681 : 89 : && real_can_shorten_arithmetic (element_mode (itype),
2682 : : element_mode (type))
2683 : 0 : && !excess_precision_type (newtype)))
2684 : 194109 : && !types_match (itype, newtype)
2685 : : )
2686 : : {
2687 : 0 : gimple_seq *lseq = seq;
2688 : 0 : if (lseq
2689 : 0 : && (!single_use (captures[0])))
2690 : 0 : lseq = NULL;
2691 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail812;
2692 : 0 : {
2693 : 0 : res_op->set_op (NOP_EXPR, type, 1);
2694 : 0 : {
2695 : 0 : tree _o1[2], _r1;
2696 : 0 : {
2697 : 0 : tree _o2[1], _r2;
2698 : 0 : _o2[0] = captures[2];
2699 : 0 : if (newtype != TREE_TYPE (_o2[0])
2700 : 0 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o2[0])))
2701 : : {
2702 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o2[0]);
2703 : 0 : tem_op.resimplify (lseq, valueize);
2704 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2705 : 0 : if (!_r2) goto next_after_fail812;
2706 : : }
2707 : : else
2708 : : _r2 = _o2[0];
2709 : 0 : _o1[0] = _r2;
2710 : : }
2711 : 0 : {
2712 : 0 : tree _o2[1], _r2;
2713 : 0 : _o2[0] = captures[4];
2714 : 0 : if (newtype != TREE_TYPE (_o2[0])
2715 : 0 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o2[0])))
2716 : : {
2717 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o2[0]);
2718 : 0 : tem_op.resimplify (lseq, valueize);
2719 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2720 : 0 : if (!_r2) goto next_after_fail812;
2721 : : }
2722 : : else
2723 : : _r2 = _o2[0];
2724 : 0 : _o1[1] = _r2;
2725 : : }
2726 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2727 : 0 : tem_op.resimplify (lseq, valueize);
2728 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2729 : 0 : if (!_r1) goto next_after_fail812;
2730 : 0 : res_op->ops[0] = _r1;
2731 : : }
2732 : 0 : res_op->resimplify (lseq, valueize);
2733 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 579, __FILE__, __LINE__, true);
2734 : 0 : return true;
2735 : : }
2736 : : next_after_fail812:;
2737 : : }
2738 : : }
2739 : : }
2740 : : }
2741 : : }
2742 : : }
2743 : : }
2744 : : }
2745 : : return false;
2746 : : }
2747 : :
2748 : : bool
2749 : 0 : gimple_simplify_433 (gimple_match_op *res_op, gimple_seq *seq,
2750 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2751 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2752 : : {
2753 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2754 : 0 : gimple_seq *lseq = seq;
2755 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail851;
2756 : 0 : {
2757 : 0 : tree tem;
2758 : 0 : tem = build_zero_cst (type);
2759 : 0 : res_op->set_value (tem);
2760 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 617, __FILE__, __LINE__, true);
2761 : : return true;
2762 : : }
2763 : 0 : next_after_fail851:;
2764 : 0 : return false;
2765 : : }
2766 : :
2767 : : bool
2768 : 5295434 : gimple_simplify_436 (gimple_match_op *res_op, gimple_seq *seq,
2769 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2770 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2771 : : {
2772 : 5295434 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2773 : 10525268 : if (POINTER_TYPE_P (TREE_TYPE (captures[0]))
2774 : 5295508 : && tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
2775 : : )
2776 : : {
2777 : 65674 : {
2778 : 65674 : unsigned int align;
2779 : 65674 : unsigned HOST_WIDE_INT bitpos;
2780 : 65674 : get_pointer_alignment_1 (captures[0], &align, &bitpos);
2781 : 65674 : if (wi::ltu_p (wi::to_wide (captures[1]), align / BITS_PER_UNIT)
2782 : : )
2783 : : {
2784 : 837 : gimple_seq *lseq = seq;
2785 : 837 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail854;
2786 : 837 : {
2787 : 837 : tree tem;
2788 : 1674 : tem = wide_int_to_tree (type, (wi::to_wide (captures[1])
2789 : 1674 : & (bitpos / BITS_PER_UNIT)));
2790 : 837 : res_op->set_value (tem);
2791 : 837 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 619, __FILE__, __LINE__, true);
2792 : 837 : return true;
2793 : : }
2794 : 0 : next_after_fail854:;
2795 : : }
2796 : : }
2797 : : }
2798 : : return false;
2799 : : }
2800 : :
2801 : : bool
2802 : 673009 : gimple_simplify_445 (gimple_match_op *res_op, gimple_seq *seq,
2803 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2804 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2805 : : const enum tree_code ARG_UNUSED (code2),
2806 : : const enum tree_code ARG_UNUSED (code1))
2807 : : {
2808 : 673009 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2809 : 673009 : if ((TREE_CODE (captures[2]) == INTEGER_CST
2810 : 504962 : && TREE_CODE (captures[4]) == INTEGER_CST)
2811 : 1161039 : || ((INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
2812 : 26499 : || POINTER_TYPE_P (TREE_TYPE (captures[2])))
2813 : 632924 : && operand_equal_p (captures[2], captures[4]))
2814 : : )
2815 : : {
2816 : 17155 : {
2817 : 17155 : int cmp = 0;
2818 : 17155 : if (TREE_CODE (captures[2]) == INTEGER_CST
2819 : 16932 : && TREE_CODE (captures[4]) == INTEGER_CST)
2820 : 16932 : cmp = tree_int_cst_compare (captures[2], captures[4]);
2821 : 17155 : if ((code1 == LT_EXPR || code1 == LE_EXPR)
2822 : 6947 : && (code2 == LT_EXPR || code2 == LE_EXPR)
2823 : : )
2824 : : {
2825 : 51 : if ((cmp < 0) || (cmp == 0 && code1 == LT_EXPR)
2826 : : )
2827 : : {
2828 : 21 : gimple_seq *lseq = seq;
2829 : 21 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail882;
2830 : 21 : {
2831 : 21 : tree tem;
2832 : 21 : tem = captures[0];
2833 : 21 : res_op->set_value (tem);
2834 : 21 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 637, __FILE__, __LINE__, true);
2835 : 21 : return true;
2836 : : }
2837 : 0 : next_after_fail882:;
2838 : 0 : }
2839 : : else
2840 : : {
2841 : 30 : gimple_seq *lseq = seq;
2842 : 30 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail883;
2843 : 30 : {
2844 : 30 : tree tem;
2845 : 30 : tem = captures[3];
2846 : 30 : res_op->set_value (tem);
2847 : 30 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 638, __FILE__, __LINE__, true);
2848 : 30 : return true;
2849 : : }
2850 : 0 : next_after_fail883:;
2851 : : }
2852 : : }
2853 : : else
2854 : : {
2855 : 17104 : if ((code1 == GT_EXPR || code1 == GE_EXPR)
2856 : 10208 : && (code2 == GT_EXPR || code2 == GE_EXPR)
2857 : : )
2858 : : {
2859 : 145 : if ((cmp > 0) || (cmp == 0 && code1 == GT_EXPR)
2860 : : )
2861 : : {
2862 : 87 : gimple_seq *lseq = seq;
2863 : 87 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail884;
2864 : 87 : {
2865 : 87 : tree tem;
2866 : 87 : tem = captures[0];
2867 : 87 : res_op->set_value (tem);
2868 : 87 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 639, __FILE__, __LINE__, true);
2869 : 87 : return true;
2870 : : }
2871 : 0 : next_after_fail884:;
2872 : 0 : }
2873 : : else
2874 : : {
2875 : 58 : gimple_seq *lseq = seq;
2876 : 58 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail885;
2877 : 58 : {
2878 : 58 : tree tem;
2879 : 58 : tem = captures[3];
2880 : 58 : res_op->set_value (tem);
2881 : 58 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 640, __FILE__, __LINE__, true);
2882 : 58 : return true;
2883 : : }
2884 : 0 : next_after_fail885:;
2885 : : }
2886 : : }
2887 : : else
2888 : : {
2889 : 16959 : if (cmp == 0
2890 : 312 : && ((code1 == LE_EXPR && code2 == GE_EXPR)
2891 : 258 : || (code1 == GE_EXPR && code2 == LE_EXPR))
2892 : : )
2893 : : {
2894 : 104 : gimple_seq *lseq = seq;
2895 : 104 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail886;
2896 : 104 : {
2897 : 104 : res_op->set_op (EQ_EXPR, type, 2);
2898 : 104 : res_op->ops[0] = captures[1];
2899 : 104 : res_op->ops[1] = captures[2];
2900 : 104 : res_op->resimplify (lseq, valueize);
2901 : 104 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 641, __FILE__, __LINE__, true);
2902 : 104 : return true;
2903 : : }
2904 : 0 : next_after_fail886:;
2905 : 0 : }
2906 : : else
2907 : : {
2908 : 16855 : if (cmp <= 0
2909 : 10161 : && (code1 == LT_EXPR || code1 == LE_EXPR)
2910 : 151 : && (code2 == GT_EXPR || code2 == GE_EXPR)
2911 : : )
2912 : : {
2913 : 151 : gimple_seq *lseq = seq;
2914 : 151 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail887;
2915 : 151 : {
2916 : 151 : tree tem;
2917 : 151 : tem = constant_boolean_node (false, type);
2918 : 151 : res_op->set_value (tem);
2919 : 151 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 642, __FILE__, __LINE__, true);
2920 : 151 : return true;
2921 : : }
2922 : 0 : next_after_fail887:;
2923 : 0 : }
2924 : : else
2925 : : {
2926 : 10010 : if (cmp >= 0
2927 : 6751 : && (code1 == GT_EXPR || code1 == GE_EXPR)
2928 : 60 : && (code2 == LT_EXPR || code2 == LE_EXPR)
2929 : : )
2930 : : {
2931 : 60 : gimple_seq *lseq = seq;
2932 : 60 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail888;
2933 : 60 : {
2934 : 60 : tree tem;
2935 : 60 : tem = constant_boolean_node (false, type);
2936 : 60 : res_op->set_value (tem);
2937 : 60 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 643, __FILE__, __LINE__, true);
2938 : 60 : return true;
2939 : : }
2940 : 0 : next_after_fail888:;
2941 : : }
2942 : : }
2943 : : }
2944 : : }
2945 : : }
2946 : : }
2947 : : }
2948 : : return false;
2949 : : }
2950 : :
2951 : : bool
2952 : 1916 : gimple_simplify_456 (gimple_match_op *res_op, gimple_seq *seq,
2953 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2954 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2955 : : {
2956 : 1916 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2957 : 1916 : if (TYPE_UNSIGNED (TREE_TYPE (captures[0]))
2958 : 1916 : && bitwise_equal_p (captures[0], captures[2])
2959 : : )
2960 : : {
2961 : 7 : gimple_seq *lseq = seq;
2962 : 7 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail913;
2963 : 7 : {
2964 : 7 : res_op->set_op (NOP_EXPR, type, 1);
2965 : 7 : {
2966 : 7 : tree _o1[2], _r1;
2967 : 7 : _o1[0] = captures[0];
2968 : 7 : _o1[1] = captures[1];
2969 : 7 : gimple_match_op tem_op (res_op->cond.any_else (), EQ_EXPR, boolean_type_node, _o1[0], _o1[1]);
2970 : 7 : tem_op.resimplify (lseq, valueize);
2971 : 7 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2972 : 7 : if (!_r1) goto next_after_fail913;
2973 : 3 : res_op->ops[0] = _r1;
2974 : : }
2975 : 3 : res_op->resimplify (lseq, valueize);
2976 : 3 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 647, __FILE__, __LINE__, true);
2977 : 3 : return true;
2978 : : }
2979 : : next_after_fail913:;
2980 : : }
2981 : : return false;
2982 : : }
2983 : :
2984 : : bool
2985 : 0 : gimple_simplify_461 (gimple_match_op *res_op, gimple_seq *seq,
2986 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2987 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2988 : : {
2989 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2990 : 0 : gimple_seq *lseq = seq;
2991 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail924;
2992 : 0 : {
2993 : 0 : tree tem;
2994 : 0 : tem = captures[1];
2995 : 0 : res_op->set_value (tem);
2996 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 650, __FILE__, __LINE__, true);
2997 : : return true;
2998 : : }
2999 : 0 : next_after_fail924:;
3000 : 0 : return false;
3001 : : }
3002 : :
3003 : : bool
3004 : 8347 : gimple_simplify_463 (gimple_match_op *res_op, gimple_seq *seq,
3005 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3006 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3007 : : const enum tree_code ARG_UNUSED (op))
3008 : : {
3009 : 8347 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3010 : 16694 : if (INTEGRAL_TYPE_P (type)
3011 : 8347 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
3012 : 8137 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
3013 : 8137 : && type_has_mode_precision_p (TREE_TYPE (captures[2]))
3014 : 8050 : && type_has_mode_precision_p (TREE_TYPE (captures[4]))
3015 : 8034 : && type_has_mode_precision_p (type)
3016 : 8034 : && TYPE_PRECISION (TREE_TYPE (captures[1])) > TYPE_PRECISION (TREE_TYPE (captures[2]))
3017 : 3080 : && types_match (captures[2], captures[4])
3018 : 1505 : && (tree_int_cst_min_precision (captures[5], TYPE_SIGN (TREE_TYPE (captures[2])))
3019 : 1505 : <= TYPE_PRECISION (TREE_TYPE (captures[2])))
3020 : 8965 : && (wi::to_wide (captures[5])
3021 : 10201 : & wi::mask (TYPE_PRECISION (TREE_TYPE (captures[2])),
3022 : 9583 : true, TYPE_PRECISION (type))) == 0
3023 : : )
3024 : : {
3025 : 462 : if (TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[2]))
3026 : : )
3027 : : {
3028 : 428 : {
3029 : 428 : tree ntype = TREE_TYPE (captures[2]);
3030 : 428 : gimple_seq *lseq = seq;
3031 : 428 : if (lseq
3032 : 15 : && (!single_use (captures[0])))
3033 : 416 : lseq = NULL;
3034 : 428 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail926;
3035 : 428 : {
3036 : 428 : res_op->set_op (NOP_EXPR, type, 1);
3037 : 428 : {
3038 : 428 : tree _o1[2], _r1;
3039 : 428 : {
3040 : 428 : tree _o2[2], _r2;
3041 : 428 : _o2[0] = captures[2];
3042 : 428 : _o2[1] = captures[4];
3043 : 428 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
3044 : 428 : tem_op.resimplify (lseq, valueize);
3045 : 428 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
3046 : 428 : if (!_r2) goto next_after_fail926;
3047 : 364 : _o1[0] = _r2;
3048 : : }
3049 : 364 : {
3050 : 364 : tree _o2[1], _r2;
3051 : 364 : _o2[0] = captures[5];
3052 : 364 : if (ntype != TREE_TYPE (_o2[0])
3053 : 364 : && !useless_type_conversion_p (ntype, TREE_TYPE (_o2[0])))
3054 : : {
3055 : 364 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, ntype, _o2[0]);
3056 : 364 : tem_op.resimplify (lseq, valueize);
3057 : 364 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
3058 : 364 : if (!_r2) goto next_after_fail926;
3059 : : }
3060 : : else
3061 : : _r2 = _o2[0];
3062 : 364 : _o1[1] = _r2;
3063 : : }
3064 : 364 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3065 : 364 : tem_op.resimplify (lseq, valueize);
3066 : 364 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3067 : 364 : if (!_r1) goto next_after_fail926;
3068 : 364 : res_op->ops[0] = _r1;
3069 : : }
3070 : 364 : res_op->resimplify (lseq, valueize);
3071 : 364 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 651, __FILE__, __LINE__, true);
3072 : 364 : return true;
3073 : : }
3074 : : next_after_fail926:;
3075 : : }
3076 : : }
3077 : : else
3078 : : {
3079 : 34 : {
3080 : 34 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
3081 : 34 : gimple_seq *lseq = seq;
3082 : 34 : if (lseq
3083 : 1 : && (!single_use (captures[0])))
3084 : 33 : lseq = NULL;
3085 : 34 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail927;
3086 : 34 : {
3087 : 34 : res_op->set_op (NOP_EXPR, type, 1);
3088 : 34 : {
3089 : 34 : tree _o1[2], _r1;
3090 : 34 : {
3091 : 34 : tree _o2[2], _r2;
3092 : 34 : {
3093 : 34 : tree _o3[1], _r3;
3094 : 34 : _o3[0] = captures[2];
3095 : 34 : if (utype != TREE_TYPE (_o3[0])
3096 : 34 : && !useless_type_conversion_p (utype, TREE_TYPE (_o3[0])))
3097 : : {
3098 : 34 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o3[0]);
3099 : 34 : tem_op.resimplify (lseq, valueize);
3100 : 34 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
3101 : 34 : if (!_r3) goto next_after_fail927;
3102 : : }
3103 : : else
3104 : : _r3 = _o3[0];
3105 : 33 : _o2[0] = _r3;
3106 : : }
3107 : 33 : {
3108 : 33 : tree _o3[1], _r3;
3109 : 33 : _o3[0] = captures[4];
3110 : 33 : if (utype != TREE_TYPE (_o3[0])
3111 : 33 : && !useless_type_conversion_p (utype, TREE_TYPE (_o3[0])))
3112 : : {
3113 : 33 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o3[0]);
3114 : 33 : tem_op.resimplify (lseq, valueize);
3115 : 33 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
3116 : 33 : if (!_r3) goto next_after_fail927;
3117 : : }
3118 : : else
3119 : : _r3 = _o3[0];
3120 : 1 : _o2[1] = _r3;
3121 : : }
3122 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
3123 : 1 : tem_op.resimplify (lseq, valueize);
3124 : 1 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
3125 : 1 : if (!_r2) goto next_after_fail927;
3126 : 1 : _o1[0] = _r2;
3127 : : }
3128 : 1 : {
3129 : 1 : tree _o2[1], _r2;
3130 : 1 : _o2[0] = captures[5];
3131 : 1 : if (utype != TREE_TYPE (_o2[0])
3132 : 1 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
3133 : : {
3134 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
3135 : 1 : tem_op.resimplify (lseq, valueize);
3136 : 1 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
3137 : 1 : if (!_r2) goto next_after_fail927;
3138 : : }
3139 : : else
3140 : : _r2 = _o2[0];
3141 : 1 : _o1[1] = _r2;
3142 : : }
3143 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3144 : 1 : tem_op.resimplify (lseq, valueize);
3145 : 1 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3146 : 1 : if (!_r1) goto next_after_fail927;
3147 : 1 : res_op->ops[0] = _r1;
3148 : : }
3149 : 1 : res_op->resimplify (lseq, valueize);
3150 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 652, __FILE__, __LINE__, true);
3151 : 1 : return true;
3152 : : }
3153 : : next_after_fail927:;
3154 : : }
3155 : : }
3156 : : }
3157 : : return false;
3158 : : }
3159 : :
3160 : : bool
3161 : 159 : gimple_simplify_490 (gimple_match_op *res_op, gimple_seq *seq,
3162 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3163 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3164 : : {
3165 : 159 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3166 : 159 : gimple_seq *lseq = seq;
3167 : 159 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail967;
3168 : 159 : {
3169 : 159 : tree tem;
3170 : 159 : tem = captures[1];
3171 : 159 : res_op->set_value (tem);
3172 : 159 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 677, __FILE__, __LINE__, true);
3173 : : return true;
3174 : : }
3175 : 0 : next_after_fail967:;
3176 : 0 : return false;
3177 : : }
3178 : :
3179 : : bool
3180 : 8373 : gimple_simplify_493 (gimple_match_op *res_op, gimple_seq *seq,
3181 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3182 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3183 : : const combined_fn ARG_UNUSED (minmax))
3184 : : {
3185 : 8373 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3186 : 8373 : if (real_isnan (TREE_REAL_CST_PTR (captures[1]))
3187 : 684 : && (!HONOR_SNANS (captures[1]) || !TREE_REAL_CST (captures[1]).signalling)
3188 : 8985 : && !tree_expr_maybe_signaling_nan_p (captures[0])
3189 : : )
3190 : : {
3191 : 588 : gimple_seq *lseq = seq;
3192 : 588 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail970;
3193 : 588 : {
3194 : 588 : tree tem;
3195 : 588 : tem = captures[0];
3196 : 588 : res_op->set_value (tem);
3197 : 588 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 680, __FILE__, __LINE__, true);
3198 : 588 : return true;
3199 : : }
3200 : 0 : next_after_fail970:;
3201 : : }
3202 : : return false;
3203 : : }
3204 : :
3205 : : bool
3206 : 25 : gimple_simplify_498 (gimple_match_op *res_op, gimple_seq *seq,
3207 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3208 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3209 : : const enum tree_code ARG_UNUSED (op))
3210 : : {
3211 : 25 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3212 : 25 : gimple_seq *lseq = seq;
3213 : 25 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail975;
3214 : 25 : {
3215 : 25 : tree tem;
3216 : 25 : tem = captures[2];
3217 : 25 : res_op->set_value (tem);
3218 : 25 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 685, __FILE__, __LINE__, true);
3219 : : return true;
3220 : : }
3221 : 0 : next_after_fail975:;
3222 : 0 : return false;
3223 : : }
3224 : :
3225 : : bool
3226 : 3 : gimple_simplify_507 (gimple_match_op *res_op, gimple_seq *seq,
3227 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3228 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3229 : : const enum tree_code ARG_UNUSED (cmp))
3230 : : {
3231 : 3 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3232 : 3 : if (!HONOR_SIGNED_ZEROS (type)
3233 : 3 : && (
3234 : 3 : (INTEGRAL_TYPE_P (type)
3235 : 3 : && types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[1]))
3236 : 0 : && types_match (TREE_TYPE (captures[2]), TREE_TYPE (captures[3]))
3237 : 0 : && TYPE_PRECISION (TREE_TYPE (captures[1])) <= TYPE_PRECISION (type)
3238 : 0 : && TYPE_PRECISION (TREE_TYPE (captures[3])) <= TYPE_PRECISION (type))
3239 : 3 : || (types_match (type, TREE_TYPE (captures[1]))
3240 : 0 : && types_match (type, TREE_TYPE (captures[3]))))
3241 : : )
3242 : : {
3243 : 0 : if (cmp == EQ_EXPR
3244 : : )
3245 : : {
3246 : 0 : if (VECTOR_TYPE_P (type)
3247 : : )
3248 : : {
3249 : 0 : gimple_seq *lseq = seq;
3250 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail987;
3251 : 0 : {
3252 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
3253 : 0 : res_op->ops[0] = captures[2];
3254 : 0 : res_op->resimplify (lseq, valueize);
3255 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 697, __FILE__, __LINE__, true);
3256 : 0 : return true;
3257 : : }
3258 : 0 : next_after_fail987:;
3259 : : }
3260 : : else
3261 : : {
3262 : 0 : gimple_seq *lseq = seq;
3263 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail988;
3264 : 0 : {
3265 : 0 : res_op->set_op (NOP_EXPR, type, 1);
3266 : 0 : res_op->ops[0] = captures[2];
3267 : 0 : res_op->resimplify (lseq, valueize);
3268 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 698, __FILE__, __LINE__, true);
3269 : 0 : return true;
3270 : : }
3271 : 0 : next_after_fail988:;
3272 : : }
3273 : : }
3274 : : else
3275 : : {
3276 : : if (cmp == NE_EXPR
3277 : : )
3278 : : {
3279 : 0 : if (VECTOR_TYPE_P (type)
3280 : : )
3281 : : {
3282 : 0 : gimple_seq *lseq = seq;
3283 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail989;
3284 : 0 : {
3285 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
3286 : 0 : res_op->ops[0] = captures[0];
3287 : 0 : res_op->resimplify (lseq, valueize);
3288 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 699, __FILE__, __LINE__, true);
3289 : 0 : return true;
3290 : : }
3291 : 0 : next_after_fail989:;
3292 : : }
3293 : : else
3294 : : {
3295 : 0 : gimple_seq *lseq = seq;
3296 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail990;
3297 : 0 : {
3298 : 0 : res_op->set_op (NOP_EXPR, type, 1);
3299 : 0 : res_op->ops[0] = captures[0];
3300 : 0 : res_op->resimplify (lseq, valueize);
3301 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 700, __FILE__, __LINE__, true);
3302 : 0 : return true;
3303 : : }
3304 : 0 : next_after_fail990:;
3305 : : }
3306 : : }
3307 : : else
3308 : : {
3309 : : if (cmp == LE_EXPR || cmp == UNLE_EXPR || cmp == LT_EXPR || cmp == UNLT_EXPR
3310 : : )
3311 : : {
3312 : 0 : if (!HONOR_NANS (type)
3313 : : )
3314 : : {
3315 : 0 : if (VECTOR_TYPE_P (type)
3316 : : )
3317 : : {
3318 : 0 : gimple_seq *lseq = seq;
3319 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail991;
3320 : 0 : {
3321 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
3322 : 0 : {
3323 : 0 : tree _o1[2], _r1;
3324 : 0 : _o1[0] = captures[0];
3325 : 0 : _o1[1] = captures[2];
3326 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), MIN_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3327 : 0 : tem_op.resimplify (lseq, valueize);
3328 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3329 : 0 : if (!_r1) goto next_after_fail991;
3330 : 0 : res_op->ops[0] = _r1;
3331 : : }
3332 : 0 : res_op->resimplify (lseq, valueize);
3333 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 701, __FILE__, __LINE__, true);
3334 : 0 : return true;
3335 : : }
3336 : : next_after_fail991:;
3337 : : }
3338 : : else
3339 : : {
3340 : 0 : gimple_seq *lseq = seq;
3341 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail992;
3342 : 0 : {
3343 : 0 : res_op->set_op (NOP_EXPR, type, 1);
3344 : 0 : {
3345 : 0 : tree _o1[2], _r1;
3346 : 0 : _o1[0] = captures[0];
3347 : 0 : _o1[1] = captures[2];
3348 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), MIN_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3349 : 0 : tem_op.resimplify (lseq, valueize);
3350 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3351 : 0 : if (!_r1) goto next_after_fail992;
3352 : 0 : res_op->ops[0] = _r1;
3353 : : }
3354 : 0 : res_op->resimplify (lseq, valueize);
3355 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 702, __FILE__, __LINE__, true);
3356 : 0 : return true;
3357 : : }
3358 : : next_after_fail992:;
3359 : : }
3360 : : }
3361 : : }
3362 : : else
3363 : : {
3364 : : if (cmp == GE_EXPR || cmp == UNGE_EXPR || cmp == GT_EXPR || cmp == UNGT_EXPR
3365 : : )
3366 : : {
3367 : 0 : if (!HONOR_NANS (type)
3368 : : )
3369 : : {
3370 : 0 : if (VECTOR_TYPE_P (type)
3371 : : )
3372 : : {
3373 : 0 : gimple_seq *lseq = seq;
3374 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail993;
3375 : 0 : {
3376 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
3377 : 0 : {
3378 : 0 : tree _o1[2], _r1;
3379 : 0 : _o1[0] = captures[0];
3380 : 0 : _o1[1] = captures[2];
3381 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), MAX_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3382 : 0 : tem_op.resimplify (lseq, valueize);
3383 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3384 : 0 : if (!_r1) goto next_after_fail993;
3385 : 0 : res_op->ops[0] = _r1;
3386 : : }
3387 : 0 : res_op->resimplify (lseq, valueize);
3388 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 703, __FILE__, __LINE__, true);
3389 : 0 : return true;
3390 : : }
3391 : : next_after_fail993:;
3392 : : }
3393 : : else
3394 : : {
3395 : 0 : gimple_seq *lseq = seq;
3396 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail994;
3397 : 0 : {
3398 : 0 : res_op->set_op (NOP_EXPR, type, 1);
3399 : 0 : {
3400 : 0 : tree _o1[2], _r1;
3401 : 0 : _o1[0] = captures[0];
3402 : 0 : _o1[1] = captures[2];
3403 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), MAX_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3404 : 0 : tem_op.resimplify (lseq, valueize);
3405 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3406 : 0 : if (!_r1) goto next_after_fail994;
3407 : 0 : res_op->ops[0] = _r1;
3408 : : }
3409 : 0 : res_op->resimplify (lseq, valueize);
3410 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 704, __FILE__, __LINE__, true);
3411 : 0 : return true;
3412 : : }
3413 : : next_after_fail994:;
3414 : : }
3415 : : }
3416 : : }
3417 : : else
3418 : : {
3419 : : if (cmp == UNEQ_EXPR
3420 : : )
3421 : : {
3422 : 0 : if (!HONOR_NANS (type)
3423 : : )
3424 : : {
3425 : 0 : if (VECTOR_TYPE_P (type)
3426 : : )
3427 : : {
3428 : 0 : gimple_seq *lseq = seq;
3429 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail995;
3430 : 0 : {
3431 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
3432 : 0 : res_op->ops[0] = captures[2];
3433 : 0 : res_op->resimplify (lseq, valueize);
3434 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 705, __FILE__, __LINE__, true);
3435 : 0 : return true;
3436 : : }
3437 : 0 : next_after_fail995:;
3438 : : }
3439 : : else
3440 : : {
3441 : 0 : gimple_seq *lseq = seq;
3442 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail996;
3443 : 0 : {
3444 : 0 : res_op->set_op (NOP_EXPR, type, 1);
3445 : 0 : res_op->ops[0] = captures[2];
3446 : 0 : res_op->resimplify (lseq, valueize);
3447 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 706, __FILE__, __LINE__, true);
3448 : 0 : return true;
3449 : : }
3450 : 0 : next_after_fail996:;
3451 : : }
3452 : : }
3453 : : }
3454 : : else
3455 : : {
3456 : : if (cmp == LTGT_EXPR
3457 : : )
3458 : : {
3459 : 0 : if (!HONOR_NANS (type)
3460 : : )
3461 : : {
3462 : 0 : if (VECTOR_TYPE_P (type)
3463 : : )
3464 : : {
3465 : 0 : gimple_seq *lseq = seq;
3466 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail997;
3467 : 0 : {
3468 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
3469 : 0 : res_op->ops[0] = captures[0];
3470 : 0 : res_op->resimplify (lseq, valueize);
3471 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 707, __FILE__, __LINE__, true);
3472 : 0 : return true;
3473 : : }
3474 : 0 : next_after_fail997:;
3475 : : }
3476 : : else
3477 : : {
3478 : 0 : gimple_seq *lseq = seq;
3479 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail998;
3480 : 0 : {
3481 : 0 : res_op->set_op (NOP_EXPR, type, 1);
3482 : 0 : res_op->ops[0] = captures[0];
3483 : 0 : res_op->resimplify (lseq, valueize);
3484 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 708, __FILE__, __LINE__, true);
3485 : 0 : return true;
3486 : : }
3487 : 0 : next_after_fail998:;
3488 : : }
3489 : : }
3490 : : }
3491 : : }
3492 : : }
3493 : : }
3494 : : }
3495 : : }
3496 : : }
3497 : : return false;
3498 : : }
3499 : :
3500 : : bool
3501 : 1 : gimple_simplify_539 (gimple_match_op *res_op, gimple_seq *seq,
3502 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3503 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3504 : : const enum tree_code ARG_UNUSED (cmp))
3505 : : {
3506 : 1 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3507 : 1 : if (!HONOR_SIGNED_ZEROS (type)
3508 : : )
3509 : : {
3510 : 1 : gimple_seq *lseq = seq;
3511 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1068;
3512 : 1 : {
3513 : 1 : tree tem;
3514 : 1 : tem = captures[0];
3515 : 1 : res_op->set_value (tem);
3516 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 731, __FILE__, __LINE__, true);
3517 : 1 : return true;
3518 : : }
3519 : 0 : next_after_fail1068:;
3520 : : }
3521 : : return false;
3522 : : }
3523 : :
3524 : : bool
3525 : 95 : gimple_simplify_549 (gimple_match_op *res_op, gimple_seq *seq,
3526 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3527 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3528 : : const enum tree_code ARG_UNUSED (cmp))
3529 : : {
3530 : 95 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3531 : 95 : if (!HONOR_SIGNED_ZEROS (TREE_TYPE(captures[0]))
3532 : 8 : && !TYPE_UNSIGNED (TREE_TYPE(captures[0]))
3533 : 103 : && bitwise_equal_p (captures[0], captures[1])
3534 : : )
3535 : : {
3536 : 8 : if (TYPE_UNSIGNED (type)
3537 : : )
3538 : : {
3539 : 1 : gimple_seq *lseq = seq;
3540 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1082;
3541 : 1 : {
3542 : 1 : res_op->set_op (ABSU_EXPR, type, 1);
3543 : 1 : res_op->ops[0] = captures[0];
3544 : 1 : res_op->resimplify (lseq, valueize);
3545 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 735, __FILE__, __LINE__, true);
3546 : 1 : return true;
3547 : : }
3548 : 0 : next_after_fail1082:;
3549 : : }
3550 : : else
3551 : : {
3552 : 7 : gimple_seq *lseq = seq;
3553 : 7 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1083;
3554 : 7 : {
3555 : 7 : res_op->set_op (ABS_EXPR, type, 1);
3556 : 7 : res_op->ops[0] = captures[0];
3557 : 7 : res_op->resimplify (lseq, valueize);
3558 : 7 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 736, __FILE__, __LINE__, true);
3559 : 7 : return true;
3560 : : }
3561 : 0 : next_after_fail1083:;
3562 : : }
3563 : : }
3564 : : return false;
3565 : : }
3566 : :
3567 : : bool
3568 : 16 : gimple_simplify_556 (gimple_match_op *res_op, gimple_seq *seq,
3569 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3570 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3571 : : const enum tree_code ARG_UNUSED (neeq),
3572 : : const combined_fn ARG_UNUSED (sign))
3573 : : {
3574 : 16 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3575 : 16 : if (neeq == NE_EXPR
3576 : : )
3577 : : {
3578 : 16 : gimple_seq *lseq = seq;
3579 : 16 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1095;
3580 : 16 : {
3581 : 16 : res_op->set_op (ABS_EXPR, type, 1);
3582 : 16 : res_op->ops[0] = captures[0];
3583 : 16 : res_op->resimplify (lseq, valueize);
3584 : 16 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 748, __FILE__, __LINE__, true);
3585 : 16 : return true;
3586 : : }
3587 : 0 : next_after_fail1095:;
3588 : : }
3589 : : else
3590 : : {
3591 : 0 : gimple_seq *lseq = seq;
3592 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1096;
3593 : 0 : {
3594 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
3595 : 0 : {
3596 : 0 : tree _o1[1], _r1;
3597 : 0 : _o1[0] = captures[0];
3598 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
3599 : 0 : tem_op.resimplify (lseq, valueize);
3600 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3601 : 0 : if (!_r1) goto next_after_fail1096;
3602 : 0 : res_op->ops[0] = _r1;
3603 : : }
3604 : 0 : res_op->resimplify (lseq, valueize);
3605 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 749, __FILE__, __LINE__, true);
3606 : 0 : return true;
3607 : : }
3608 : : next_after_fail1096:;
3609 : : }
3610 : : return false;
3611 : : }
3612 : :
3613 : : bool
3614 : 203 : gimple_simplify_560 (gimple_match_op *res_op, gimple_seq *seq,
3615 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3616 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3617 : : const combined_fn ARG_UNUSED (func))
3618 : : {
3619 : 203 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3620 : 203 : {
3621 : 203 : int val;
3622 : 203 : internal_fn ifn = IFN_LAST;
3623 : 203 : if (TREE_CODE (TREE_TYPE (captures[2])) == BITINT_TYPE)
3624 : : {
3625 : 0 : if (tree_fits_shwi_p (captures[3]))
3626 : : {
3627 : 0 : HOST_WIDE_INT valw = tree_to_shwi (captures[3]);
3628 : 0 : if ((int) valw == valw)
3629 : : {
3630 : 0 : val = valw;
3631 : 0 : ifn = IFN_CLZ;
3632 : : }
3633 : : }
3634 : : }
3635 : 203 : else if (direct_internal_fn_supported_p (IFN_CLZ, TREE_TYPE (captures[2]),
3636 : : OPTIMIZE_FOR_BOTH)
3637 : 406 : && CLZ_DEFINED_VALUE_AT_ZERO
3638 : : (SCALAR_INT_TYPE_MODE (TREE_TYPE (captures[2])), val) == 2)
3639 : 0 : ifn = IFN_CLZ;
3640 : 203 : if (ifn == IFN_CLZ && wi::to_widest (captures[3]) == val
3641 : : )
3642 : : {
3643 : 0 : gimple_seq *lseq = seq;
3644 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1100;
3645 : 0 : {
3646 : 0 : res_op->set_op (CFN_CLZ, type, 2);
3647 : 0 : res_op->ops[0] = captures[2];
3648 : 0 : res_op->ops[1] = captures[3];
3649 : 0 : res_op->resimplify (lseq, valueize);
3650 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 752, __FILE__, __LINE__, true);
3651 : 0 : return true;
3652 : : }
3653 : 0 : next_after_fail1100:;
3654 : : }
3655 : : }
3656 : 203 : return false;
3657 : : }
3658 : :
3659 : : bool
3660 : 30 : gimple_simplify_571 (gimple_match_op *res_op, gimple_seq *seq,
3661 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3662 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3663 : : const combined_fn ARG_UNUSED (bswap))
3664 : : {
3665 : 30 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3666 : 30 : gimple_seq *lseq = seq;
3667 : 30 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1113;
3668 : 30 : {
3669 : 30 : tree tem;
3670 : 30 : tem = captures[0];
3671 : 30 : res_op->set_value (tem);
3672 : 30 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 761, __FILE__, __LINE__, true);
3673 : : return true;
3674 : : }
3675 : 0 : next_after_fail1113:;
3676 : 0 : return false;
3677 : : }
3678 : :
3679 : : bool
3680 : 0 : gimple_simplify_578 (gimple_match_op *res_op, gimple_seq *seq,
3681 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3682 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3683 : : {
3684 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3685 : 0 : gimple_seq *lseq = seq;
3686 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1120;
3687 : 0 : {
3688 : 0 : tree tem;
3689 : 0 : tem = captures[2];
3690 : 0 : res_op->set_value (tem);
3691 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 716, __FILE__, __LINE__, true);
3692 : : return true;
3693 : : }
3694 : 0 : next_after_fail1120:;
3695 : 0 : return false;
3696 : : }
3697 : :
3698 : : bool
3699 : 22 : gimple_simplify_584 (gimple_match_op *res_op, gimple_seq *seq,
3700 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3701 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3702 : : const combined_fn ARG_UNUSED (cond_op))
3703 : : {
3704 : 22 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3705 : 22 : {
3706 : 22 : tree op_type = TREE_TYPE (captures[3]);
3707 : 22 : if (element_precision (type) == element_precision (op_type)
3708 : : )
3709 : : {
3710 : 22 : gimple_seq *lseq = seq;
3711 : 22 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1126;
3712 : 22 : {
3713 : 22 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
3714 : 22 : {
3715 : 22 : tree _o1[4], _r1;
3716 : 22 : _o1[0] = captures[0];
3717 : 22 : _o1[1] = captures[1];
3718 : 22 : _o1[2] = captures[2];
3719 : 22 : {
3720 : 22 : tree _o2[1], _r2;
3721 : 22 : _o2[0] = captures[4];
3722 : 22 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, op_type, _o2[0]);
3723 : 22 : tem_op.resimplify (lseq, valueize);
3724 : 22 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
3725 : 22 : if (!_r2) goto next_after_fail1126;
3726 : 22 : _o1[3] = _r2;
3727 : : }
3728 : 22 : gimple_match_op tem_op (res_op->cond.any_else (), cond_op, TREE_TYPE (_o1[1]), _o1[0], _o1[1], _o1[2], _o1[3]);
3729 : 22 : tem_op.resimplify (lseq, valueize);
3730 : 22 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3731 : 22 : if (!_r1) goto next_after_fail1126;
3732 : 8 : res_op->ops[0] = _r1;
3733 : : }
3734 : 8 : res_op->resimplify (lseq, valueize);
3735 : 8 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 769, __FILE__, __LINE__, true);
3736 : 8 : return true;
3737 : : }
3738 : : next_after_fail1126:;
3739 : : }
3740 : : }
3741 : : return false;
3742 : : }
3743 : :
3744 : : bool
3745 : 0 : gimple_simplify_590 (gimple_match_op *res_op, gimple_seq *seq,
3746 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3747 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3748 : : const combined_fn ARG_UNUSED (cond_len_op))
3749 : : {
3750 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3751 : 0 : {
3752 : 0 : tree op_type = TREE_TYPE (captures[4]);
3753 : 0 : if (element_precision (type) == element_precision (op_type)
3754 : : )
3755 : : {
3756 : 0 : gimple_seq *lseq = seq;
3757 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1132;
3758 : 0 : {
3759 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
3760 : 0 : {
3761 : 0 : tree _o1[7], _r1;
3762 : 0 : _o1[0] = captures[0];
3763 : 0 : _o1[1] = captures[1];
3764 : 0 : _o1[2] = captures[2];
3765 : 0 : _o1[3] = captures[3];
3766 : 0 : {
3767 : 0 : tree _o2[1], _r2;
3768 : 0 : _o2[0] = captures[7];
3769 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, op_type, _o2[0]);
3770 : 0 : tem_op.resimplify (lseq, valueize);
3771 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
3772 : 0 : if (!_r2) goto next_after_fail1132;
3773 : 0 : _o1[4] = _r2;
3774 : : }
3775 : 0 : _o1[5] = captures[5];
3776 : 0 : _o1[6] = captures[6];
3777 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), cond_len_op, TREE_TYPE (_o1[1]), _o1[0], _o1[1], _o1[2], _o1[3], _o1[4], _o1[5], _o1[6]);
3778 : 0 : tem_op.resimplify (lseq, valueize);
3779 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3780 : 0 : if (!_r1) goto next_after_fail1132;
3781 : 0 : res_op->ops[0] = _r1;
3782 : : }
3783 : 0 : res_op->resimplify (lseq, valueize);
3784 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 775, __FILE__, __LINE__, true);
3785 : 0 : return true;
3786 : : }
3787 : : next_after_fail1132:;
3788 : : }
3789 : : }
3790 : : return false;
3791 : : }
3792 : :
3793 : : bool
3794 : 0 : gimple_simplify_603 (gimple_match_op *res_op, gimple_seq *seq,
3795 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3796 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3797 : : const combined_fn ARG_UNUSED (fns))
3798 : : {
3799 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3800 : 0 : gimple_seq *lseq = seq;
3801 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1145;
3802 : 0 : {
3803 : 0 : res_op->set_op (fns, type, 1);
3804 : 0 : res_op->ops[0] = captures[0];
3805 : 0 : res_op->resimplify (lseq, valueize);
3806 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 788, __FILE__, __LINE__, true);
3807 : : return true;
3808 : : }
3809 : 0 : next_after_fail1145:;
3810 : 0 : return false;
3811 : : }
3812 : :
3813 : : bool
3814 : 504 : gimple_simplify_610 (gimple_match_op *res_op, gimple_seq *seq,
3815 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3816 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3817 : : const combined_fn ARG_UNUSED (froms),
3818 : : const combined_fn ARG_UNUSED (tos))
3819 : : {
3820 : 504 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3821 : 504 : if (optimize && canonicalize_math_p ()
3822 : : )
3823 : : {
3824 : 504 : gimple_seq *lseq = seq;
3825 : 504 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1152;
3826 : 504 : {
3827 : 504 : res_op->set_op (tos, type, 1);
3828 : 504 : res_op->ops[0] = captures[0];
3829 : 504 : res_op->resimplify (lseq, valueize);
3830 : 504 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 795, __FILE__, __LINE__, true);
3831 : 504 : return true;
3832 : : }
3833 : 0 : next_after_fail1152:;
3834 : : }
3835 : : return false;
3836 : : }
3837 : :
3838 : : bool
3839 : 1030 : gimple_simplify_617 (gimple_match_op *res_op, gimple_seq *seq,
3840 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3841 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3842 : : const combined_fn ARG_UNUSED (SIGNBIT))
3843 : : {
3844 : 1030 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3845 : 1030 : gimple_seq *lseq = seq;
3846 : 1030 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1159;
3847 : 1030 : {
3848 : 1030 : tree tem;
3849 : 1030 : tem = integer_zero_node;
3850 : 1030 : res_op->set_value (tem);
3851 : 1030 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 802, __FILE__, __LINE__, true);
3852 : : return true;
3853 : : }
3854 : 0 : next_after_fail1159:;
3855 : 0 : return false;
3856 : : }
3857 : :
3858 : : bool
3859 : 0 : gimple_simplify_622 (gimple_match_op *res_op, gimple_seq *seq,
3860 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3861 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3862 : : {
3863 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3864 : 0 : if (canonicalize_math_after_vectorization_p ()
3865 : : )
3866 : : {
3867 : 0 : gimple_seq *lseq = seq;
3868 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1164;
3869 : 0 : {
3870 : 0 : res_op->set_op (CFN_FNMS, type, 3);
3871 : 0 : res_op->ops[0] = captures[0];
3872 : 0 : res_op->ops[1] = captures[1];
3873 : 0 : res_op->ops[2] = captures[2];
3874 : 0 : res_op->resimplify (lseq, valueize);
3875 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 807, __FILE__, __LINE__, true);
3876 : 0 : return true;
3877 : : }
3878 : 0 : next_after_fail1164:;
3879 : : }
3880 : : return false;
3881 : : }
3882 : :
3883 : : bool
3884 : 0 : gimple_simplify_630 (gimple_match_op *res_op, gimple_seq *seq,
3885 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3886 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3887 : : const enum tree_code ARG_UNUSED (rot),
3888 : : const combined_fn ARG_UNUSED (popcount))
3889 : : {
3890 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3891 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
3892 : 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
3893 : 0 : && (
3894 : : 1
3895 : : || !TREE_SIDE_EFFECTS (captures[3]))
3896 : : )
3897 : : {
3898 : 0 : {
3899 : 0 : tree type0 = TREE_TYPE (captures[0]);
3900 : 0 : tree type1 = TREE_TYPE (captures[1]);
3901 : 0 : unsigned int prec0 = TYPE_PRECISION (type0);
3902 : 0 : unsigned int prec1 = TYPE_PRECISION (type1);
3903 : 0 : if (prec0 == prec1 || (prec0 > prec1 && TYPE_UNSIGNED (type1))
3904 : : )
3905 : : {
3906 : 0 : gimple_seq *lseq = seq;
3907 : 0 : if (lseq
3908 : 0 : && (!single_use (captures[1])))
3909 : 0 : lseq = NULL;
3910 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1174;
3911 : 0 : {
3912 : 0 : res_op->set_op (popcount, type, 1);
3913 : 0 : {
3914 : 0 : tree _o1[1], _r1;
3915 : 0 : _o1[0] = captures[2];
3916 : 0 : if (type0 != TREE_TYPE (_o1[0])
3917 : 0 : && !useless_type_conversion_p (type0, TREE_TYPE (_o1[0])))
3918 : : {
3919 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type0, _o1[0]);
3920 : 0 : tem_op.resimplify (lseq, valueize);
3921 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3922 : 0 : if (!_r1) goto next_after_fail1174;
3923 : : }
3924 : : else
3925 : : _r1 = _o1[0];
3926 : 0 : res_op->ops[0] = _r1;
3927 : : }
3928 : 0 : res_op->resimplify (lseq, valueize);
3929 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 817, __FILE__, __LINE__, true);
3930 : 0 : return true;
3931 : : }
3932 : : next_after_fail1174:;
3933 : : }
3934 : : }
3935 : : }
3936 : : return false;
3937 : : }
3938 : :
3939 : : bool
3940 : 285 : gimple_simplify_638 (gimple_match_op *res_op, gimple_seq *seq,
3941 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3942 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3943 : : const combined_fn ARG_UNUSED (PARITY))
3944 : : {
3945 : 285 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3946 : 570 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
3947 : 285 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
3948 : 285 : && TYPE_PRECISION (TREE_TYPE (captures[0])) > TYPE_PRECISION (TREE_TYPE (captures[1]))
3949 : 424 : && (TYPE_UNSIGNED (TREE_TYPE (captures[1]))
3950 : 24 : || ((TYPE_PRECISION (TREE_TYPE (captures[0]))
3951 : 24 : - TYPE_PRECISION (TREE_TYPE (captures[1]))) & 1) == 0)
3952 : : )
3953 : : {
3954 : 139 : {
3955 : 139 : combined_fn cfn = CFN_LAST;
3956 : 139 : tree type0 = TREE_TYPE (captures[1]);
3957 : 139 : if (TREE_CODE (type0) == BITINT_TYPE)
3958 : : {
3959 : 8 : if (TYPE_PRECISION (type0) > MAX_FIXED_MODE_SIZE)
3960 : : cfn = CFN_PARITY;
3961 : : else
3962 : 0 : type0
3963 : 0 : = build_nonstandard_integer_type (TYPE_PRECISION (type0),
3964 : : 1);
3965 : : }
3966 : 139 : type0 = unsigned_type_for (type0);
3967 : 139 : if (cfn == CFN_LAST
3968 : 139 : && direct_internal_fn_supported_p (IFN_PARITY, type0,
3969 : : OPTIMIZE_FOR_BOTH))
3970 : : cfn = CFN_PARITY;
3971 : 81 : if (cfn == CFN_LAST
3972 : 77 : && TYPE_PRECISION (TREE_TYPE (captures[0])) > BITS_PER_WORD
3973 : 81 : && !direct_internal_fn_supported_p (IFN_PARITY,
3974 : 0 : TREE_TYPE (captures[0]),
3975 : : OPTIMIZE_FOR_BOTH))
3976 : : {
3977 : 0 : if (TYPE_PRECISION (type0)
3978 : 0 : == TYPE_PRECISION (unsigned_type_node))
3979 : : cfn = CFN_BUILT_IN_PARITY;
3980 : 0 : else if (TYPE_PRECISION (type0)
3981 : 0 : == TYPE_PRECISION (long_long_unsigned_type_node))
3982 : : cfn = CFN_BUILT_IN_PARITYLL;
3983 : : }
3984 : 139 : if (cfn == CFN_PARITY
3985 : : )
3986 : : {
3987 : 62 : gimple_seq *lseq = seq;
3988 : 62 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1185;
3989 : 62 : {
3990 : 62 : res_op->set_op (CFN_PARITY, type, 1);
3991 : 62 : {
3992 : 62 : tree _o1[1], _r1;
3993 : 62 : _o1[0] = captures[1];
3994 : 62 : if (type0 != TREE_TYPE (_o1[0])
3995 : 62 : && !useless_type_conversion_p (type0, TREE_TYPE (_o1[0])))
3996 : : {
3997 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type0, _o1[0]);
3998 : 2 : tem_op.resimplify (lseq, valueize);
3999 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4000 : 2 : if (!_r1) goto next_after_fail1185;
4001 : : }
4002 : : else
4003 : : _r1 = _o1[0];
4004 : 61 : res_op->ops[0] = _r1;
4005 : : }
4006 : 61 : res_op->resimplify (lseq, valueize);
4007 : 61 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 826, __FILE__, __LINE__, true);
4008 : 61 : return true;
4009 : : }
4010 : : next_after_fail1185:;
4011 : : }
4012 : : else
4013 : : {
4014 : 77 : if (cfn == CFN_BUILT_IN_PARITY
4015 : : )
4016 : : {
4017 : 0 : gimple_seq *lseq = seq;
4018 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1186;
4019 : 0 : {
4020 : 0 : res_op->set_op (CFN_BUILT_IN_PARITY, type, 1);
4021 : 0 : {
4022 : 0 : tree _o1[1], _r1;
4023 : 0 : _o1[0] = captures[1];
4024 : 0 : if (type0 != TREE_TYPE (_o1[0])
4025 : 0 : && !useless_type_conversion_p (type0, TREE_TYPE (_o1[0])))
4026 : : {
4027 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type0, _o1[0]);
4028 : 0 : tem_op.resimplify (lseq, valueize);
4029 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4030 : 0 : if (!_r1) goto next_after_fail1186;
4031 : : }
4032 : : else
4033 : : _r1 = _o1[0];
4034 : 0 : res_op->ops[0] = _r1;
4035 : : }
4036 : 0 : res_op->resimplify (lseq, valueize);
4037 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 827, __FILE__, __LINE__, true);
4038 : 0 : return true;
4039 : : }
4040 : : next_after_fail1186:;
4041 : : }
4042 : : else
4043 : : {
4044 : 77 : if (cfn == CFN_BUILT_IN_PARITYLL
4045 : : )
4046 : : {
4047 : 0 : gimple_seq *lseq = seq;
4048 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1187;
4049 : 0 : {
4050 : 0 : res_op->set_op (CFN_BUILT_IN_PARITYLL, type, 1);
4051 : 0 : {
4052 : 0 : tree _o1[1], _r1;
4053 : 0 : _o1[0] = captures[1];
4054 : 0 : if (type0 != TREE_TYPE (_o1[0])
4055 : 0 : && !useless_type_conversion_p (type0, TREE_TYPE (_o1[0])))
4056 : : {
4057 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type0, _o1[0]);
4058 : 0 : tem_op.resimplify (lseq, valueize);
4059 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4060 : 0 : if (!_r1) goto next_after_fail1187;
4061 : : }
4062 : : else
4063 : : _r1 = _o1[0];
4064 : 0 : res_op->ops[0] = _r1;
4065 : : }
4066 : 0 : res_op->resimplify (lseq, valueize);
4067 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 828, __FILE__, __LINE__, true);
4068 : 0 : return true;
4069 : : }
4070 : : next_after_fail1187:;
4071 : : }
4072 : : }
4073 : : }
4074 : : }
4075 : : }
4076 : : return false;
4077 : : }
4078 : :
4079 : : bool
4080 : 1959 : gimple_simplify_CFN_BUILT_IN_COSHF (gimple_match_op *res_op, gimple_seq *seq,
4081 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4082 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
4083 : : {
4084 : 1959 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4085 : 1959 : switch (TREE_CODE (_p0))
4086 : : {
4087 : 1872 : case SSA_NAME:
4088 : 1872 : if (gimple *_d1 = get_def (valueize, _p0))
4089 : : {
4090 : 898 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
4091 : 636 : switch (gimple_assign_rhs_code (_a1))
4092 : : {
4093 : 14 : case NEGATE_EXPR:
4094 : 14 : {
4095 : 14 : tree _q20 = gimple_assign_rhs1 (_a1);
4096 : 14 : _q20 = do_valueize (valueize, _q20);
4097 : 14 : {
4098 : 14 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4099 : 14 : const combined_fn coss = CFN_BUILT_IN_COSHF;
4100 : 14 : gimple_seq *lseq = seq;
4101 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1236;
4102 : 14 : {
4103 : 14 : res_op->set_op (coss, type, 1);
4104 : 14 : res_op->ops[0] = captures[0];
4105 : 14 : res_op->resimplify (lseq, valueize);
4106 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 860, __FILE__, __LINE__, true);
4107 : 14 : return true;
4108 : : }
4109 : 0 : next_after_fail1236:;
4110 : : }
4111 : 0 : break;
4112 : : }
4113 : 0 : case ABS_EXPR:
4114 : 0 : {
4115 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
4116 : 0 : _q20 = do_valueize (valueize, _q20);
4117 : 0 : {
4118 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4119 : 0 : const combined_fn coss = CFN_BUILT_IN_COSHF;
4120 : 0 : gimple_seq *lseq = seq;
4121 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1237;
4122 : 0 : {
4123 : 0 : res_op->set_op (coss, type, 1);
4124 : 0 : res_op->ops[0] = captures[0];
4125 : 0 : res_op->resimplify (lseq, valueize);
4126 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 860, __FILE__, __LINE__, true);
4127 : 0 : return true;
4128 : : }
4129 : 0 : next_after_fail1237:;
4130 : : }
4131 : 0 : break;
4132 : : }
4133 : : default:;
4134 : : }
4135 : 393 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
4136 : 21 : switch (gimple_call_combined_fn (_c1))
4137 : : {
4138 : 0 : case CFN_BUILT_IN_COPYSIGN:
4139 : 0 : if (gimple_call_num_args (_c1) == 2)
4140 : : {
4141 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
4142 : 0 : _q20 = do_valueize (valueize, _q20);
4143 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
4144 : 0 : _q21 = do_valueize (valueize, _q21);
4145 : 0 : {
4146 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4147 : 0 : if (gimple_simplify_398 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGN, CFN_BUILT_IN_COSHF))
4148 : 0 : return true;
4149 : : }
4150 : : }
4151 : : break;
4152 : 0 : case CFN_BUILT_IN_COPYSIGNF:
4153 : 0 : if (gimple_call_num_args (_c1) == 2)
4154 : : {
4155 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
4156 : 0 : _q20 = do_valueize (valueize, _q20);
4157 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
4158 : 0 : _q21 = do_valueize (valueize, _q21);
4159 : 0 : {
4160 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4161 : 0 : if (gimple_simplify_398 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF, CFN_BUILT_IN_COSHF))
4162 : 0 : return true;
4163 : : }
4164 : : }
4165 : : break;
4166 : 0 : case CFN_BUILT_IN_COPYSIGNL:
4167 : 0 : if (gimple_call_num_args (_c1) == 2)
4168 : : {
4169 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
4170 : 0 : _q20 = do_valueize (valueize, _q20);
4171 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
4172 : 0 : _q21 = do_valueize (valueize, _q21);
4173 : 0 : {
4174 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4175 : 0 : if (gimple_simplify_398 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNL, CFN_BUILT_IN_COSHF))
4176 : 0 : return true;
4177 : : }
4178 : : }
4179 : : break;
4180 : 21 : case CFN_BUILT_IN_ATANHF:
4181 : 21 : if (gimple_call_num_args (_c1) == 1)
4182 : : {
4183 : 21 : tree _q20 = gimple_call_arg (_c1, 0);
4184 : 21 : _q20 = do_valueize (valueize, _q20);
4185 : 21 : {
4186 : 21 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
4187 : 21 : if (gimple_simplify_400 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COSHF, CFN_BUILT_IN_ATANHF, CFN_BUILT_IN_SQRTF))
4188 : 1 : return true;
4189 : : }
4190 : : }
4191 : : break;
4192 : 0 : case CFN_COPYSIGN:
4193 : 0 : if (gimple_call_num_args (_c1) == 2)
4194 : : {
4195 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
4196 : 0 : _q20 = do_valueize (valueize, _q20);
4197 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
4198 : 0 : _q21 = do_valueize (valueize, _q21);
4199 : 0 : {
4200 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4201 : 0 : if (gimple_simplify_398 (res_op, seq, valueize, type, captures, CFN_COPYSIGN, CFN_BUILT_IN_COSHF))
4202 : 0 : return true;
4203 : : }
4204 : : }
4205 : : break;
4206 : : default:;
4207 : : }
4208 : : }
4209 : : break;
4210 : : default:;
4211 : : }
4212 : : return false;
4213 : : }
4214 : :
4215 : : bool
4216 : 343 : gimple_simplify_CFN_BUILT_IN_CCOSL (gimple_match_op *res_op, gimple_seq *seq,
4217 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4218 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
4219 : : {
4220 : 343 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4221 : 343 : switch (TREE_CODE (_p0))
4222 : : {
4223 : 322 : case SSA_NAME:
4224 : 322 : if (gimple *_d1 = get_def (valueize, _p0))
4225 : : {
4226 : 195 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
4227 : 189 : switch (gimple_assign_rhs_code (_a1))
4228 : : {
4229 : 18 : case NEGATE_EXPR:
4230 : 18 : {
4231 : 18 : tree _q20 = gimple_assign_rhs1 (_a1);
4232 : 18 : _q20 = do_valueize (valueize, _q20);
4233 : 18 : {
4234 : 18 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4235 : 18 : gimple_seq *lseq = seq;
4236 : 18 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1259;
4237 : 18 : {
4238 : 18 : res_op->set_op (CFN_BUILT_IN_CCOSL, type, 1);
4239 : 18 : res_op->ops[0] = captures[0];
4240 : 18 : res_op->resimplify (lseq, valueize);
4241 : 18 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 872, __FILE__, __LINE__, true);
4242 : 18 : return true;
4243 : : }
4244 : 0 : next_after_fail1259:;
4245 : : }
4246 : 0 : break;
4247 : : }
4248 : : default:;
4249 : : }
4250 : : }
4251 : : break;
4252 : : default:;
4253 : : }
4254 : : return false;
4255 : : }
4256 : :
4257 : : bool
4258 : 7019 : gimple_simplify_CFN_BUILT_IN_CABSF (gimple_match_op *res_op, gimple_seq *seq,
4259 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4260 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
4261 : : {
4262 : 7019 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4263 : 7019 : switch (TREE_CODE (_p0))
4264 : : {
4265 : 6966 : case SSA_NAME:
4266 : 6966 : if (gimple *_d1 = get_def (valueize, _p0))
4267 : : {
4268 : 3849 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
4269 : 4018 : switch (gimple_assign_rhs_code (_a1))
4270 : : {
4271 : 2 : case CONJ_EXPR:
4272 : 2 : {
4273 : 2 : tree _q20 = gimple_assign_rhs1 (_a1);
4274 : 2 : _q20 = do_valueize (valueize, _q20);
4275 : 2 : {
4276 : 2 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4277 : 2 : gimple_seq *lseq = seq;
4278 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1263;
4279 : 2 : {
4280 : 2 : res_op->set_op (CFN_BUILT_IN_CABSF, type, 1);
4281 : 2 : res_op->ops[0] = captures[0];
4282 : 2 : res_op->resimplify (lseq, valueize);
4283 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 873, __FILE__, __LINE__, true);
4284 : 2 : return true;
4285 : : }
4286 : 0 : next_after_fail1263:;
4287 : : }
4288 : 0 : break;
4289 : : }
4290 : 18 : case NEGATE_EXPR:
4291 : 18 : {
4292 : 18 : tree _q20 = gimple_assign_rhs1 (_a1);
4293 : 18 : _q20 = do_valueize (valueize, _q20);
4294 : 18 : {
4295 : 18 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4296 : 18 : gimple_seq *lseq = seq;
4297 : 18 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1264;
4298 : 18 : {
4299 : 18 : res_op->set_op (CFN_BUILT_IN_CABSF, type, 1);
4300 : 18 : res_op->ops[0] = captures[0];
4301 : 18 : res_op->resimplify (lseq, valueize);
4302 : 18 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 873, __FILE__, __LINE__, true);
4303 : 18 : return true;
4304 : : }
4305 : 0 : next_after_fail1264:;
4306 : : }
4307 : 0 : break;
4308 : : }
4309 : 1708 : case COMPLEX_EXPR:
4310 : 1708 : {
4311 : 1708 : tree _q20 = gimple_assign_rhs1 (_a1);
4312 : 1708 : _q20 = do_valueize (valueize, _q20);
4313 : 1708 : tree _q21 = gimple_assign_rhs2 (_a1);
4314 : 1708 : _q21 = do_valueize (valueize, _q21);
4315 : 1708 : if (real_zerop (_q21))
4316 : : {
4317 : 14 : {
4318 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4319 : 14 : gimple_seq *lseq = seq;
4320 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1265;
4321 : 14 : {
4322 : 14 : res_op->set_op (ABS_EXPR, type, 1);
4323 : 14 : res_op->ops[0] = captures[0];
4324 : 14 : res_op->resimplify (lseq, valueize);
4325 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 874, __FILE__, __LINE__, true);
4326 : 14 : return true;
4327 : : }
4328 : 0 : next_after_fail1265:;
4329 : : }
4330 : : }
4331 : 1694 : if (real_zerop (_q20))
4332 : : {
4333 : 0 : {
4334 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
4335 : 0 : gimple_seq *lseq = seq;
4336 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1266;
4337 : 0 : {
4338 : 0 : res_op->set_op (ABS_EXPR, type, 1);
4339 : 0 : res_op->ops[0] = captures[0];
4340 : 0 : res_op->resimplify (lseq, valueize);
4341 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 874, __FILE__, __LINE__, true);
4342 : 0 : return true;
4343 : : }
4344 : 0 : next_after_fail1266:;
4345 : : }
4346 : : }
4347 : 1694 : if ((_q21 == _q20 && ! TREE_SIDE_EFFECTS (_q21)) || (operand_equal_p (_q21, _q20, 0) && types_match (_q21, _q20)))
4348 : : {
4349 : 6 : {
4350 : 6 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4351 : 6 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
4352 : : )
4353 : : {
4354 : 6 : gimple_seq *lseq = seq;
4355 : 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1267;
4356 : 6 : {
4357 : 6 : res_op->set_op (MULT_EXPR, type, 2);
4358 : 6 : {
4359 : 6 : tree _o1[1], _r1;
4360 : 6 : _o1[0] = captures[0];
4361 : 6 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
4362 : 6 : tem_op.resimplify (lseq, valueize);
4363 : 6 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4364 : 6 : if (!_r1) goto next_after_fail1267;
4365 : 4 : res_op->ops[0] = _r1;
4366 : : }
4367 : 4 : res_op->ops[1] = build_real_truncate (type, dconst_sqrt2 ());
4368 : 4 : res_op->resimplify (lseq, valueize);
4369 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 875, __FILE__, __LINE__, true);
4370 : 4 : return true;
4371 : : }
4372 : : next_after_fail1267:;
4373 : : }
4374 : : }
4375 : : }
4376 : : break;
4377 : : }
4378 : : default:;
4379 : : }
4380 : : }
4381 : : break;
4382 : : default:;
4383 : : }
4384 : : return false;
4385 : : }
4386 : :
4387 : : bool
4388 : 625511 : gimple_simplify_FIX_TRUNC_EXPR (gimple_match_op *res_op, gimple_seq *seq,
4389 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4390 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
4391 : : {
4392 : 625511 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4393 : 625511 : {
4394 : 625511 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
4395 : 625511 : if ((
4396 : : 1
4397 : 625511 : && useless_type_conversion_p (type, TREE_TYPE (captures[0])))
4398 : : || (
4399 : :
4400 : : && type == TREE_TYPE (captures[0]))
4401 : : )
4402 : : {
4403 : 0 : gimple_seq *lseq = seq;
4404 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1313;
4405 : 0 : {
4406 : 0 : tree tem;
4407 : 0 : tem = captures[0];
4408 : 0 : res_op->set_value (tem);
4409 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 849, __FILE__, __LINE__, true);
4410 : 0 : return true;
4411 : : }
4412 : 0 : next_after_fail1313:;
4413 : : }
4414 : : }
4415 : 625511 : switch (TREE_CODE (_p0))
4416 : : {
4417 : 611038 : case SSA_NAME:
4418 : 611038 : if (gimple *_d1 = get_def (valueize, _p0))
4419 : : {
4420 : 444956 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
4421 : 653123 : switch (gimple_assign_rhs_code (_a1))
4422 : : {
4423 : 3464 : CASE_CONVERT:
4424 : 3464 : {
4425 : 3464 : tree _q20 = gimple_assign_rhs1 (_a1);
4426 : 3464 : _q20 = do_valueize (valueize, _q20);
4427 : 3464 : {
4428 : 3464 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
4429 : 3464 : {
4430 : 3464 : tree inside_type = TREE_TYPE (captures[1]);
4431 : 3464 : tree inter_type = TREE_TYPE (captures[0]);
4432 : 3464 : int inside_int = INTEGRAL_TYPE_P (inside_type);
4433 : 3464 : int inside_ptr = POINTER_TYPE_P (inside_type);
4434 : 3464 : int inside_float = FLOAT_TYPE_P (inside_type);
4435 : 3464 : int inside_vec = VECTOR_TYPE_P (inside_type);
4436 : 3464 : unsigned int inside_prec = element_precision (inside_type);
4437 : 3464 : int inside_unsignedp = TYPE_UNSIGNED (inside_type);
4438 : 3464 : int inter_int = INTEGRAL_TYPE_P (inter_type);
4439 : 3464 : int inter_ptr = POINTER_TYPE_P (inter_type);
4440 : 3464 : int inter_float = FLOAT_TYPE_P (inter_type);
4441 : 3464 : int inter_vec = VECTOR_TYPE_P (inter_type);
4442 : 3464 : unsigned int inter_prec = element_precision (inter_type);
4443 : 3464 : int inter_unsignedp = TYPE_UNSIGNED (inter_type);
4444 : 3464 : int final_int = INTEGRAL_TYPE_P (type);
4445 : 3464 : int final_ptr = POINTER_TYPE_P (type);
4446 : 3464 : int final_float = FLOAT_TYPE_P (type);
4447 : 3464 : int final_vec = VECTOR_TYPE_P (type);
4448 : 3464 : unsigned int final_prec = element_precision (type);
4449 : 3464 : int final_unsignedp = TYPE_UNSIGNED (type);
4450 : 3464 : if (((
4451 : : 1
4452 : 3464 : && useless_type_conversion_p (type, inside_type))
4453 : : || (
4454 : :
4455 : : && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (inside_type)))
4456 : 0 : && (((inter_int || inter_ptr) && final_int)
4457 : 0 : || (inter_float && final_float))
4458 : 3464 : && inter_prec >= final_prec
4459 : : )
4460 : : {
4461 : 0 : gimple_seq *lseq = seq;
4462 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1314;
4463 : 0 : {
4464 : 0 : res_op->set_op (FIX_TRUNC_EXPR, type, 1);
4465 : 0 : res_op->ops[0] = captures[1];
4466 : 0 : res_op->resimplify (lseq, valueize);
4467 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 850, __FILE__, __LINE__, true);
4468 : 0 : return true;
4469 : : }
4470 : 0 : next_after_fail1314:;
4471 : : }
4472 : : else
4473 : : {
4474 : 3464 : if (((inter_int && inside_int) || (inter_float && inside_float))
4475 : 3464 : && (final_int || final_float)
4476 : 3464 : && inter_prec >= inside_prec
4477 : 325 : && (inter_float || inter_unsignedp == inside_unsignedp)
4478 : : )
4479 : : {
4480 : 325 : gimple_seq *lseq = seq;
4481 : 325 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1315;
4482 : 325 : {
4483 : 325 : res_op->set_op (FIX_TRUNC_EXPR, type, 1);
4484 : 325 : res_op->ops[0] = captures[1];
4485 : 325 : res_op->resimplify (lseq, valueize);
4486 : 325 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 851, __FILE__, __LINE__, true);
4487 : 325 : return true;
4488 : : }
4489 : 0 : next_after_fail1315:;
4490 : 0 : }
4491 : : else
4492 : : {
4493 : 3139 : if (inside_int && inter_int && final_int
4494 : 0 : && ((inside_prec < inter_prec && inter_prec < final_prec
4495 : 0 : && inside_unsignedp && !inter_unsignedp)
4496 : 0 : || final_prec == inter_prec
4497 : 0 : || (inside_prec < inter_prec && inter_prec > final_prec
4498 : 0 : && !inside_unsignedp && inter_unsignedp))
4499 : : )
4500 : : {
4501 : 0 : gimple_seq *lseq = seq;
4502 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1316;
4503 : 0 : {
4504 : 0 : res_op->set_op (FIX_TRUNC_EXPR, type, 1);
4505 : 0 : res_op->ops[0] = captures[1];
4506 : 0 : res_op->resimplify (lseq, valueize);
4507 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 852, __FILE__, __LINE__, true);
4508 : 0 : return true;
4509 : : }
4510 : 0 : next_after_fail1316:;
4511 : 0 : }
4512 : : else
4513 : : {
4514 : 3139 : if (! inside_float && ! inter_float && ! final_float
4515 : : && ! inside_vec && ! inter_vec && ! final_vec
4516 : 0 : && (inter_prec >= inside_prec || inter_prec >= final_prec)
4517 : 0 : && ! (inside_int && inter_int
4518 : 0 : && inter_unsignedp != inside_unsignedp
4519 : 0 : && inter_prec < final_prec)
4520 : 0 : && ((inter_unsignedp && inter_prec > inside_prec)
4521 : 0 : == (final_unsignedp && final_prec > inter_prec))
4522 : 0 : && ! (inside_ptr && inter_prec != final_prec)
4523 : 0 : && ! (final_ptr && inside_prec != inter_prec)
4524 : : )
4525 : : {
4526 : 0 : gimple_seq *lseq = seq;
4527 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1317;
4528 : 0 : {
4529 : 0 : res_op->set_op (FIX_TRUNC_EXPR, type, 1);
4530 : 0 : res_op->ops[0] = captures[1];
4531 : 0 : res_op->resimplify (lseq, valueize);
4532 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 853, __FILE__, __LINE__, true);
4533 : 0 : return true;
4534 : : }
4535 : 0 : next_after_fail1317:;
4536 : 0 : }
4537 : : else
4538 : : {
4539 : 3139 : if (inside_int && inter_int && final_int
4540 : 0 : && final_prec <= inside_prec
4541 : 0 : && inter_prec >= inside_prec
4542 : : )
4543 : : {
4544 : 0 : gimple_seq *lseq = seq;
4545 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1318;
4546 : 0 : {
4547 : 0 : res_op->set_op (NOP_EXPR, type, 1);
4548 : 0 : res_op->ops[0] = captures[1];
4549 : 0 : res_op->resimplify (lseq, valueize);
4550 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 854, __FILE__, __LINE__, true);
4551 : 0 : return true;
4552 : : }
4553 : 0 : next_after_fail1318:;
4554 : 0 : }
4555 : : else
4556 : : {
4557 : 3139 : if (1
4558 : 3139 : && final_int && inter_int && inside_int
4559 : 0 : && final_prec == inside_prec
4560 : 0 : && final_prec > inter_prec
4561 : 0 : && inter_unsignedp
4562 : : )
4563 : : {
4564 : 0 : gimple_seq *lseq = seq;
4565 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1319;
4566 : 0 : {
4567 : 0 : res_op->set_op (NOP_EXPR, type, 1);
4568 : 0 : {
4569 : 0 : tree _o1[2], _r1;
4570 : 0 : _o1[0] = captures[1];
4571 : 0 : _o1[1] = wide_int_to_tree
4572 : 0 : (inside_type,
4573 : 0 : wi::mask (inter_prec, false,
4574 : 0 : TYPE_PRECISION (inside_type)));
4575 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4576 : 0 : tem_op.resimplify (lseq, valueize);
4577 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4578 : 0 : if (!_r1) goto next_after_fail1319;
4579 : 0 : res_op->ops[0] = _r1;
4580 : : }
4581 : 0 : res_op->resimplify (lseq, valueize);
4582 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 855, __FILE__, __LINE__, true);
4583 : 0 : return true;
4584 : : }
4585 : 3139 : next_after_fail1319:;
4586 : : }
4587 : : else
4588 : : {
4589 : 3139 : if (1
4590 : 3139 : && inside_int && inter_float && final_int &&
4591 : 3139 : (unsigned) significand_size (TYPE_MODE (inter_type))
4592 : 0 : >= inside_prec - !inside_unsignedp
4593 : : )
4594 : : {
4595 : 0 : gimple_seq *lseq = seq;
4596 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1320;
4597 : 0 : {
4598 : 0 : res_op->set_op (NOP_EXPR, type, 1);
4599 : 0 : res_op->ops[0] = captures[1];
4600 : 0 : res_op->resimplify (lseq, valueize);
4601 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 856, __FILE__, __LINE__, true);
4602 : 0 : return true;
4603 : : }
4604 : 0 : next_after_fail1320:;
4605 : : }
4606 : : }
4607 : : }
4608 : : }
4609 : : }
4610 : : }
4611 : : }
4612 : : }
4613 : : }
4614 : 3139 : break;
4615 : : }
4616 : 4051 : case FLOAT_EXPR:
4617 : 4051 : {
4618 : 4051 : tree _q20 = gimple_assign_rhs1 (_a1);
4619 : 4051 : _q20 = do_valueize (valueize, _q20);
4620 : 4051 : {
4621 : 4051 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
4622 : 4051 : {
4623 : 4051 : tree inside_type = TREE_TYPE (captures[1]);
4624 : 4051 : tree inter_type = TREE_TYPE (captures[0]);
4625 : 4051 : int inside_int = INTEGRAL_TYPE_P (inside_type);
4626 : 4051 : int inside_ptr = POINTER_TYPE_P (inside_type);
4627 : 4051 : int inside_float = FLOAT_TYPE_P (inside_type);
4628 : 4051 : int inside_vec = VECTOR_TYPE_P (inside_type);
4629 : 4051 : unsigned int inside_prec = element_precision (inside_type);
4630 : 4051 : int inside_unsignedp = TYPE_UNSIGNED (inside_type);
4631 : 4051 : int inter_int = INTEGRAL_TYPE_P (inter_type);
4632 : 4051 : int inter_ptr = POINTER_TYPE_P (inter_type);
4633 : 4051 : int inter_float = FLOAT_TYPE_P (inter_type);
4634 : 4051 : int inter_vec = VECTOR_TYPE_P (inter_type);
4635 : 4051 : unsigned int inter_prec = element_precision (inter_type);
4636 : 4051 : int inter_unsignedp = TYPE_UNSIGNED (inter_type);
4637 : 4051 : int final_int = INTEGRAL_TYPE_P (type);
4638 : 4051 : int final_ptr = POINTER_TYPE_P (type);
4639 : 4051 : int final_float = FLOAT_TYPE_P (type);
4640 : 4051 : int final_vec = VECTOR_TYPE_P (type);
4641 : 4051 : unsigned int final_prec = element_precision (type);
4642 : 4051 : int final_unsignedp = TYPE_UNSIGNED (type);
4643 : 4051 : if (((
4644 : : 1
4645 : 4051 : && useless_type_conversion_p (type, inside_type))
4646 : : || (
4647 : :
4648 : : && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (inside_type)))
4649 : 2700 : && (((inter_int || inter_ptr) && final_int)
4650 : 2700 : || (inter_float && final_float))
4651 : 4051 : && inter_prec >= final_prec
4652 : : )
4653 : : {
4654 : 0 : gimple_seq *lseq = seq;
4655 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1321;
4656 : 0 : {
4657 : 0 : res_op->set_op (FIX_TRUNC_EXPR, type, 1);
4658 : 0 : res_op->ops[0] = captures[1];
4659 : 0 : res_op->resimplify (lseq, valueize);
4660 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 850, __FILE__, __LINE__, true);
4661 : 0 : return true;
4662 : : }
4663 : 0 : next_after_fail1321:;
4664 : : }
4665 : : else
4666 : : {
4667 : 4051 : if (((inter_int && inside_int) || (inter_float && inside_float))
4668 : 0 : && (final_int || final_float)
4669 : 0 : && inter_prec >= inside_prec
4670 : 0 : && (inter_float || inter_unsignedp == inside_unsignedp)
4671 : : )
4672 : : {
4673 : 0 : gimple_seq *lseq = seq;
4674 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1322;
4675 : 0 : {
4676 : 0 : res_op->set_op (FIX_TRUNC_EXPR, type, 1);
4677 : 0 : res_op->ops[0] = captures[1];
4678 : 0 : res_op->resimplify (lseq, valueize);
4679 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 851, __FILE__, __LINE__, true);
4680 : 0 : return true;
4681 : : }
4682 : 0 : next_after_fail1322:;
4683 : 0 : }
4684 : : else
4685 : : {
4686 : 4051 : if (inside_int && inter_int && final_int
4687 : 0 : && ((inside_prec < inter_prec && inter_prec < final_prec
4688 : 0 : && inside_unsignedp && !inter_unsignedp)
4689 : 0 : || final_prec == inter_prec
4690 : 0 : || (inside_prec < inter_prec && inter_prec > final_prec
4691 : 0 : && !inside_unsignedp && inter_unsignedp))
4692 : : )
4693 : : {
4694 : 0 : gimple_seq *lseq = seq;
4695 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1323;
4696 : 0 : {
4697 : 0 : res_op->set_op (FIX_TRUNC_EXPR, type, 1);
4698 : 0 : res_op->ops[0] = captures[1];
4699 : 0 : res_op->resimplify (lseq, valueize);
4700 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 852, __FILE__, __LINE__, true);
4701 : 0 : return true;
4702 : : }
4703 : 0 : next_after_fail1323:;
4704 : 0 : }
4705 : : else
4706 : : {
4707 : 4051 : if (! inside_float && ! inter_float && ! final_float
4708 : : && ! inside_vec && ! inter_vec && ! final_vec
4709 : 0 : && (inter_prec >= inside_prec || inter_prec >= final_prec)
4710 : 0 : && ! (inside_int && inter_int
4711 : 0 : && inter_unsignedp != inside_unsignedp
4712 : 0 : && inter_prec < final_prec)
4713 : 0 : && ((inter_unsignedp && inter_prec > inside_prec)
4714 : 0 : == (final_unsignedp && final_prec > inter_prec))
4715 : 0 : && ! (inside_ptr && inter_prec != final_prec)
4716 : 0 : && ! (final_ptr && inside_prec != inter_prec)
4717 : : )
4718 : : {
4719 : 0 : gimple_seq *lseq = seq;
4720 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1324;
4721 : 0 : {
4722 : 0 : res_op->set_op (FIX_TRUNC_EXPR, type, 1);
4723 : 0 : res_op->ops[0] = captures[1];
4724 : 0 : res_op->resimplify (lseq, valueize);
4725 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 853, __FILE__, __LINE__, true);
4726 : 0 : return true;
4727 : : }
4728 : 0 : next_after_fail1324:;
4729 : 0 : }
4730 : : else
4731 : : {
4732 : 4051 : if (inside_int && inter_int && final_int
4733 : 0 : && final_prec <= inside_prec
4734 : 0 : && inter_prec >= inside_prec
4735 : : )
4736 : : {
4737 : 0 : gimple_seq *lseq = seq;
4738 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1325;
4739 : 0 : {
4740 : 0 : res_op->set_op (NOP_EXPR, type, 1);
4741 : 0 : res_op->ops[0] = captures[1];
4742 : 0 : res_op->resimplify (lseq, valueize);
4743 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 854, __FILE__, __LINE__, true);
4744 : 0 : return true;
4745 : : }
4746 : 0 : next_after_fail1325:;
4747 : 0 : }
4748 : : else
4749 : : {
4750 : 4051 : if (1
4751 : 4051 : && final_int && inter_int && inside_int
4752 : 0 : && final_prec == inside_prec
4753 : 0 : && final_prec > inter_prec
4754 : 0 : && inter_unsignedp
4755 : : )
4756 : : {
4757 : 0 : gimple_seq *lseq = seq;
4758 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1326;
4759 : 0 : {
4760 : 0 : res_op->set_op (NOP_EXPR, type, 1);
4761 : 0 : {
4762 : 0 : tree _o1[2], _r1;
4763 : 0 : _o1[0] = captures[1];
4764 : 0 : _o1[1] = wide_int_to_tree
4765 : 0 : (inside_type,
4766 : 0 : wi::mask (inter_prec, false,
4767 : 0 : TYPE_PRECISION (inside_type)));
4768 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4769 : 0 : tem_op.resimplify (lseq, valueize);
4770 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4771 : 0 : if (!_r1) goto next_after_fail1326;
4772 : 0 : res_op->ops[0] = _r1;
4773 : : }
4774 : 0 : res_op->resimplify (lseq, valueize);
4775 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 855, __FILE__, __LINE__, true);
4776 : 0 : return true;
4777 : : }
4778 : 3406 : next_after_fail1326:;
4779 : : }
4780 : : else
4781 : : {
4782 : 4051 : if (1
4783 : 4051 : && inside_int && inter_float && final_int &&
4784 : 7420 : (unsigned) significand_size (TYPE_MODE (inter_type))
4785 : 4014 : >= inside_prec - !inside_unsignedp
4786 : : )
4787 : : {
4788 : 645 : gimple_seq *lseq = seq;
4789 : 645 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1327;
4790 : 645 : {
4791 : 645 : res_op->set_op (NOP_EXPR, type, 1);
4792 : 645 : res_op->ops[0] = captures[1];
4793 : 645 : res_op->resimplify (lseq, valueize);
4794 : 645 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 856, __FILE__, __LINE__, true);
4795 : 645 : return true;
4796 : : }
4797 : 0 : next_after_fail1327:;
4798 : : }
4799 : : }
4800 : : }
4801 : : }
4802 : : }
4803 : : }
4804 : : }
4805 : : }
4806 : : }
4807 : 3406 : break;
4808 : : }
4809 : : default:;
4810 : : }
4811 : : }
4812 : : break;
4813 : : default:;
4814 : : }
4815 : : return false;
4816 : : }
4817 : :
4818 : : bool
4819 : 11359 : gimple_simplify_CFN_BUILT_IN_LOG (gimple_match_op *res_op, gimple_seq *seq,
4820 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4821 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
4822 : : {
4823 : 11359 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4824 : 11359 : switch (TREE_CODE (_p0))
4825 : : {
4826 : 10711 : case SSA_NAME:
4827 : 10711 : if (gimple *_d1 = get_def (valueize, _p0))
4828 : : {
4829 : 5484 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
4830 : 403 : switch (gimple_call_combined_fn (_c1))
4831 : : {
4832 : 7 : case CFN_BUILT_IN_EXP:
4833 : 7 : if (gimple_call_num_args (_c1) == 1)
4834 : : {
4835 : 7 : tree _q20 = gimple_call_arg (_c1, 0);
4836 : 7 : _q20 = do_valueize (valueize, _q20);
4837 : 7 : {
4838 : 7 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4839 : 7 : if (flag_unsafe_math_optimizations
4840 : : )
4841 : : {
4842 : 7 : gimple_seq *lseq = seq;
4843 : 7 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1364;
4844 : 7 : {
4845 : 7 : tree tem;
4846 : 7 : tem = captures[0];
4847 : 7 : res_op->set_value (tem);
4848 : 7 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 905, __FILE__, __LINE__, true);
4849 : 7 : return true;
4850 : : }
4851 : 0 : next_after_fail1364:;
4852 : : }
4853 : : }
4854 : : }
4855 : : break;
4856 : 16 : case CFN_BUILT_IN_POW:
4857 : 16 : if (gimple_call_num_args (_c1) == 2)
4858 : : {
4859 : 16 : tree _q20 = gimple_call_arg (_c1, 0);
4860 : 16 : _q20 = do_valueize (valueize, _q20);
4861 : 16 : tree _q21 = gimple_call_arg (_c1, 1);
4862 : 16 : _q21 = do_valueize (valueize, _q21);
4863 : 16 : {
4864 : 16 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4865 : 16 : if (gimple_simplify_599 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LOG, CFN_BUILT_IN_POW))
4866 : 8 : return true;
4867 : : }
4868 : : }
4869 : : break;
4870 : 12 : case CFN_BUILT_IN_CBRT:
4871 : 12 : if (gimple_call_num_args (_c1) == 1)
4872 : : {
4873 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
4874 : 12 : _q20 = do_valueize (valueize, _q20);
4875 : 12 : {
4876 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4877 : 12 : if (flag_unsafe_math_optimizations
4878 : : )
4879 : : {
4880 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
4881 : : )
4882 : : {
4883 : 12 : {
4884 : 12 : tree x;
4885 : 12 : switch (CFN_BUILT_IN_CBRT)
4886 : : {
4887 : : CASE_CFN_SQRT:
4888 : : x = build_real (type, dconsthalf);
4889 : : break;
4890 : 12 : CASE_CFN_CBRT:
4891 : 12 : x = build_real_truncate (type, dconst_third ());
4892 : 12 : break;
4893 : : default:
4894 : : gcc_unreachable ();
4895 : : }
4896 : 12 : gimple_seq *lseq = seq;
4897 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1365;
4898 : 12 : {
4899 : 12 : res_op->set_op (MULT_EXPR, type, 2);
4900 : 12 : res_op->ops[0] = x;
4901 : 12 : {
4902 : 12 : tree _o1[1], _r1;
4903 : 12 : _o1[0] = captures[0];
4904 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG, TREE_TYPE (_o1[0]), _o1[0]);
4905 : 12 : tem_op.resimplify (lseq, valueize);
4906 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4907 : 12 : if (!_r1) goto next_after_fail1365;
4908 : 6 : res_op->ops[1] = _r1;
4909 : : }
4910 : 6 : res_op->resimplify (lseq, valueize);
4911 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 903, __FILE__, __LINE__, true);
4912 : 6 : return true;
4913 : : }
4914 : : next_after_fail1365:;
4915 : : }
4916 : : }
4917 : : }
4918 : : }
4919 : : }
4920 : : break;
4921 : 12 : case CFN_BUILT_IN_EXP2:
4922 : 12 : if (gimple_call_num_args (_c1) == 1)
4923 : : {
4924 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
4925 : 12 : _q20 = do_valueize (valueize, _q20);
4926 : 12 : {
4927 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4928 : 12 : if (flag_unsafe_math_optimizations
4929 : : )
4930 : : {
4931 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
4932 : : )
4933 : : {
4934 : 12 : {
4935 : 12 : tree x;
4936 : 12 : switch (CFN_BUILT_IN_EXP2)
4937 : : {
4938 : : CASE_CFN_EXP:
4939 : : x = build_real_truncate (type, dconst_e ());
4940 : : break;
4941 : 12 : CASE_CFN_EXP2:
4942 : 12 : x = build_real (type, dconst2);
4943 : 12 : break;
4944 : : CASE_CFN_EXP10:
4945 : : CASE_CFN_POW10:
4946 : : {
4947 : : REAL_VALUE_TYPE dconst10;
4948 : : real_from_integer (&dconst10, VOIDmode, 10, SIGNED);
4949 : : x = build_real (type, dconst10);
4950 : : }
4951 : : break;
4952 : : default:
4953 : : gcc_unreachable ();
4954 : : }
4955 : 12 : gimple_seq *lseq = seq;
4956 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1366;
4957 : 12 : {
4958 : 12 : res_op->set_op (MULT_EXPR, type, 2);
4959 : 12 : {
4960 : 12 : tree _o1[1], _r1;
4961 : 12 : _o1[0] = x;
4962 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG, TREE_TYPE (_o1[0]), _o1[0]);
4963 : 12 : tem_op.resimplify (lseq, valueize);
4964 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4965 : 12 : if (!_r1) goto next_after_fail1366;
4966 : 12 : res_op->ops[0] = _r1;
4967 : : }
4968 : 12 : res_op->ops[1] = captures[0];
4969 : 12 : res_op->resimplify (lseq, valueize);
4970 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 904, __FILE__, __LINE__, true);
4971 : 12 : return true;
4972 : : }
4973 : : next_after_fail1366:;
4974 : : }
4975 : : }
4976 : : }
4977 : : }
4978 : : }
4979 : : break;
4980 : 14 : case CFN_BUILT_IN_SQRT:
4981 : 14 : if (gimple_call_num_args (_c1) == 1)
4982 : : {
4983 : 14 : tree _q20 = gimple_call_arg (_c1, 0);
4984 : 14 : _q20 = do_valueize (valueize, _q20);
4985 : 14 : {
4986 : 14 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
4987 : 14 : if (flag_unsafe_math_optimizations
4988 : : )
4989 : : {
4990 : 14 : if (SCALAR_FLOAT_TYPE_P (type)
4991 : : )
4992 : : {
4993 : 14 : {
4994 : 14 : tree x;
4995 : 14 : switch (CFN_BUILT_IN_SQRT)
4996 : : {
4997 : 14 : CASE_CFN_SQRT:
4998 : 14 : x = build_real (type, dconsthalf);
4999 : 14 : break;
5000 : : CASE_CFN_CBRT:
5001 : : x = build_real_truncate (type, dconst_third ());
5002 : : break;
5003 : : default:
5004 : : gcc_unreachable ();
5005 : : }
5006 : 14 : gimple_seq *lseq = seq;
5007 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1367;
5008 : 14 : {
5009 : 14 : res_op->set_op (MULT_EXPR, type, 2);
5010 : 14 : res_op->ops[0] = x;
5011 : 14 : {
5012 : 14 : tree _o1[1], _r1;
5013 : 14 : _o1[0] = captures[0];
5014 : 14 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG, TREE_TYPE (_o1[0]), _o1[0]);
5015 : 14 : tem_op.resimplify (lseq, valueize);
5016 : 14 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5017 : 14 : if (!_r1) goto next_after_fail1367;
5018 : 7 : res_op->ops[1] = _r1;
5019 : : }
5020 : 7 : res_op->resimplify (lseq, valueize);
5021 : 7 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 903, __FILE__, __LINE__, true);
5022 : 7 : return true;
5023 : : }
5024 : : next_after_fail1367:;
5025 : : }
5026 : : }
5027 : : }
5028 : : }
5029 : : }
5030 : : break;
5031 : 12 : case CFN_BUILT_IN_EXP10:
5032 : 12 : if (gimple_call_num_args (_c1) == 1)
5033 : : {
5034 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5035 : 12 : _q20 = do_valueize (valueize, _q20);
5036 : 12 : {
5037 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5038 : 12 : if (flag_unsafe_math_optimizations
5039 : : )
5040 : : {
5041 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
5042 : : )
5043 : : {
5044 : 12 : {
5045 : 12 : tree x;
5046 : 12 : switch (CFN_BUILT_IN_EXP10)
5047 : : {
5048 : : CASE_CFN_EXP:
5049 : : x = build_real_truncate (type, dconst_e ());
5050 : : break;
5051 : : CASE_CFN_EXP2:
5052 : : x = build_real (type, dconst2);
5053 : : break;
5054 : 12 : CASE_CFN_EXP10:
5055 : 12 : CASE_CFN_POW10:
5056 : 12 : {
5057 : 12 : REAL_VALUE_TYPE dconst10;
5058 : 12 : real_from_integer (&dconst10, VOIDmode, 10, SIGNED);
5059 : 12 : x = build_real (type, dconst10);
5060 : : }
5061 : 12 : break;
5062 : : default:
5063 : : gcc_unreachable ();
5064 : : }
5065 : 12 : gimple_seq *lseq = seq;
5066 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1368;
5067 : 12 : {
5068 : 12 : res_op->set_op (MULT_EXPR, type, 2);
5069 : 12 : {
5070 : 12 : tree _o1[1], _r1;
5071 : 12 : _o1[0] = x;
5072 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG, TREE_TYPE (_o1[0]), _o1[0]);
5073 : 12 : tem_op.resimplify (lseq, valueize);
5074 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5075 : 12 : if (!_r1) goto next_after_fail1368;
5076 : 12 : res_op->ops[0] = _r1;
5077 : : }
5078 : 12 : res_op->ops[1] = captures[0];
5079 : 12 : res_op->resimplify (lseq, valueize);
5080 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 904, __FILE__, __LINE__, true);
5081 : 12 : return true;
5082 : : }
5083 : : next_after_fail1368:;
5084 : : }
5085 : : }
5086 : : }
5087 : : }
5088 : : }
5089 : : break;
5090 : 12 : case CFN_BUILT_IN_POW10:
5091 : 12 : if (gimple_call_num_args (_c1) == 1)
5092 : : {
5093 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5094 : 12 : _q20 = do_valueize (valueize, _q20);
5095 : 12 : {
5096 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5097 : 12 : if (flag_unsafe_math_optimizations
5098 : : )
5099 : : {
5100 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
5101 : : )
5102 : : {
5103 : 12 : {
5104 : 12 : tree x;
5105 : 12 : switch (CFN_BUILT_IN_POW10)
5106 : : {
5107 : : CASE_CFN_EXP:
5108 : : x = build_real_truncate (type, dconst_e ());
5109 : : break;
5110 : : CASE_CFN_EXP2:
5111 : : x = build_real (type, dconst2);
5112 : : break;
5113 : 12 : CASE_CFN_EXP10:
5114 : 12 : CASE_CFN_POW10:
5115 : 12 : {
5116 : 12 : REAL_VALUE_TYPE dconst10;
5117 : 12 : real_from_integer (&dconst10, VOIDmode, 10, SIGNED);
5118 : 12 : x = build_real (type, dconst10);
5119 : : }
5120 : 12 : break;
5121 : : default:
5122 : : gcc_unreachable ();
5123 : : }
5124 : 12 : gimple_seq *lseq = seq;
5125 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1369;
5126 : 12 : {
5127 : 12 : res_op->set_op (MULT_EXPR, type, 2);
5128 : 12 : {
5129 : 12 : tree _o1[1], _r1;
5130 : 12 : _o1[0] = x;
5131 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG, TREE_TYPE (_o1[0]), _o1[0]);
5132 : 12 : tem_op.resimplify (lseq, valueize);
5133 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5134 : 12 : if (!_r1) goto next_after_fail1369;
5135 : 12 : res_op->ops[0] = _r1;
5136 : : }
5137 : 12 : res_op->ops[1] = captures[0];
5138 : 12 : res_op->resimplify (lseq, valueize);
5139 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 904, __FILE__, __LINE__, true);
5140 : 12 : return true;
5141 : : }
5142 : : next_after_fail1369:;
5143 : : }
5144 : : }
5145 : : }
5146 : : }
5147 : : }
5148 : : break;
5149 : : default:;
5150 : : }
5151 : : }
5152 : : break;
5153 : : default:;
5154 : : }
5155 : : return false;
5156 : : }
5157 : :
5158 : : bool
5159 : 1359 : gimple_simplify_CFN_BUILT_IN_LOG10L (gimple_match_op *res_op, gimple_seq *seq,
5160 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5161 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5162 : : {
5163 : 1359 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5164 : 1359 : switch (TREE_CODE (_p0))
5165 : : {
5166 : 916 : case SSA_NAME:
5167 : 916 : if (gimple *_d1 = get_def (valueize, _p0))
5168 : : {
5169 : 508 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
5170 : 84 : switch (gimple_call_combined_fn (_c1))
5171 : : {
5172 : 12 : case CFN_BUILT_IN_SQRTL:
5173 : 12 : if (gimple_call_num_args (_c1) == 1)
5174 : : {
5175 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5176 : 12 : _q20 = do_valueize (valueize, _q20);
5177 : 12 : {
5178 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5179 : 12 : if (flag_unsafe_math_optimizations
5180 : : )
5181 : : {
5182 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
5183 : : )
5184 : : {
5185 : 12 : {
5186 : 12 : tree x;
5187 : 12 : switch (CFN_BUILT_IN_SQRTL)
5188 : : {
5189 : 12 : CASE_CFN_SQRT:
5190 : 12 : x = build_real (type, dconsthalf);
5191 : 12 : break;
5192 : : CASE_CFN_CBRT:
5193 : : x = build_real_truncate (type, dconst_third ());
5194 : : break;
5195 : : default:
5196 : : gcc_unreachable ();
5197 : : }
5198 : 12 : gimple_seq *lseq = seq;
5199 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1414;
5200 : 12 : {
5201 : 12 : res_op->set_op (MULT_EXPR, type, 2);
5202 : 12 : res_op->ops[0] = x;
5203 : 12 : {
5204 : 12 : tree _o1[1], _r1;
5205 : 12 : _o1[0] = captures[0];
5206 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG10L, TREE_TYPE (_o1[0]), _o1[0]);
5207 : 12 : tem_op.resimplify (lseq, valueize);
5208 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5209 : 12 : if (!_r1) goto next_after_fail1414;
5210 : 6 : res_op->ops[1] = _r1;
5211 : : }
5212 : 6 : res_op->resimplify (lseq, valueize);
5213 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 903, __FILE__, __LINE__, true);
5214 : 6 : return true;
5215 : : }
5216 : : next_after_fail1414:;
5217 : : }
5218 : : }
5219 : : }
5220 : : }
5221 : : }
5222 : : break;
5223 : 12 : case CFN_BUILT_IN_EXP10L:
5224 : 12 : if (gimple_call_num_args (_c1) == 1)
5225 : : {
5226 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5227 : 12 : _q20 = do_valueize (valueize, _q20);
5228 : 12 : {
5229 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5230 : 12 : if (flag_unsafe_math_optimizations
5231 : : )
5232 : : {
5233 : 12 : gimple_seq *lseq = seq;
5234 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1415;
5235 : 12 : {
5236 : 12 : tree tem;
5237 : 12 : tem = captures[0];
5238 : 12 : res_op->set_value (tem);
5239 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 905, __FILE__, __LINE__, true);
5240 : 12 : return true;
5241 : : }
5242 : 0 : next_after_fail1415:;
5243 : : }
5244 : : }
5245 : : }
5246 : : break;
5247 : 12 : case CFN_BUILT_IN_EXPL:
5248 : 12 : if (gimple_call_num_args (_c1) == 1)
5249 : : {
5250 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5251 : 12 : _q20 = do_valueize (valueize, _q20);
5252 : 12 : {
5253 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5254 : 12 : if (flag_unsafe_math_optimizations
5255 : : )
5256 : : {
5257 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
5258 : : )
5259 : : {
5260 : 12 : {
5261 : 12 : tree x;
5262 : 12 : switch (CFN_BUILT_IN_EXPL)
5263 : : {
5264 : 12 : CASE_CFN_EXP:
5265 : 12 : x = build_real_truncate (type, dconst_e ());
5266 : 12 : break;
5267 : : CASE_CFN_EXP2:
5268 : : x = build_real (type, dconst2);
5269 : : break;
5270 : : CASE_CFN_EXP10:
5271 : : CASE_CFN_POW10:
5272 : : {
5273 : : REAL_VALUE_TYPE dconst10;
5274 : : real_from_integer (&dconst10, VOIDmode, 10, SIGNED);
5275 : : x = build_real (type, dconst10);
5276 : : }
5277 : : break;
5278 : : default:
5279 : : gcc_unreachable ();
5280 : : }
5281 : 12 : gimple_seq *lseq = seq;
5282 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1416;
5283 : 12 : {
5284 : 12 : res_op->set_op (MULT_EXPR, type, 2);
5285 : 12 : {
5286 : 12 : tree _o1[1], _r1;
5287 : 12 : _o1[0] = x;
5288 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG10L, TREE_TYPE (_o1[0]), _o1[0]);
5289 : 12 : tem_op.resimplify (lseq, valueize);
5290 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5291 : 12 : if (!_r1) goto next_after_fail1416;
5292 : 12 : res_op->ops[0] = _r1;
5293 : : }
5294 : 12 : res_op->ops[1] = captures[0];
5295 : 12 : res_op->resimplify (lseq, valueize);
5296 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 904, __FILE__, __LINE__, true);
5297 : 12 : return true;
5298 : : }
5299 : : next_after_fail1416:;
5300 : : }
5301 : : }
5302 : : }
5303 : : }
5304 : : }
5305 : : break;
5306 : 12 : case CFN_BUILT_IN_POWL:
5307 : 12 : if (gimple_call_num_args (_c1) == 2)
5308 : : {
5309 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5310 : 12 : _q20 = do_valueize (valueize, _q20);
5311 : 12 : tree _q21 = gimple_call_arg (_c1, 1);
5312 : 12 : _q21 = do_valueize (valueize, _q21);
5313 : 12 : {
5314 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
5315 : 12 : if (gimple_simplify_599 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LOG10L, CFN_BUILT_IN_POWL))
5316 : 6 : return true;
5317 : : }
5318 : : }
5319 : : break;
5320 : 12 : case CFN_BUILT_IN_POW10L:
5321 : 12 : if (gimple_call_num_args (_c1) == 1)
5322 : : {
5323 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5324 : 12 : _q20 = do_valueize (valueize, _q20);
5325 : 12 : {
5326 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5327 : 12 : if (flag_unsafe_math_optimizations
5328 : : )
5329 : : {
5330 : 12 : gimple_seq *lseq = seq;
5331 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1417;
5332 : 12 : {
5333 : 12 : tree tem;
5334 : 12 : tem = captures[0];
5335 : 12 : res_op->set_value (tem);
5336 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 905, __FILE__, __LINE__, true);
5337 : 12 : return true;
5338 : : }
5339 : 0 : next_after_fail1417:;
5340 : : }
5341 : : }
5342 : : }
5343 : : break;
5344 : 12 : case CFN_BUILT_IN_CBRTL:
5345 : 12 : if (gimple_call_num_args (_c1) == 1)
5346 : : {
5347 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5348 : 12 : _q20 = do_valueize (valueize, _q20);
5349 : 12 : {
5350 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5351 : 12 : if (flag_unsafe_math_optimizations
5352 : : )
5353 : : {
5354 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
5355 : : )
5356 : : {
5357 : 12 : {
5358 : 12 : tree x;
5359 : 12 : switch (CFN_BUILT_IN_CBRTL)
5360 : : {
5361 : : CASE_CFN_SQRT:
5362 : : x = build_real (type, dconsthalf);
5363 : : break;
5364 : 12 : CASE_CFN_CBRT:
5365 : 12 : x = build_real_truncate (type, dconst_third ());
5366 : 12 : break;
5367 : : default:
5368 : : gcc_unreachable ();
5369 : : }
5370 : 12 : gimple_seq *lseq = seq;
5371 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1418;
5372 : 12 : {
5373 : 12 : res_op->set_op (MULT_EXPR, type, 2);
5374 : 12 : res_op->ops[0] = x;
5375 : 12 : {
5376 : 12 : tree _o1[1], _r1;
5377 : 12 : _o1[0] = captures[0];
5378 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG10L, TREE_TYPE (_o1[0]), _o1[0]);
5379 : 12 : tem_op.resimplify (lseq, valueize);
5380 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5381 : 12 : if (!_r1) goto next_after_fail1418;
5382 : 6 : res_op->ops[1] = _r1;
5383 : : }
5384 : 6 : res_op->resimplify (lseq, valueize);
5385 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 903, __FILE__, __LINE__, true);
5386 : 6 : return true;
5387 : : }
5388 : : next_after_fail1418:;
5389 : : }
5390 : : }
5391 : : }
5392 : : }
5393 : : }
5394 : : break;
5395 : 12 : case CFN_BUILT_IN_EXP2L:
5396 : 12 : if (gimple_call_num_args (_c1) == 1)
5397 : : {
5398 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5399 : 12 : _q20 = do_valueize (valueize, _q20);
5400 : 12 : {
5401 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5402 : 12 : if (flag_unsafe_math_optimizations
5403 : : )
5404 : : {
5405 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
5406 : : )
5407 : : {
5408 : 12 : {
5409 : 12 : tree x;
5410 : 12 : switch (CFN_BUILT_IN_EXP2L)
5411 : : {
5412 : : CASE_CFN_EXP:
5413 : : x = build_real_truncate (type, dconst_e ());
5414 : : break;
5415 : 12 : CASE_CFN_EXP2:
5416 : 12 : x = build_real (type, dconst2);
5417 : 12 : break;
5418 : : CASE_CFN_EXP10:
5419 : : CASE_CFN_POW10:
5420 : : {
5421 : : REAL_VALUE_TYPE dconst10;
5422 : : real_from_integer (&dconst10, VOIDmode, 10, SIGNED);
5423 : : x = build_real (type, dconst10);
5424 : : }
5425 : : break;
5426 : : default:
5427 : : gcc_unreachable ();
5428 : : }
5429 : 12 : gimple_seq *lseq = seq;
5430 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1419;
5431 : 12 : {
5432 : 12 : res_op->set_op (MULT_EXPR, type, 2);
5433 : 12 : {
5434 : 12 : tree _o1[1], _r1;
5435 : 12 : _o1[0] = x;
5436 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG10L, TREE_TYPE (_o1[0]), _o1[0]);
5437 : 12 : tem_op.resimplify (lseq, valueize);
5438 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5439 : 12 : if (!_r1) goto next_after_fail1419;
5440 : 12 : res_op->ops[0] = _r1;
5441 : : }
5442 : 12 : res_op->ops[1] = captures[0];
5443 : 12 : res_op->resimplify (lseq, valueize);
5444 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 904, __FILE__, __LINE__, true);
5445 : 12 : return true;
5446 : : }
5447 : : next_after_fail1419:;
5448 : : }
5449 : : }
5450 : : }
5451 : : }
5452 : : }
5453 : : break;
5454 : : default:;
5455 : : }
5456 : : }
5457 : : break;
5458 : : default:;
5459 : : }
5460 : : return false;
5461 : : }
5462 : :
5463 : : bool
5464 : 545 : gimple_simplify_CFN_BUILT_IN_POW10 (gimple_match_op *res_op, gimple_seq *seq,
5465 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5466 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5467 : : {
5468 : 545 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5469 : 545 : switch (TREE_CODE (_p0))
5470 : : {
5471 : 465 : case SSA_NAME:
5472 : 465 : if (gimple *_d1 = get_def (valueize, _p0))
5473 : : {
5474 : 314 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
5475 : 6 : switch (gimple_call_combined_fn (_c1))
5476 : : {
5477 : 6 : case CFN_BUILT_IN_LOG10:
5478 : 6 : if (gimple_call_num_args (_c1) == 1)
5479 : : {
5480 : 6 : tree _q20 = gimple_call_arg (_c1, 0);
5481 : 6 : _q20 = do_valueize (valueize, _q20);
5482 : 6 : {
5483 : 6 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5484 : 6 : if (flag_unsafe_math_optimizations
5485 : : )
5486 : : {
5487 : 6 : gimple_seq *lseq = seq;
5488 : 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1437;
5489 : 6 : {
5490 : 6 : tree tem;
5491 : 6 : tem = captures[0];
5492 : 6 : res_op->set_value (tem);
5493 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 906, __FILE__, __LINE__, true);
5494 : 6 : return true;
5495 : : }
5496 : 0 : next_after_fail1437:;
5497 : : }
5498 : : }
5499 : : }
5500 : : break;
5501 : : default:;
5502 : : }
5503 : : }
5504 : : break;
5505 : : default:;
5506 : : }
5507 : : return false;
5508 : : }
5509 : :
5510 : : bool
5511 : 277 : gimple_simplify_CFN_BUILT_IN_CBRTL (gimple_match_op *res_op, gimple_seq *seq,
5512 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5513 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5514 : : {
5515 : 277 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5516 : 277 : switch (TREE_CODE (_p0))
5517 : : {
5518 : 250 : case SSA_NAME:
5519 : 250 : if (gimple *_d1 = get_def (valueize, _p0))
5520 : : {
5521 : 177 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
5522 : 84 : switch (gimple_call_combined_fn (_c1))
5523 : : {
5524 : 12 : case CFN_BUILT_IN_SQRTL:
5525 : 12 : if (gimple_call_num_args (_c1) == 1)
5526 : : {
5527 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5528 : 12 : _q20 = do_valueize (valueize, _q20);
5529 : 12 : {
5530 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5531 : 12 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
5532 : : )
5533 : : {
5534 : 12 : gimple_seq *lseq = seq;
5535 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1479;
5536 : 12 : {
5537 : 12 : res_op->set_op (CFN_BUILT_IN_POWL, type, 2);
5538 : 12 : res_op->ops[0] = captures[0];
5539 : 12 : res_op->ops[1] = build_real_truncate (type, dconst_sixth ());
5540 : 12 : res_op->resimplify (lseq, valueize);
5541 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 911, __FILE__, __LINE__, true);
5542 : 12 : return true;
5543 : : }
5544 : 0 : next_after_fail1479:;
5545 : : }
5546 : : }
5547 : : }
5548 : : break;
5549 : 12 : case CFN_BUILT_IN_EXP10L:
5550 : 12 : if (gimple_call_num_args (_c1) == 1)
5551 : : {
5552 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5553 : 12 : _q20 = do_valueize (valueize, _q20);
5554 : 12 : {
5555 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5556 : 12 : if (flag_unsafe_math_optimizations
5557 : : )
5558 : : {
5559 : 12 : gimple_seq *lseq = seq;
5560 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1480;
5561 : 12 : {
5562 : 12 : res_op->set_op (CFN_BUILT_IN_EXP10L, type, 1);
5563 : 12 : {
5564 : 12 : tree _o1[2], _r1;
5565 : 12 : _o1[0] = captures[0];
5566 : 12 : _o1[1] = build_real_truncate (type, dconst_third ());
5567 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5568 : 12 : tem_op.resimplify (lseq, valueize);
5569 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5570 : 12 : if (!_r1) goto next_after_fail1480;
5571 : 6 : res_op->ops[0] = _r1;
5572 : : }
5573 : 6 : res_op->resimplify (lseq, valueize);
5574 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 912, __FILE__, __LINE__, true);
5575 : 6 : return true;
5576 : : }
5577 : : next_after_fail1480:;
5578 : : }
5579 : : }
5580 : : }
5581 : : break;
5582 : 12 : case CFN_BUILT_IN_EXPL:
5583 : 12 : if (gimple_call_num_args (_c1) == 1)
5584 : : {
5585 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5586 : 12 : _q20 = do_valueize (valueize, _q20);
5587 : 12 : {
5588 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5589 : 12 : if (flag_unsafe_math_optimizations
5590 : : )
5591 : : {
5592 : 12 : gimple_seq *lseq = seq;
5593 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1481;
5594 : 12 : {
5595 : 12 : res_op->set_op (CFN_BUILT_IN_EXPL, type, 1);
5596 : 12 : {
5597 : 12 : tree _o1[2], _r1;
5598 : 12 : _o1[0] = captures[0];
5599 : 12 : _o1[1] = build_real_truncate (type, dconst_third ());
5600 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5601 : 12 : tem_op.resimplify (lseq, valueize);
5602 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5603 : 12 : if (!_r1) goto next_after_fail1481;
5604 : 6 : res_op->ops[0] = _r1;
5605 : : }
5606 : 6 : res_op->resimplify (lseq, valueize);
5607 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 912, __FILE__, __LINE__, true);
5608 : 6 : return true;
5609 : : }
5610 : : next_after_fail1481:;
5611 : : }
5612 : : }
5613 : : }
5614 : : break;
5615 : 12 : case CFN_BUILT_IN_POWL:
5616 : 12 : if (gimple_call_num_args (_c1) == 2)
5617 : : {
5618 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5619 : 12 : _q20 = do_valueize (valueize, _q20);
5620 : 12 : tree _q21 = gimple_call_arg (_c1, 1);
5621 : 12 : _q21 = do_valueize (valueize, _q21);
5622 : 12 : if (tree_expr_nonnegative_p (_q20))
5623 : : {
5624 : 12 : {
5625 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
5626 : 12 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
5627 : : )
5628 : : {
5629 : 12 : gimple_seq *lseq = seq;
5630 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1482;
5631 : 12 : {
5632 : 12 : res_op->set_op (CFN_BUILT_IN_POWL, type, 2);
5633 : 12 : res_op->ops[0] = captures[0];
5634 : 12 : {
5635 : 12 : tree _o1[2], _r1;
5636 : 12 : _o1[0] = captures[1];
5637 : 12 : _o1[1] = build_real_truncate (type, dconst_third ());
5638 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5639 : 12 : tem_op.resimplify (lseq, valueize);
5640 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5641 : 12 : if (!_r1) goto next_after_fail1482;
5642 : 6 : res_op->ops[1] = _r1;
5643 : : }
5644 : 6 : res_op->resimplify (lseq, valueize);
5645 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 913, __FILE__, __LINE__, true);
5646 : 6 : return true;
5647 : : }
5648 : 6 : next_after_fail1482:;
5649 : : }
5650 : : }
5651 : : }
5652 : : }
5653 : : break;
5654 : 12 : case CFN_BUILT_IN_POW10L:
5655 : 12 : if (gimple_call_num_args (_c1) == 1)
5656 : : {
5657 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5658 : 12 : _q20 = do_valueize (valueize, _q20);
5659 : 12 : {
5660 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5661 : 12 : if (flag_unsafe_math_optimizations
5662 : : )
5663 : : {
5664 : 12 : gimple_seq *lseq = seq;
5665 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1483;
5666 : 12 : {
5667 : 12 : res_op->set_op (CFN_BUILT_IN_POW10L, type, 1);
5668 : 12 : {
5669 : 12 : tree _o1[2], _r1;
5670 : 12 : _o1[0] = captures[0];
5671 : 12 : _o1[1] = build_real_truncate (type, dconst_third ());
5672 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5673 : 12 : tem_op.resimplify (lseq, valueize);
5674 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5675 : 12 : if (!_r1) goto next_after_fail1483;
5676 : 6 : res_op->ops[0] = _r1;
5677 : : }
5678 : 6 : res_op->resimplify (lseq, valueize);
5679 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 912, __FILE__, __LINE__, true);
5680 : 6 : return true;
5681 : : }
5682 : : next_after_fail1483:;
5683 : : }
5684 : : }
5685 : : }
5686 : : break;
5687 : 12 : case CFN_BUILT_IN_CBRTL:
5688 : 12 : if (gimple_call_num_args (_c1) == 1)
5689 : : {
5690 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5691 : 12 : _q20 = do_valueize (valueize, _q20);
5692 : 12 : if (tree_expr_nonnegative_p (_q20))
5693 : : {
5694 : 12 : {
5695 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5696 : 12 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
5697 : : )
5698 : : {
5699 : 12 : gimple_seq *lseq = seq;
5700 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1484;
5701 : 12 : {
5702 : 12 : res_op->set_op (CFN_BUILT_IN_POWL, type, 2);
5703 : 12 : res_op->ops[0] = captures[0];
5704 : 12 : res_op->ops[1] = build_real_truncate (type, dconst_ninth ());
5705 : 12 : res_op->resimplify (lseq, valueize);
5706 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 914, __FILE__, __LINE__, true);
5707 : 12 : return true;
5708 : : }
5709 : 0 : next_after_fail1484:;
5710 : : }
5711 : : }
5712 : : }
5713 : : }
5714 : : break;
5715 : 12 : case CFN_BUILT_IN_EXP2L:
5716 : 12 : if (gimple_call_num_args (_c1) == 1)
5717 : : {
5718 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
5719 : 12 : _q20 = do_valueize (valueize, _q20);
5720 : 12 : {
5721 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5722 : 12 : if (flag_unsafe_math_optimizations
5723 : : )
5724 : : {
5725 : 12 : gimple_seq *lseq = seq;
5726 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1485;
5727 : 12 : {
5728 : 12 : res_op->set_op (CFN_BUILT_IN_EXP2L, type, 1);
5729 : 12 : {
5730 : 12 : tree _o1[2], _r1;
5731 : 12 : _o1[0] = captures[0];
5732 : 12 : _o1[1] = build_real_truncate (type, dconst_third ());
5733 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5734 : 12 : tem_op.resimplify (lseq, valueize);
5735 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5736 : 12 : if (!_r1) goto next_after_fail1485;
5737 : 6 : res_op->ops[0] = _r1;
5738 : : }
5739 : 6 : res_op->resimplify (lseq, valueize);
5740 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 912, __FILE__, __LINE__, true);
5741 : 6 : return true;
5742 : : }
5743 : : next_after_fail1485:;
5744 : : }
5745 : : }
5746 : : }
5747 : : break;
5748 : : default:;
5749 : : }
5750 : : }
5751 : : break;
5752 : : default:;
5753 : : }
5754 : : return false;
5755 : : }
5756 : :
5757 : : bool
5758 : 44 : gimple_simplify_CFN_BUILT_IN_TRUNCF128 (gimple_match_op *res_op, gimple_seq *seq,
5759 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5760 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5761 : : {
5762 : 44 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5763 : 44 : switch (TREE_CODE (_p0))
5764 : : {
5765 : 42 : case SSA_NAME:
5766 : 42 : if (gimple *_d1 = get_def (valueize, _p0))
5767 : : {
5768 : 28 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
5769 : 0 : switch (gimple_call_combined_fn (_c1))
5770 : : {
5771 : 0 : case CFN_BUILT_IN_TRUNCF128:
5772 : 0 : if (gimple_call_num_args (_c1) == 1)
5773 : : {
5774 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
5775 : 0 : _q20 = do_valueize (valueize, _q20);
5776 : 0 : {
5777 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5778 : 0 : if (gimple_simplify_603 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_TRUNCF128))
5779 : 0 : return true;
5780 : : }
5781 : : }
5782 : : break;
5783 : : default:;
5784 : : }
5785 : : }
5786 : : break;
5787 : 44 : default:;
5788 : : }
5789 : 44 : if (integer_valued_real_p (_p0))
5790 : : {
5791 : 0 : {
5792 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
5793 : 0 : if (gimple_simplify_604 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_TRUNCF128))
5794 : 0 : return true;
5795 : : }
5796 : : }
5797 : : return false;
5798 : : }
5799 : :
5800 : : bool
5801 : 154 : gimple_simplify_CFN_BUILT_IN_FLOORF16 (gimple_match_op *res_op, gimple_seq *seq,
5802 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5803 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5804 : : {
5805 : 154 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5806 : 154 : switch (TREE_CODE (_p0))
5807 : : {
5808 : 152 : case SSA_NAME:
5809 : 152 : if (gimple *_d1 = get_def (valueize, _p0))
5810 : : {
5811 : 100 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
5812 : 0 : switch (gimple_call_combined_fn (_c1))
5813 : : {
5814 : 0 : case CFN_BUILT_IN_FLOORF16:
5815 : 0 : if (gimple_call_num_args (_c1) == 1)
5816 : : {
5817 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
5818 : 0 : _q20 = do_valueize (valueize, _q20);
5819 : 0 : {
5820 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5821 : 0 : if (gimple_simplify_603 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FLOORF16))
5822 : 0 : return true;
5823 : : }
5824 : : }
5825 : : break;
5826 : : default:;
5827 : : }
5828 : : }
5829 : : break;
5830 : 154 : default:;
5831 : : }
5832 : 154 : if (integer_valued_real_p (_p0))
5833 : : {
5834 : 0 : {
5835 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
5836 : 0 : if (gimple_simplify_604 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FLOORF16))
5837 : 0 : return true;
5838 : : }
5839 : : }
5840 : 154 : if (tree_expr_nonnegative_p (_p0))
5841 : : {
5842 : 0 : {
5843 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
5844 : 0 : if (gimple_simplify_607 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FLOORF16, CFN_BUILT_IN_TRUNCF16))
5845 : 0 : return true;
5846 : : }
5847 : : }
5848 : : return false;
5849 : : }
5850 : :
5851 : : bool
5852 : 217 : gimple_simplify_CFN_FLOOR (gimple_match_op *res_op, gimple_seq *seq,
5853 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5854 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5855 : : {
5856 : 217 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5857 : 217 : switch (TREE_CODE (_p0))
5858 : : {
5859 : 217 : case SSA_NAME:
5860 : 217 : if (gimple *_d1 = get_def (valueize, _p0))
5861 : : {
5862 : 126 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
5863 : 0 : switch (gimple_call_combined_fn (_c1))
5864 : : {
5865 : 0 : case CFN_FLOOR:
5866 : 0 : if (gimple_call_num_args (_c1) == 1)
5867 : : {
5868 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
5869 : 0 : _q20 = do_valueize (valueize, _q20);
5870 : 0 : {
5871 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5872 : 0 : if (gimple_simplify_603 (res_op, seq, valueize, type, captures, CFN_FLOOR))
5873 : 0 : return true;
5874 : : }
5875 : : }
5876 : : break;
5877 : : default:;
5878 : : }
5879 : : }
5880 : : break;
5881 : 217 : default:;
5882 : : }
5883 : 217 : if (integer_valued_real_p (_p0))
5884 : : {
5885 : 0 : {
5886 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
5887 : 0 : if (gimple_simplify_604 (res_op, seq, valueize, type, captures, CFN_FLOOR))
5888 : 0 : return true;
5889 : : }
5890 : : }
5891 : 217 : if (tree_expr_nonnegative_p (_p0))
5892 : : {
5893 : 0 : {
5894 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
5895 : 0 : if (gimple_simplify_607 (res_op, seq, valueize, type, captures, CFN_FLOOR, CFN_TRUNC))
5896 : 0 : return true;
5897 : : }
5898 : : }
5899 : : return false;
5900 : : }
5901 : :
5902 : : bool
5903 : 0 : gimple_simplify_CFN_BUILT_IN_CEILF128X (gimple_match_op *res_op, gimple_seq *seq,
5904 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5905 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5906 : : {
5907 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5908 : 0 : switch (TREE_CODE (_p0))
5909 : : {
5910 : 0 : case SSA_NAME:
5911 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
5912 : : {
5913 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
5914 : 0 : switch (gimple_call_combined_fn (_c1))
5915 : : {
5916 : 0 : case CFN_BUILT_IN_CEILF128X:
5917 : 0 : if (gimple_call_num_args (_c1) == 1)
5918 : : {
5919 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
5920 : 0 : _q20 = do_valueize (valueize, _q20);
5921 : 0 : {
5922 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5923 : 0 : if (gimple_simplify_603 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CEILF128X))
5924 : 0 : return true;
5925 : : }
5926 : : }
5927 : : break;
5928 : : default:;
5929 : : }
5930 : : }
5931 : : break;
5932 : 0 : default:;
5933 : : }
5934 : 0 : if (integer_valued_real_p (_p0))
5935 : : {
5936 : 0 : {
5937 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
5938 : 0 : if (gimple_simplify_604 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CEILF128X))
5939 : 0 : return true;
5940 : : }
5941 : : }
5942 : : return false;
5943 : : }
5944 : :
5945 : : bool
5946 : 0 : gimple_simplify_CFN_BUILT_IN_ROUNDF32X (gimple_match_op *res_op, gimple_seq *seq,
5947 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5948 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5949 : : {
5950 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5951 : 0 : switch (TREE_CODE (_p0))
5952 : : {
5953 : 0 : case SSA_NAME:
5954 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
5955 : : {
5956 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
5957 : 0 : switch (gimple_call_combined_fn (_c1))
5958 : : {
5959 : 0 : case CFN_BUILT_IN_ROUNDF32X:
5960 : 0 : if (gimple_call_num_args (_c1) == 1)
5961 : : {
5962 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
5963 : 0 : _q20 = do_valueize (valueize, _q20);
5964 : 0 : {
5965 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
5966 : 0 : if (gimple_simplify_603 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_ROUNDF32X))
5967 : 0 : return true;
5968 : : }
5969 : : }
5970 : : break;
5971 : : default:;
5972 : : }
5973 : : }
5974 : : break;
5975 : 0 : default:;
5976 : : }
5977 : 0 : if (integer_valued_real_p (_p0))
5978 : : {
5979 : 0 : {
5980 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
5981 : 0 : if (gimple_simplify_604 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_ROUNDF32X))
5982 : 0 : return true;
5983 : : }
5984 : : }
5985 : : return false;
5986 : : }
5987 : :
5988 : : bool
5989 : 0 : gimple_simplify_CFN_BUILT_IN_NEARBYINTF32 (gimple_match_op *res_op, gimple_seq *seq,
5990 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5991 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
5992 : : {
5993 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5994 : 0 : switch (TREE_CODE (_p0))
5995 : : {
5996 : 0 : case SSA_NAME:
5997 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
5998 : : {
5999 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
6000 : 0 : switch (gimple_call_combined_fn (_c1))
6001 : : {
6002 : 0 : case CFN_BUILT_IN_NEARBYINTF32:
6003 : 0 : if (gimple_call_num_args (_c1) == 1)
6004 : : {
6005 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
6006 : 0 : _q20 = do_valueize (valueize, _q20);
6007 : 0 : {
6008 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6009 : 0 : if (gimple_simplify_603 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_NEARBYINTF32))
6010 : 0 : return true;
6011 : : }
6012 : : }
6013 : : break;
6014 : : default:;
6015 : : }
6016 : : }
6017 : : break;
6018 : 0 : default:;
6019 : : }
6020 : 0 : if (integer_valued_real_p (_p0))
6021 : : {
6022 : 0 : {
6023 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6024 : 0 : if (gimple_simplify_604 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_NEARBYINTF32))
6025 : 0 : return true;
6026 : : }
6027 : : }
6028 : : return false;
6029 : : }
6030 : :
6031 : : bool
6032 : 1820 : gimple_simplify_CFN_BUILT_IN_RINTF (gimple_match_op *res_op, gimple_seq *seq,
6033 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6034 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6035 : : {
6036 : 1820 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6037 : 1820 : switch (TREE_CODE (_p0))
6038 : : {
6039 : 1276 : case SSA_NAME:
6040 : 1276 : if (gimple *_d1 = get_def (valueize, _p0))
6041 : : {
6042 : 813 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
6043 : 0 : switch (gimple_call_combined_fn (_c1))
6044 : : {
6045 : 0 : case CFN_BUILT_IN_RINTF:
6046 : 0 : if (gimple_call_num_args (_c1) == 1)
6047 : : {
6048 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
6049 : 0 : _q20 = do_valueize (valueize, _q20);
6050 : 0 : {
6051 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6052 : 0 : if (gimple_simplify_603 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_RINTF))
6053 : 0 : return true;
6054 : : }
6055 : : }
6056 : : break;
6057 : : default:;
6058 : : }
6059 : : }
6060 : : break;
6061 : 1820 : default:;
6062 : : }
6063 : 1820 : if (integer_valued_real_p (_p0))
6064 : : {
6065 : 27 : {
6066 : 27 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6067 : 27 : if (gimple_simplify_604 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_RINTF))
6068 : 27 : return true;
6069 : : }
6070 : : }
6071 : : return false;
6072 : : }
6073 : :
6074 : : bool
6075 : 0 : gimple_simplify_CFN_BUILT_IN_RINTF128X (gimple_match_op *res_op, gimple_seq *seq,
6076 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6077 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6078 : : {
6079 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6080 : 0 : switch (TREE_CODE (_p0))
6081 : : {
6082 : 0 : case SSA_NAME:
6083 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
6084 : : {
6085 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
6086 : 0 : switch (gimple_call_combined_fn (_c1))
6087 : : {
6088 : 0 : case CFN_BUILT_IN_RINTF128X:
6089 : 0 : if (gimple_call_num_args (_c1) == 1)
6090 : : {
6091 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
6092 : 0 : _q20 = do_valueize (valueize, _q20);
6093 : 0 : {
6094 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6095 : 0 : if (gimple_simplify_603 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_RINTF128X))
6096 : 0 : return true;
6097 : : }
6098 : : }
6099 : : break;
6100 : : default:;
6101 : : }
6102 : : }
6103 : : break;
6104 : 0 : default:;
6105 : : }
6106 : 0 : if (integer_valued_real_p (_p0))
6107 : : {
6108 : 0 : {
6109 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6110 : 0 : if (gimple_simplify_604 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_RINTF128X))
6111 : 0 : return true;
6112 : : }
6113 : : }
6114 : : return false;
6115 : : }
6116 : :
6117 : : bool
6118 : 1147 : gimple_simplify_CFN_BUILT_IN_LCEILL (gimple_match_op *res_op, gimple_seq *seq,
6119 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6120 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6121 : : {
6122 : 1147 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6123 : 1147 : switch (TREE_CODE (_p0))
6124 : : {
6125 : 1081 : case SSA_NAME:
6126 : 1081 : if (gimple *_d1 = get_def (valueize, _p0))
6127 : : {
6128 : 686 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
6129 : 366 : switch (gimple_assign_rhs_code (_a1))
6130 : : {
6131 : 336 : CASE_CONVERT:
6132 : 336 : {
6133 : 336 : tree _q20 = gimple_assign_rhs1 (_a1);
6134 : 336 : _q20 = do_valueize (valueize, _q20);
6135 : 336 : if (gimple_double_value_p (_q20, valueize))
6136 : : {
6137 : 120 : {
6138 : 120 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6139 : 120 : if (gimple_simplify_610 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LCEILL, CFN_BUILT_IN_LCEIL))
6140 : 120 : return true;
6141 : : }
6142 : : }
6143 : 216 : if (gimple_float_value_p (_q20, valueize))
6144 : : {
6145 : 216 : {
6146 : 216 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6147 : 216 : if (gimple_simplify_611 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LCEILL, CFN_BUILT_IN_LCEILF))
6148 : 216 : return true;
6149 : : }
6150 : : }
6151 : : break;
6152 : : }
6153 : : default:;
6154 : : }
6155 : : }
6156 : : break;
6157 : 811 : default:;
6158 : : }
6159 : 811 : if (integer_valued_real_p (_p0))
6160 : : {
6161 : 20 : {
6162 : 20 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6163 : 20 : if (gimple_simplify_613 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LCEILL))
6164 : 20 : return true;
6165 : : }
6166 : : }
6167 : : return false;
6168 : : }
6169 : :
6170 : : bool
6171 : 253 : gimple_simplify_CFN_BUILT_IN_LLROUNDL (gimple_match_op *res_op, gimple_seq *seq,
6172 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6173 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6174 : : {
6175 : 253 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6176 : 253 : switch (TREE_CODE (_p0))
6177 : : {
6178 : 219 : case SSA_NAME:
6179 : 219 : if (gimple *_d1 = get_def (valueize, _p0))
6180 : : {
6181 : 83 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
6182 : 0 : switch (gimple_assign_rhs_code (_a1))
6183 : : {
6184 : 0 : CASE_CONVERT:
6185 : 0 : {
6186 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
6187 : 0 : _q20 = do_valueize (valueize, _q20);
6188 : 0 : if (gimple_double_value_p (_q20, valueize))
6189 : : {
6190 : 0 : {
6191 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6192 : 0 : if (gimple_simplify_610 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLROUNDL, CFN_BUILT_IN_LLROUND))
6193 : 0 : return true;
6194 : : }
6195 : : }
6196 : 0 : if (gimple_float_value_p (_q20, valueize))
6197 : : {
6198 : 0 : {
6199 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6200 : 0 : if (gimple_simplify_611 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLROUNDL, CFN_BUILT_IN_LLROUNDF))
6201 : 0 : return true;
6202 : : }
6203 : : }
6204 : : break;
6205 : : }
6206 : : default:;
6207 : : }
6208 : : }
6209 : : break;
6210 : 253 : default:;
6211 : : }
6212 : 253 : if (integer_valued_real_p (_p0))
6213 : : {
6214 : 21 : {
6215 : 21 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6216 : 21 : if (gimple_simplify_613 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLROUNDL))
6217 : 21 : return true;
6218 : : }
6219 : : }
6220 : 232 : {
6221 : 232 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6222 : 232 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IROUNDL, CFN_BUILT_IN_LROUNDL, CFN_BUILT_IN_LLROUNDL))
6223 : 190 : return true;
6224 : : }
6225 : 42 : return false;
6226 : : }
6227 : :
6228 : : bool
6229 : 504 : gimple_simplify_CFN_BUILT_IN_IROUND (gimple_match_op *res_op, gimple_seq *seq,
6230 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6231 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6232 : : {
6233 : 504 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6234 : 504 : switch (TREE_CODE (_p0))
6235 : : {
6236 : 483 : case SSA_NAME:
6237 : 483 : if (gimple *_d1 = get_def (valueize, _p0))
6238 : : {
6239 : 256 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
6240 : 402 : switch (gimple_assign_rhs_code (_a1))
6241 : : {
6242 : 0 : CASE_CONVERT:
6243 : 0 : {
6244 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
6245 : 0 : _q20 = do_valueize (valueize, _q20);
6246 : 0 : if (gimple_float_value_p (_q20, valueize))
6247 : : {
6248 : 0 : {
6249 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6250 : 0 : if (gimple_simplify_611 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IROUND, CFN_BUILT_IN_IROUNDF))
6251 : 0 : return true;
6252 : : }
6253 : : }
6254 : : break;
6255 : : }
6256 : : default:;
6257 : : }
6258 : : }
6259 : : break;
6260 : 504 : default:;
6261 : : }
6262 : 504 : if (integer_valued_real_p (_p0))
6263 : : {
6264 : 0 : {
6265 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6266 : 0 : if (gimple_simplify_613 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IROUND))
6267 : 0 : return true;
6268 : : }
6269 : : }
6270 : 504 : {
6271 : 504 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6272 : 504 : if (gimple_simplify_614 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IROUND, CFN_BUILT_IN_LROUND, CFN_BUILT_IN_LLROUND))
6273 : 4 : return true;
6274 : : }
6275 : 500 : return false;
6276 : : }
6277 : :
6278 : : bool
6279 : 142 : gimple_simplify_CFN_BUILT_IN_LLFLOORF (gimple_match_op *res_op, gimple_seq *seq,
6280 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6281 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6282 : : {
6283 : 142 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6284 : 142 : if (tree_expr_nonnegative_p (_p0))
6285 : : {
6286 : 6 : {
6287 : 6 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6288 : 6 : if (gimple_simplify_612 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLFLOORF))
6289 : 6 : return true;
6290 : : }
6291 : : }
6292 : 136 : if (integer_valued_real_p (_p0))
6293 : : {
6294 : 20 : {
6295 : 20 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6296 : 20 : if (gimple_simplify_613 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLFLOORF))
6297 : 20 : return true;
6298 : : }
6299 : : }
6300 : 116 : {
6301 : 116 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6302 : 116 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IFLOORF, CFN_BUILT_IN_LFLOORF, CFN_BUILT_IN_LLFLOORF))
6303 : 116 : return true;
6304 : : }
6305 : 0 : return false;
6306 : : }
6307 : :
6308 : : bool
6309 : 0 : gimple_simplify_CFN_LLCEIL (gimple_match_op *res_op, gimple_seq *seq,
6310 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6311 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6312 : : {
6313 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6314 : 0 : if (integer_valued_real_p (_p0))
6315 : : {
6316 : 0 : {
6317 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6318 : 0 : if (gimple_simplify_613 (res_op, seq, valueize, type, captures, CFN_LLCEIL))
6319 : 0 : return true;
6320 : : }
6321 : : }
6322 : 0 : {
6323 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6324 : 0 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, CFN_ICEIL, CFN_LCEIL, CFN_LLCEIL))
6325 : 0 : return true;
6326 : : }
6327 : 0 : return false;
6328 : : }
6329 : :
6330 : : bool
6331 : 2519 : gimple_simplify_CFN_BUILT_IN_LRINTF (gimple_match_op *res_op, gimple_seq *seq,
6332 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6333 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6334 : : {
6335 : 2519 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6336 : 2519 : if (integer_valued_real_p (_p0))
6337 : : {
6338 : 42 : {
6339 : 42 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6340 : 42 : if (gimple_simplify_616 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LRINTF))
6341 : 20 : return true;
6342 : : }
6343 : : }
6344 : : return false;
6345 : : }
6346 : :
6347 : : bool
6348 : 38042 : gimple_simplify_CFN_BUILT_IN_SIGNBIT (gimple_match_op *res_op, gimple_seq *seq,
6349 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6350 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6351 : : {
6352 : 38042 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6353 : 38042 : if (tree_expr_nonnegative_p (_p0))
6354 : : {
6355 : 418 : {
6356 : 418 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6357 : 418 : if (gimple_simplify_617 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SIGNBIT))
6358 : 418 : return true;
6359 : : }
6360 : : }
6361 : 37624 : {
6362 : 37624 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6363 : 37624 : if (gimple_simplify_618 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SIGNBIT))
6364 : 8 : return true;
6365 : : }
6366 : 37616 : return false;
6367 : : }
6368 : :
6369 : : bool
6370 : 156 : gimple_simplify_CFN_BUILT_IN_CTZIMAX (gimple_match_op *res_op, gimple_seq *seq,
6371 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6372 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6373 : : {
6374 : 156 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6375 : 156 : switch (TREE_CODE (_p0))
6376 : : {
6377 : 145 : case SSA_NAME:
6378 : 145 : if (gimple *_d1 = get_def (valueize, _p0))
6379 : : {
6380 : 54 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
6381 : 0 : switch (gimple_assign_rhs_code (_a1))
6382 : : {
6383 : 0 : CASE_CONVERT:
6384 : 0 : {
6385 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
6386 : 0 : _q20 = do_valueize (valueize, _q20);
6387 : 0 : {
6388 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
6389 : 0 : if (gimple_simplify_628 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CTZIMAX))
6390 : 0 : return true;
6391 : : }
6392 : 0 : break;
6393 : : }
6394 : : default:;
6395 : : }
6396 : : }
6397 : : break;
6398 : : default:;
6399 : : }
6400 : : return false;
6401 : : }
6402 : :
6403 : : bool
6404 : 751 : gimple_simplify_CFN_POPCOUNT (gimple_match_op *res_op, gimple_seq *seq,
6405 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6406 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6407 : : {
6408 : 751 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6409 : 751 : switch (TREE_CODE (_p0))
6410 : : {
6411 : 741 : case SSA_NAME:
6412 : 741 : if (gimple *_d1 = get_def (valueize, _p0))
6413 : : {
6414 : 414 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
6415 : 552 : switch (gimple_assign_rhs_code (_a1))
6416 : : {
6417 : 2 : CASE_CONVERT:
6418 : 2 : {
6419 : 2 : tree _q20 = gimple_assign_rhs1 (_a1);
6420 : 2 : _q20 = do_valueize (valueize, _q20);
6421 : 2 : switch (TREE_CODE (_q20))
6422 : : {
6423 : 2 : case SSA_NAME:
6424 : 2 : if (gimple *_d2 = get_def (valueize, _q20))
6425 : : {
6426 : 2 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
6427 : 0 : switch (gimple_assign_rhs_code (_a2))
6428 : : {
6429 : 0 : case LROTATE_EXPR:
6430 : 0 : {
6431 : 0 : tree _q30 = gimple_assign_rhs1 (_a2);
6432 : 0 : _q30 = do_valueize (valueize, _q30);
6433 : 0 : tree _q31 = gimple_assign_rhs2 (_a2);
6434 : 0 : _q31 = do_valueize (valueize, _q31);
6435 : 0 : {
6436 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31 };
6437 : 0 : if (gimple_simplify_630 (res_op, seq, valueize, type, captures, LROTATE_EXPR, CFN_POPCOUNT))
6438 : 0 : return true;
6439 : : }
6440 : 0 : break;
6441 : : }
6442 : 0 : case RROTATE_EXPR:
6443 : 0 : {
6444 : 0 : tree _q30 = gimple_assign_rhs1 (_a2);
6445 : 0 : _q30 = do_valueize (valueize, _q30);
6446 : 0 : tree _q31 = gimple_assign_rhs2 (_a2);
6447 : 0 : _q31 = do_valueize (valueize, _q31);
6448 : 0 : {
6449 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31 };
6450 : 0 : if (gimple_simplify_630 (res_op, seq, valueize, type, captures, RROTATE_EXPR, CFN_POPCOUNT))
6451 : 0 : return true;
6452 : : }
6453 : 0 : break;
6454 : : }
6455 : : default:;
6456 : : }
6457 : 2 : else if (gcall *_c2 = dyn_cast <gcall *> (_d2))
6458 : 0 : switch (gimple_call_combined_fn (_c2))
6459 : : {
6460 : 0 : case CFN_BUILT_IN_BSWAP128:
6461 : 0 : if (gimple_call_num_args (_c2) == 1)
6462 : : {
6463 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
6464 : 0 : _q30 = do_valueize (valueize, _q30);
6465 : 0 : {
6466 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q30 };
6467 : 0 : if (gimple_simplify_629 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP128, CFN_POPCOUNT))
6468 : 0 : return true;
6469 : : }
6470 : : }
6471 : : break;
6472 : 0 : case CFN_BUILT_IN_BSWAP16:
6473 : 0 : if (gimple_call_num_args (_c2) == 1)
6474 : : {
6475 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
6476 : 0 : _q30 = do_valueize (valueize, _q30);
6477 : 0 : {
6478 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q30 };
6479 : 0 : if (gimple_simplify_629 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP16, CFN_POPCOUNT))
6480 : 0 : return true;
6481 : : }
6482 : : }
6483 : : break;
6484 : 0 : case CFN_BUILT_IN_BSWAP32:
6485 : 0 : if (gimple_call_num_args (_c2) == 1)
6486 : : {
6487 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
6488 : 0 : _q30 = do_valueize (valueize, _q30);
6489 : 0 : {
6490 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q30 };
6491 : 0 : if (gimple_simplify_629 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP32, CFN_POPCOUNT))
6492 : 0 : return true;
6493 : : }
6494 : : }
6495 : : break;
6496 : 0 : case CFN_BUILT_IN_BSWAP64:
6497 : 0 : if (gimple_call_num_args (_c2) == 1)
6498 : : {
6499 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
6500 : 0 : _q30 = do_valueize (valueize, _q30);
6501 : 0 : {
6502 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q30 };
6503 : 0 : if (gimple_simplify_629 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP64, CFN_POPCOUNT))
6504 : 0 : return true;
6505 : : }
6506 : : }
6507 : : break;
6508 : : default:;
6509 : : }
6510 : : }
6511 : : break;
6512 : 2 : default:;
6513 : : }
6514 : 2 : {
6515 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
6516 : 2 : if (gimple_simplify_631 (res_op, seq, valueize, type, captures, CFN_POPCOUNT))
6517 : 2 : return true;
6518 : : }
6519 : 0 : break;
6520 : : }
6521 : 0 : case LROTATE_EXPR:
6522 : 0 : {
6523 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
6524 : 0 : _q20 = do_valueize (valueize, _q20);
6525 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
6526 : 0 : _q21 = do_valueize (valueize, _q21);
6527 : 0 : {
6528 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21 };
6529 : 0 : if (gimple_simplify_633 (res_op, seq, valueize, type, captures, LROTATE_EXPR, CFN_POPCOUNT))
6530 : 0 : return true;
6531 : : }
6532 : 0 : break;
6533 : : }
6534 : 0 : case RROTATE_EXPR:
6535 : 0 : {
6536 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
6537 : 0 : _q20 = do_valueize (valueize, _q20);
6538 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
6539 : 0 : _q21 = do_valueize (valueize, _q21);
6540 : 0 : {
6541 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21 };
6542 : 0 : if (gimple_simplify_633 (res_op, seq, valueize, type, captures, RROTATE_EXPR, CFN_POPCOUNT))
6543 : 0 : return true;
6544 : : }
6545 : 0 : break;
6546 : : }
6547 : : default:;
6548 : : }
6549 : 85 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
6550 : 0 : switch (gimple_call_combined_fn (_c1))
6551 : : {
6552 : 0 : case CFN_BUILT_IN_BSWAP128:
6553 : 0 : if (gimple_call_num_args (_c1) == 1)
6554 : : {
6555 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
6556 : 0 : _q20 = do_valueize (valueize, _q20);
6557 : 0 : {
6558 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q20 };
6559 : 0 : if (gimple_simplify_632 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP128, CFN_POPCOUNT))
6560 : 0 : return true;
6561 : : }
6562 : : }
6563 : : break;
6564 : 0 : case CFN_BUILT_IN_BSWAP16:
6565 : 0 : if (gimple_call_num_args (_c1) == 1)
6566 : : {
6567 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
6568 : 0 : _q20 = do_valueize (valueize, _q20);
6569 : 0 : {
6570 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q20 };
6571 : 0 : if (gimple_simplify_632 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP16, CFN_POPCOUNT))
6572 : 0 : return true;
6573 : : }
6574 : : }
6575 : : break;
6576 : 0 : case CFN_BUILT_IN_BSWAP32:
6577 : 0 : if (gimple_call_num_args (_c1) == 1)
6578 : : {
6579 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
6580 : 0 : _q20 = do_valueize (valueize, _q20);
6581 : 0 : {
6582 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q20 };
6583 : 0 : if (gimple_simplify_632 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP32, CFN_POPCOUNT))
6584 : 0 : return true;
6585 : : }
6586 : : }
6587 : : break;
6588 : 0 : case CFN_BUILT_IN_BSWAP64:
6589 : 0 : if (gimple_call_num_args (_c1) == 1)
6590 : : {
6591 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
6592 : 0 : _q20 = do_valueize (valueize, _q20);
6593 : 0 : {
6594 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q20 };
6595 : 0 : if (gimple_simplify_632 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP64, CFN_POPCOUNT))
6596 : 0 : return true;
6597 : : }
6598 : : }
6599 : : break;
6600 : : default:;
6601 : : }
6602 : : }
6603 : : break;
6604 : 749 : default:;
6605 : : }
6606 : 749 : {
6607 : 749 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6608 : 749 : if (gimple_simplify_634 (res_op, seq, valueize, type, captures, CFN_POPCOUNT))
6609 : 0 : return true;
6610 : : }
6611 : 749 : return false;
6612 : : }
6613 : :
6614 : : bool
6615 : 453 : gimple_simplify_CFN_BUILT_IN_FFSLL (gimple_match_op *res_op, gimple_seq *seq,
6616 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6617 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6618 : : {
6619 : 453 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6620 : 453 : switch (TREE_CODE (_p0))
6621 : : {
6622 : 450 : case SSA_NAME:
6623 : 450 : if (gimple *_d1 = get_def (valueize, _p0))
6624 : : {
6625 : 203 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
6626 : 247 : switch (gimple_assign_rhs_code (_a1))
6627 : : {
6628 : 143 : CASE_CONVERT:
6629 : 143 : {
6630 : 143 : tree _q20 = gimple_assign_rhs1 (_a1);
6631 : 143 : _q20 = do_valueize (valueize, _q20);
6632 : 143 : {
6633 : 143 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
6634 : 143 : if (gimple_simplify_642 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FFSLL))
6635 : 9 : return true;
6636 : : }
6637 : 134 : break;
6638 : : }
6639 : : default:;
6640 : : }
6641 : : }
6642 : : break;
6643 : 444 : default:;
6644 : : }
6645 : 444 : if (tree_expr_nonzero_p (_p0))
6646 : : {
6647 : 6 : {
6648 : 6 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
6649 : 6 : if (gimple_simplify_641 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FFSLL, CFN_BUILT_IN_CTZLL))
6650 : 6 : return true;
6651 : : }
6652 : : }
6653 : : return false;
6654 : : }
6655 : :
6656 : : bool
6657 : 1378 : gimple_simplify_CFN_REDUC_MAX (gimple_match_op *res_op, gimple_seq *seq,
6658 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6659 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
6660 : : {
6661 : 1378 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6662 : 1378 : switch (TREE_CODE (_p0))
6663 : : {
6664 : 1378 : case SSA_NAME:
6665 : 1378 : if (gimple *_d1 = get_def (valueize, _p0))
6666 : : {
6667 : 509 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
6668 : 428 : switch (gimple_assign_rhs_code (_a1))
6669 : : {
6670 : 286 : case MAX_EXPR:
6671 : 286 : {
6672 : 286 : tree _q20 = gimple_assign_rhs1 (_a1);
6673 : 286 : _q20 = do_valueize (valueize, _q20);
6674 : 286 : tree _q21 = gimple_assign_rhs2 (_a1);
6675 : 286 : _q21 = do_valueize (valueize, _q21);
6676 : 286 : if (tree_swap_operands_p (_q20, _q21))
6677 : 1 : std::swap (_q20, _q21);
6678 : 286 : switch (TREE_CODE (_q21))
6679 : : {
6680 : 9 : case VECTOR_CST:
6681 : 9 : {
6682 : 9 : {
6683 : 9 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
6684 : 9 : gimple_seq *lseq = seq;
6685 : 9 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1501;
6686 : 9 : {
6687 : 9 : res_op->set_op (MAX_EXPR, type, 2);
6688 : 9 : {
6689 : 9 : tree _o1[1], _r1;
6690 : 9 : _o1[0] = captures[0];
6691 : 9 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_REDUC_MAX, type, _o1[0]);
6692 : 9 : tem_op.resimplify (lseq, valueize);
6693 : 9 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
6694 : 9 : if (!_r1) goto next_after_fail1501;
6695 : 9 : res_op->ops[0] = _r1;
6696 : : }
6697 : 9 : {
6698 : 9 : tree _o1[1], _r1;
6699 : 9 : _o1[0] = captures[1];
6700 : 9 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_REDUC_MAX, type, _o1[0]);
6701 : 9 : tem_op.resimplify (lseq, valueize);
6702 : 9 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
6703 : 9 : if (!_r1) goto next_after_fail1501;
6704 : 9 : res_op->ops[1] = _r1;
6705 : : }
6706 : 9 : res_op->resimplify (lseq, valueize);
6707 : 9 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 919, __FILE__, __LINE__, true);
6708 : 9 : return true;
6709 : : }
6710 : 0 : next_after_fail1501:;
6711 : : }
6712 : 0 : break;
6713 : : }
6714 : : default:;
6715 : : }
6716 : 1378 : break;
6717 : : }
6718 : : default:;
6719 : : }
6720 : : }
6721 : : break;
6722 : : default:;
6723 : : }
6724 : : return false;
6725 : : }
6726 : :
6727 : : bool
6728 : 131464042 : gimple_simplify (gimple_match_op *res_op, gimple_seq *seq,
6729 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6730 : : code_helper code, const tree type, tree _p0)
6731 : : {
6732 : 131464042 : switch (code.get_rep())
6733 : : {
6734 : 426543 : case ABS_EXPR:
6735 : 426543 : return gimple_simplify_ABS_EXPR (res_op, seq, valueize, code, type, _p0);
6736 : 68561254 : CASE_CONVERT:
6737 : 68561254 : return gimple_simplify_CONVERT_EXPR (res_op, seq, valueize, code, type, _p0);
6738 : 3256 : case -CFN_BUILT_IN_COSF:
6739 : 3256 : return gimple_simplify_CFN_BUILT_IN_COSF (res_op, seq, valueize, code, type, _p0);
6740 : 3926 : case -CFN_BUILT_IN_COS:
6741 : 3926 : return gimple_simplify_CFN_BUILT_IN_COS (res_op, seq, valueize, code, type, _p0);
6742 : 2468 : case -CFN_BUILT_IN_COSL:
6743 : 2468 : return gimple_simplify_CFN_BUILT_IN_COSL (res_op, seq, valueize, code, type, _p0);
6744 : 0 : case -CFN_COS:
6745 : 0 : return gimple_simplify_CFN_COS (res_op, seq, valueize, code, type, _p0);
6746 : 1959 : case -CFN_BUILT_IN_COSHF:
6747 : 1959 : return gimple_simplify_CFN_BUILT_IN_COSHF (res_op, seq, valueize, code, type, _p0);
6748 : 1747 : case -CFN_BUILT_IN_COSH:
6749 : 1747 : return gimple_simplify_CFN_BUILT_IN_COSH (res_op, seq, valueize, code, type, _p0);
6750 : 1467 : case -CFN_BUILT_IN_COSHL:
6751 : 1467 : return gimple_simplify_CFN_BUILT_IN_COSHL (res_op, seq, valueize, code, type, _p0);
6752 : 7 : case -CFN_COSH:
6753 : 7 : return gimple_simplify_CFN_COSH (res_op, seq, valueize, code, type, _p0);
6754 : 7502380 : case NEGATE_EXPR:
6755 : 7502380 : return gimple_simplify_NEGATE_EXPR (res_op, seq, valueize, code, type, _p0);
6756 : 571 : case -CFN_BUILT_IN_CCOSF:
6757 : 571 : return gimple_simplify_CFN_BUILT_IN_CCOSF (res_op, seq, valueize, code, type, _p0);
6758 : 477 : case -CFN_BUILT_IN_CCOS:
6759 : 477 : return gimple_simplify_CFN_BUILT_IN_CCOS (res_op, seq, valueize, code, type, _p0);
6760 : 343 : case -CFN_BUILT_IN_CCOSL:
6761 : 343 : return gimple_simplify_CFN_BUILT_IN_CCOSL (res_op, seq, valueize, code, type, _p0);
6762 : 437 : case -CFN_BUILT_IN_CCOSHF:
6763 : 437 : return gimple_simplify_CFN_BUILT_IN_CCOSHF (res_op, seq, valueize, code, type, _p0);
6764 : 341 : case -CFN_BUILT_IN_CCOSH:
6765 : 341 : return gimple_simplify_CFN_BUILT_IN_CCOSH (res_op, seq, valueize, code, type, _p0);
6766 : 111 : case -CFN_BUILT_IN_CCOSHL:
6767 : 111 : return gimple_simplify_CFN_BUILT_IN_CCOSHL (res_op, seq, valueize, code, type, _p0);
6768 : 7019 : case -CFN_BUILT_IN_CABSF:
6769 : 7019 : return gimple_simplify_CFN_BUILT_IN_CABSF (res_op, seq, valueize, code, type, _p0);
6770 : 4475 : case -CFN_BUILT_IN_CABS:
6771 : 4475 : return gimple_simplify_CFN_BUILT_IN_CABS (res_op, seq, valueize, code, type, _p0);
6772 : 4776 : case -CFN_BUILT_IN_CABSL:
6773 : 4776 : return gimple_simplify_CFN_BUILT_IN_CABSL (res_op, seq, valueize, code, type, _p0);
6774 : 2038181 : case BIT_NOT_EXPR:
6775 : 2038181 : return gimple_simplify_BIT_NOT_EXPR (res_op, seq, valueize, code, type, _p0);
6776 : 17338 : case ABSU_EXPR:
6777 : 17338 : return gimple_simplify_ABSU_EXPR (res_op, seq, valueize, code, type, _p0);
6778 : 4905663 : case VIEW_CONVERT_EXPR:
6779 : 4905663 : return gimple_simplify_VIEW_CONVERT_EXPR (res_op, seq, valueize, code, type, _p0);
6780 : 1870337 : case FLOAT_EXPR:
6781 : 1870337 : return gimple_simplify_FLOAT_EXPR (res_op, seq, valueize, code, type, _p0);
6782 : 625511 : case FIX_TRUNC_EXPR:
6783 : 625511 : return gimple_simplify_FIX_TRUNC_EXPR (res_op, seq, valueize, code, type, _p0);
6784 : 60297 : case PAREN_EXPR:
6785 : 60297 : return gimple_simplify_PAREN_EXPR (res_op, seq, valueize, code, type, _p0);
6786 : 1519357 : case REALPART_EXPR:
6787 : 1519357 : return gimple_simplify_REALPART_EXPR (res_op, seq, valueize, code, type, _p0);
6788 : 1821368 : case IMAGPART_EXPR:
6789 : 1821368 : return gimple_simplify_IMAGPART_EXPR (res_op, seq, valueize, code, type, _p0);
6790 : 4158 : case CONJ_EXPR:
6791 : 4158 : return gimple_simplify_CONJ_EXPR (res_op, seq, valueize, code, type, _p0);
6792 : 2943 : case -CFN_BUILT_IN_BSWAP16:
6793 : 2943 : return gimple_simplify_CFN_BUILT_IN_BSWAP16 (res_op, seq, valueize, code, type, _p0);
6794 : 7862 : case -CFN_BUILT_IN_BSWAP32:
6795 : 7862 : return gimple_simplify_CFN_BUILT_IN_BSWAP32 (res_op, seq, valueize, code, type, _p0);
6796 : 6581 : case -CFN_BUILT_IN_BSWAP64:
6797 : 6581 : return gimple_simplify_CFN_BUILT_IN_BSWAP64 (res_op, seq, valueize, code, type, _p0);
6798 : 108 : case -CFN_BUILT_IN_BSWAP128:
6799 : 108 : return gimple_simplify_CFN_BUILT_IN_BSWAP128 (res_op, seq, valueize, code, type, _p0);
6800 : 4471 : case -CFN_BUILT_IN_LOGF:
6801 : 4471 : return gimple_simplify_CFN_BUILT_IN_LOGF (res_op, seq, valueize, code, type, _p0);
6802 : 11359 : case -CFN_BUILT_IN_LOG:
6803 : 11359 : return gimple_simplify_CFN_BUILT_IN_LOG (res_op, seq, valueize, code, type, _p0);
6804 : 5204 : case -CFN_BUILT_IN_LOGL:
6805 : 5204 : return gimple_simplify_CFN_BUILT_IN_LOGL (res_op, seq, valueize, code, type, _p0);
6806 : 0 : case -CFN_LOG:
6807 : 0 : return gimple_simplify_CFN_LOG (res_op, seq, valueize, code, type, _p0);
6808 : 927 : case -CFN_BUILT_IN_LOG2F:
6809 : 927 : return gimple_simplify_CFN_BUILT_IN_LOG2F (res_op, seq, valueize, code, type, _p0);
6810 : 928 : case -CFN_BUILT_IN_LOG2:
6811 : 928 : return gimple_simplify_CFN_BUILT_IN_LOG2 (res_op, seq, valueize, code, type, _p0);
6812 : 735 : case -CFN_BUILT_IN_LOG2L:
6813 : 735 : return gimple_simplify_CFN_BUILT_IN_LOG2L (res_op, seq, valueize, code, type, _p0);
6814 : 0 : case -CFN_LOG2:
6815 : 0 : return gimple_simplify_CFN_LOG2 (res_op, seq, valueize, code, type, _p0);
6816 : 1125 : case -CFN_BUILT_IN_LOG10F:
6817 : 1125 : return gimple_simplify_CFN_BUILT_IN_LOG10F (res_op, seq, valueize, code, type, _p0);
6818 : 1234 : case -CFN_BUILT_IN_LOG10:
6819 : 1234 : return gimple_simplify_CFN_BUILT_IN_LOG10 (res_op, seq, valueize, code, type, _p0);
6820 : 1359 : case -CFN_BUILT_IN_LOG10L:
6821 : 1359 : return gimple_simplify_CFN_BUILT_IN_LOG10L (res_op, seq, valueize, code, type, _p0);
6822 : 0 : case -CFN_LOG10:
6823 : 0 : return gimple_simplify_CFN_LOG10 (res_op, seq, valueize, code, type, _p0);
6824 : 6126 : case -CFN_BUILT_IN_EXPF:
6825 : 6126 : return gimple_simplify_CFN_BUILT_IN_EXPF (res_op, seq, valueize, code, type, _p0);
6826 : 8962 : case -CFN_BUILT_IN_EXP:
6827 : 8962 : return gimple_simplify_CFN_BUILT_IN_EXP (res_op, seq, valueize, code, type, _p0);
6828 : 5759 : case -CFN_BUILT_IN_EXPL:
6829 : 5759 : return gimple_simplify_CFN_BUILT_IN_EXPL (res_op, seq, valueize, code, type, _p0);
6830 : 0 : case -CFN_EXP:
6831 : 0 : return gimple_simplify_CFN_EXP (res_op, seq, valueize, code, type, _p0);
6832 : 1515 : case -CFN_BUILT_IN_EXP2F:
6833 : 1515 : return gimple_simplify_CFN_BUILT_IN_EXP2F (res_op, seq, valueize, code, type, _p0);
6834 : 1520 : case -CFN_BUILT_IN_EXP2:
6835 : 1520 : return gimple_simplify_CFN_BUILT_IN_EXP2 (res_op, seq, valueize, code, type, _p0);
6836 : 1326 : case -CFN_BUILT_IN_EXP2L:
6837 : 1326 : return gimple_simplify_CFN_BUILT_IN_EXP2L (res_op, seq, valueize, code, type, _p0);
6838 : 0 : case -CFN_EXP2:
6839 : 0 : return gimple_simplify_CFN_EXP2 (res_op, seq, valueize, code, type, _p0);
6840 : 296 : case -CFN_BUILT_IN_EXP10F:
6841 : 296 : return gimple_simplify_CFN_BUILT_IN_EXP10F (res_op, seq, valueize, code, type, _p0);
6842 : 400 : case -CFN_BUILT_IN_EXP10:
6843 : 400 : return gimple_simplify_CFN_BUILT_IN_EXP10 (res_op, seq, valueize, code, type, _p0);
6844 : 299 : case -CFN_BUILT_IN_EXP10L:
6845 : 299 : return gimple_simplify_CFN_BUILT_IN_EXP10L (res_op, seq, valueize, code, type, _p0);
6846 : 0 : case -CFN_EXP10:
6847 : 0 : return gimple_simplify_CFN_EXP10 (res_op, seq, valueize, code, type, _p0);
6848 : 532 : case -CFN_BUILT_IN_POW10F:
6849 : 532 : return gimple_simplify_CFN_BUILT_IN_POW10F (res_op, seq, valueize, code, type, _p0);
6850 : 545 : case -CFN_BUILT_IN_POW10:
6851 : 545 : return gimple_simplify_CFN_BUILT_IN_POW10 (res_op, seq, valueize, code, type, _p0);
6852 : 535 : case -CFN_BUILT_IN_POW10L:
6853 : 535 : return gimple_simplify_CFN_BUILT_IN_POW10L (res_op, seq, valueize, code, type, _p0);
6854 : 16927 : case -CFN_BUILT_IN_SQRTF:
6855 : 16927 : return gimple_simplify_CFN_BUILT_IN_SQRTF (res_op, seq, valueize, code, type, _p0);
6856 : 23957 : case -CFN_BUILT_IN_SQRT:
6857 : 23957 : return gimple_simplify_CFN_BUILT_IN_SQRT (res_op, seq, valueize, code, type, _p0);
6858 : 11706 : case -CFN_BUILT_IN_SQRTL:
6859 : 11706 : return gimple_simplify_CFN_BUILT_IN_SQRTL (res_op, seq, valueize, code, type, _p0);
6860 : 19462 : case -CFN_SQRT:
6861 : 19462 : return gimple_simplify_CFN_SQRT (res_op, seq, valueize, code, type, _p0);
6862 : 426 : case -CFN_BUILT_IN_CBRTF:
6863 : 426 : return gimple_simplify_CFN_BUILT_IN_CBRTF (res_op, seq, valueize, code, type, _p0);
6864 : 381 : case -CFN_BUILT_IN_CBRT:
6865 : 381 : return gimple_simplify_CFN_BUILT_IN_CBRT (res_op, seq, valueize, code, type, _p0);
6866 : 277 : case -CFN_BUILT_IN_CBRTL:
6867 : 277 : return gimple_simplify_CFN_BUILT_IN_CBRTL (res_op, seq, valueize, code, type, _p0);
6868 : 966 : case -CFN_BUILT_IN_TANF:
6869 : 966 : return gimple_simplify_CFN_BUILT_IN_TANF (res_op, seq, valueize, code, type, _p0);
6870 : 1075 : case -CFN_BUILT_IN_TAN:
6871 : 1075 : return gimple_simplify_CFN_BUILT_IN_TAN (res_op, seq, valueize, code, type, _p0);
6872 : 1160 : case -CFN_BUILT_IN_TANL:
6873 : 1160 : return gimple_simplify_CFN_BUILT_IN_TANL (res_op, seq, valueize, code, type, _p0);
6874 : 0 : case -CFN_TAN:
6875 : 0 : return gimple_simplify_CFN_TAN (res_op, seq, valueize, code, type, _p0);
6876 : 5555 : case -CFN_BUILT_IN_SINF:
6877 : 5555 : return gimple_simplify_CFN_BUILT_IN_SINF (res_op, seq, valueize, code, type, _p0);
6878 : 6805 : case -CFN_BUILT_IN_SIN:
6879 : 6805 : return gimple_simplify_CFN_BUILT_IN_SIN (res_op, seq, valueize, code, type, _p0);
6880 : 4153 : case -CFN_BUILT_IN_SINL:
6881 : 4153 : return gimple_simplify_CFN_BUILT_IN_SINL (res_op, seq, valueize, code, type, _p0);
6882 : 0 : case -CFN_SIN:
6883 : 0 : return gimple_simplify_CFN_SIN (res_op, seq, valueize, code, type, _p0);
6884 : 1606 : case -CFN_BUILT_IN_SINHF:
6885 : 1606 : return gimple_simplify_CFN_BUILT_IN_SINHF (res_op, seq, valueize, code, type, _p0);
6886 : 1345 : case -CFN_BUILT_IN_SINH:
6887 : 1345 : return gimple_simplify_CFN_BUILT_IN_SINH (res_op, seq, valueize, code, type, _p0);
6888 : 1148 : case -CFN_BUILT_IN_SINHL:
6889 : 1148 : return gimple_simplify_CFN_BUILT_IN_SINHL (res_op, seq, valueize, code, type, _p0);
6890 : 7 : case -CFN_SINH:
6891 : 7 : return gimple_simplify_CFN_SINH (res_op, seq, valueize, code, type, _p0);
6892 : 3426 : case -CFN_BUILT_IN_TRUNCF:
6893 : 3426 : return gimple_simplify_CFN_BUILT_IN_TRUNCF (res_op, seq, valueize, code, type, _p0);
6894 : 1687 : case -CFN_BUILT_IN_TRUNC:
6895 : 1687 : return gimple_simplify_CFN_BUILT_IN_TRUNC (res_op, seq, valueize, code, type, _p0);
6896 : 997 : case -CFN_BUILT_IN_TRUNCL:
6897 : 997 : return gimple_simplify_CFN_BUILT_IN_TRUNCL (res_op, seq, valueize, code, type, _p0);
6898 : 154 : case -CFN_BUILT_IN_TRUNCF16:
6899 : 154 : return gimple_simplify_CFN_BUILT_IN_TRUNCF16 (res_op, seq, valueize, code, type, _p0);
6900 : 0 : case -CFN_BUILT_IN_TRUNCF32:
6901 : 0 : return gimple_simplify_CFN_BUILT_IN_TRUNCF32 (res_op, seq, valueize, code, type, _p0);
6902 : 0 : case -CFN_BUILT_IN_TRUNCF64:
6903 : 0 : return gimple_simplify_CFN_BUILT_IN_TRUNCF64 (res_op, seq, valueize, code, type, _p0);
6904 : 44 : case -CFN_BUILT_IN_TRUNCF128:
6905 : 44 : return gimple_simplify_CFN_BUILT_IN_TRUNCF128 (res_op, seq, valueize, code, type, _p0);
6906 : 0 : case -CFN_BUILT_IN_TRUNCF32X:
6907 : 0 : return gimple_simplify_CFN_BUILT_IN_TRUNCF32X (res_op, seq, valueize, code, type, _p0);
6908 : 0 : case -CFN_BUILT_IN_TRUNCF64X:
6909 : 0 : return gimple_simplify_CFN_BUILT_IN_TRUNCF64X (res_op, seq, valueize, code, type, _p0);
6910 : 0 : case -CFN_BUILT_IN_TRUNCF128X:
6911 : 0 : return gimple_simplify_CFN_BUILT_IN_TRUNCF128X (res_op, seq, valueize, code, type, _p0);
6912 : 207 : case -CFN_TRUNC:
6913 : 207 : return gimple_simplify_CFN_TRUNC (res_op, seq, valueize, code, type, _p0);
6914 : 2607 : case -CFN_BUILT_IN_FLOORF:
6915 : 2607 : return gimple_simplify_CFN_BUILT_IN_FLOORF (res_op, seq, valueize, code, type, _p0);
6916 : 5156 : case -CFN_BUILT_IN_FLOOR:
6917 : 5156 : return gimple_simplify_CFN_BUILT_IN_FLOOR (res_op, seq, valueize, code, type, _p0);
6918 : 1172 : case -CFN_BUILT_IN_FLOORL:
6919 : 1172 : return gimple_simplify_CFN_BUILT_IN_FLOORL (res_op, seq, valueize, code, type, _p0);
6920 : 154 : case -CFN_BUILT_IN_FLOORF16:
6921 : 154 : return gimple_simplify_CFN_BUILT_IN_FLOORF16 (res_op, seq, valueize, code, type, _p0);
6922 : 0 : case -CFN_BUILT_IN_FLOORF32:
6923 : 0 : return gimple_simplify_CFN_BUILT_IN_FLOORF32 (res_op, seq, valueize, code, type, _p0);
6924 : 0 : case -CFN_BUILT_IN_FLOORF64:
6925 : 0 : return gimple_simplify_CFN_BUILT_IN_FLOORF64 (res_op, seq, valueize, code, type, _p0);
6926 : 146 : case -CFN_BUILT_IN_FLOORF128:
6927 : 146 : return gimple_simplify_CFN_BUILT_IN_FLOORF128 (res_op, seq, valueize, code, type, _p0);
6928 : 0 : case -CFN_BUILT_IN_FLOORF32X:
6929 : 0 : return gimple_simplify_CFN_BUILT_IN_FLOORF32X (res_op, seq, valueize, code, type, _p0);
6930 : 0 : case -CFN_BUILT_IN_FLOORF64X:
6931 : 0 : return gimple_simplify_CFN_BUILT_IN_FLOORF64X (res_op, seq, valueize, code, type, _p0);
6932 : 0 : case -CFN_BUILT_IN_FLOORF128X:
6933 : 0 : return gimple_simplify_CFN_BUILT_IN_FLOORF128X (res_op, seq, valueize, code, type, _p0);
6934 : 217 : case -CFN_FLOOR:
6935 : 217 : return gimple_simplify_CFN_FLOOR (res_op, seq, valueize, code, type, _p0);
6936 : 4815 : case -CFN_BUILT_IN_CEILF:
6937 : 4815 : return gimple_simplify_CFN_BUILT_IN_CEILF (res_op, seq, valueize, code, type, _p0);
6938 : 6615 : case -CFN_BUILT_IN_CEIL:
6939 : 6615 : return gimple_simplify_CFN_BUILT_IN_CEIL (res_op, seq, valueize, code, type, _p0);
6940 : 887 : case -CFN_BUILT_IN_CEILL:
6941 : 887 : return gimple_simplify_CFN_BUILT_IN_CEILL (res_op, seq, valueize, code, type, _p0);
6942 : 154 : case -CFN_BUILT_IN_CEILF16:
6943 : 154 : return gimple_simplify_CFN_BUILT_IN_CEILF16 (res_op, seq, valueize, code, type, _p0);
6944 : 0 : case -CFN_BUILT_IN_CEILF32:
6945 : 0 : return gimple_simplify_CFN_BUILT_IN_CEILF32 (res_op, seq, valueize, code, type, _p0);
6946 : 0 : case -CFN_BUILT_IN_CEILF64:
6947 : 0 : return gimple_simplify_CFN_BUILT_IN_CEILF64 (res_op, seq, valueize, code, type, _p0);
6948 : 44 : case -CFN_BUILT_IN_CEILF128:
6949 : 44 : return gimple_simplify_CFN_BUILT_IN_CEILF128 (res_op, seq, valueize, code, type, _p0);
6950 : 0 : case -CFN_BUILT_IN_CEILF32X:
6951 : 0 : return gimple_simplify_CFN_BUILT_IN_CEILF32X (res_op, seq, valueize, code, type, _p0);
6952 : 0 : case -CFN_BUILT_IN_CEILF64X:
6953 : 0 : return gimple_simplify_CFN_BUILT_IN_CEILF64X (res_op, seq, valueize, code, type, _p0);
6954 : 0 : case -CFN_BUILT_IN_CEILF128X:
6955 : 0 : return gimple_simplify_CFN_BUILT_IN_CEILF128X (res_op, seq, valueize, code, type, _p0);
6956 : 213 : case -CFN_CEIL:
6957 : 213 : return gimple_simplify_CFN_CEIL (res_op, seq, valueize, code, type, _p0);
6958 : 1789 : case -CFN_BUILT_IN_ROUNDF:
6959 : 1789 : return gimple_simplify_CFN_BUILT_IN_ROUNDF (res_op, seq, valueize, code, type, _p0);
6960 : 2415 : case -CFN_BUILT_IN_ROUND:
6961 : 2415 : return gimple_simplify_CFN_BUILT_IN_ROUND (res_op, seq, valueize, code, type, _p0);
6962 : 823 : case -CFN_BUILT_IN_ROUNDL:
6963 : 823 : return gimple_simplify_CFN_BUILT_IN_ROUNDL (res_op, seq, valueize, code, type, _p0);
6964 : 107 : case -CFN_BUILT_IN_ROUNDF16:
6965 : 107 : return gimple_simplify_CFN_BUILT_IN_ROUNDF16 (res_op, seq, valueize, code, type, _p0);
6966 : 0 : case -CFN_BUILT_IN_ROUNDF32:
6967 : 0 : return gimple_simplify_CFN_BUILT_IN_ROUNDF32 (res_op, seq, valueize, code, type, _p0);
6968 : 0 : case -CFN_BUILT_IN_ROUNDF64:
6969 : 0 : return gimple_simplify_CFN_BUILT_IN_ROUNDF64 (res_op, seq, valueize, code, type, _p0);
6970 : 44 : case -CFN_BUILT_IN_ROUNDF128:
6971 : 44 : return gimple_simplify_CFN_BUILT_IN_ROUNDF128 (res_op, seq, valueize, code, type, _p0);
6972 : 0 : case -CFN_BUILT_IN_ROUNDF32X:
6973 : 0 : return gimple_simplify_CFN_BUILT_IN_ROUNDF32X (res_op, seq, valueize, code, type, _p0);
6974 : 0 : case -CFN_BUILT_IN_ROUNDF64X:
6975 : 0 : return gimple_simplify_CFN_BUILT_IN_ROUNDF64X (res_op, seq, valueize, code, type, _p0);
6976 : 0 : case -CFN_BUILT_IN_ROUNDF128X:
6977 : 0 : return gimple_simplify_CFN_BUILT_IN_ROUNDF128X (res_op, seq, valueize, code, type, _p0);
6978 : 72 : case -CFN_ROUND:
6979 : 72 : return gimple_simplify_CFN_ROUND (res_op, seq, valueize, code, type, _p0);
6980 : 1408 : case -CFN_BUILT_IN_NEARBYINTF:
6981 : 1408 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTF (res_op, seq, valueize, code, type, _p0);
6982 : 1070 : case -CFN_BUILT_IN_NEARBYINT:
6983 : 1070 : return gimple_simplify_CFN_BUILT_IN_NEARBYINT (res_op, seq, valueize, code, type, _p0);
6984 : 829 : case -CFN_BUILT_IN_NEARBYINTL:
6985 : 829 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTL (res_op, seq, valueize, code, type, _p0);
6986 : 154 : case -CFN_BUILT_IN_NEARBYINTF16:
6987 : 154 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTF16 (res_op, seq, valueize, code, type, _p0);
6988 : 0 : case -CFN_BUILT_IN_NEARBYINTF32:
6989 : 0 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTF32 (res_op, seq, valueize, code, type, _p0);
6990 : 0 : case -CFN_BUILT_IN_NEARBYINTF64:
6991 : 0 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTF64 (res_op, seq, valueize, code, type, _p0);
6992 : 44 : case -CFN_BUILT_IN_NEARBYINTF128:
6993 : 44 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTF128 (res_op, seq, valueize, code, type, _p0);
6994 : 0 : case -CFN_BUILT_IN_NEARBYINTF32X:
6995 : 0 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTF32X (res_op, seq, valueize, code, type, _p0);
6996 : 0 : case -CFN_BUILT_IN_NEARBYINTF64X:
6997 : 0 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTF64X (res_op, seq, valueize, code, type, _p0);
6998 : 0 : case -CFN_BUILT_IN_NEARBYINTF128X:
6999 : 0 : return gimple_simplify_CFN_BUILT_IN_NEARBYINTF128X (res_op, seq, valueize, code, type, _p0);
7000 : 175 : case -CFN_NEARBYINT:
7001 : 175 : return gimple_simplify_CFN_NEARBYINT (res_op, seq, valueize, code, type, _p0);
7002 : 1820 : case -CFN_BUILT_IN_RINTF:
7003 : 1820 : return gimple_simplify_CFN_BUILT_IN_RINTF (res_op, seq, valueize, code, type, _p0);
7004 : 1589 : case -CFN_BUILT_IN_RINT:
7005 : 1589 : return gimple_simplify_CFN_BUILT_IN_RINT (res_op, seq, valueize, code, type, _p0);
7006 : 759 : case -CFN_BUILT_IN_RINTL:
7007 : 759 : return gimple_simplify_CFN_BUILT_IN_RINTL (res_op, seq, valueize, code, type, _p0);
7008 : 154 : case -CFN_BUILT_IN_RINTF16:
7009 : 154 : return gimple_simplify_CFN_BUILT_IN_RINTF16 (res_op, seq, valueize, code, type, _p0);
7010 : 0 : case -CFN_BUILT_IN_RINTF32:
7011 : 0 : return gimple_simplify_CFN_BUILT_IN_RINTF32 (res_op, seq, valueize, code, type, _p0);
7012 : 0 : case -CFN_BUILT_IN_RINTF64:
7013 : 0 : return gimple_simplify_CFN_BUILT_IN_RINTF64 (res_op, seq, valueize, code, type, _p0);
7014 : 44 : case -CFN_BUILT_IN_RINTF128:
7015 : 44 : return gimple_simplify_CFN_BUILT_IN_RINTF128 (res_op, seq, valueize, code, type, _p0);
7016 : 0 : case -CFN_BUILT_IN_RINTF32X:
7017 : 0 : return gimple_simplify_CFN_BUILT_IN_RINTF32X (res_op, seq, valueize, code, type, _p0);
7018 : 0 : case -CFN_BUILT_IN_RINTF64X:
7019 : 0 : return gimple_simplify_CFN_BUILT_IN_RINTF64X (res_op, seq, valueize, code, type, _p0);
7020 : 0 : case -CFN_BUILT_IN_RINTF128X:
7021 : 0 : return gimple_simplify_CFN_BUILT_IN_RINTF128X (res_op, seq, valueize, code, type, _p0);
7022 : 235 : case -CFN_RINT:
7023 : 235 : return gimple_simplify_CFN_RINT (res_op, seq, valueize, code, type, _p0);
7024 : 596 : case -CFN_BUILT_IN_CEXPF:
7025 : 596 : return gimple_simplify_CFN_BUILT_IN_CEXPF (res_op, seq, valueize, code, type, _p0);
7026 : 513 : case -CFN_BUILT_IN_CEXP:
7027 : 513 : return gimple_simplify_CFN_BUILT_IN_CEXP (res_op, seq, valueize, code, type, _p0);
7028 : 327 : case -CFN_BUILT_IN_CEXPL:
7029 : 327 : return gimple_simplify_CFN_BUILT_IN_CEXPL (res_op, seq, valueize, code, type, _p0);
7030 : 1 : case -CFN_BUILT_IN_IFLOORL:
7031 : 1 : return gimple_simplify_CFN_BUILT_IN_IFLOORL (res_op, seq, valueize, code, type, _p0);
7032 : 1094 : case -CFN_BUILT_IN_LFLOORL:
7033 : 1094 : return gimple_simplify_CFN_BUILT_IN_LFLOORL (res_op, seq, valueize, code, type, _p0);
7034 : 130 : case -CFN_BUILT_IN_LLFLOORL:
7035 : 130 : return gimple_simplify_CFN_BUILT_IN_LLFLOORL (res_op, seq, valueize, code, type, _p0);
7036 : 1 : case -CFN_BUILT_IN_ICEILL:
7037 : 1 : return gimple_simplify_CFN_BUILT_IN_ICEILL (res_op, seq, valueize, code, type, _p0);
7038 : 1147 : case -CFN_BUILT_IN_LCEILL:
7039 : 1147 : return gimple_simplify_CFN_BUILT_IN_LCEILL (res_op, seq, valueize, code, type, _p0);
7040 : 130 : case -CFN_BUILT_IN_LLCEILL:
7041 : 130 : return gimple_simplify_CFN_BUILT_IN_LLCEILL (res_op, seq, valueize, code, type, _p0);
7042 : 124 : case -CFN_BUILT_IN_IROUNDL:
7043 : 124 : return gimple_simplify_CFN_BUILT_IN_IROUNDL (res_op, seq, valueize, code, type, _p0);
7044 : 1196 : case -CFN_BUILT_IN_LROUNDL:
7045 : 1196 : return gimple_simplify_CFN_BUILT_IN_LROUNDL (res_op, seq, valueize, code, type, _p0);
7046 : 253 : case -CFN_BUILT_IN_LLROUNDL:
7047 : 253 : return gimple_simplify_CFN_BUILT_IN_LLROUNDL (res_op, seq, valueize, code, type, _p0);
7048 : 18 : case -CFN_BUILT_IN_IRINTL:
7049 : 18 : return gimple_simplify_CFN_BUILT_IN_IRINTL (res_op, seq, valueize, code, type, _p0);
7050 : 1243 : case -CFN_BUILT_IN_LRINTL:
7051 : 1243 : return gimple_simplify_CFN_BUILT_IN_LRINTL (res_op, seq, valueize, code, type, _p0);
7052 : 270 : case -CFN_BUILT_IN_LLRINTL:
7053 : 270 : return gimple_simplify_CFN_BUILT_IN_LLRINTL (res_op, seq, valueize, code, type, _p0);
7054 : 190 : case -CFN_BUILT_IN_IFLOOR:
7055 : 190 : return gimple_simplify_CFN_BUILT_IN_IFLOOR (res_op, seq, valueize, code, type, _p0);
7056 : 1304 : case -CFN_BUILT_IN_LFLOOR:
7057 : 1304 : return gimple_simplify_CFN_BUILT_IN_LFLOOR (res_op, seq, valueize, code, type, _p0);
7058 : 124 : case -CFN_BUILT_IN_LLFLOOR:
7059 : 124 : return gimple_simplify_CFN_BUILT_IN_LLFLOOR (res_op, seq, valueize, code, type, _p0);
7060 : 185 : case -CFN_BUILT_IN_ICEIL:
7061 : 185 : return gimple_simplify_CFN_BUILT_IN_ICEIL (res_op, seq, valueize, code, type, _p0);
7062 : 1353 : case -CFN_BUILT_IN_LCEIL:
7063 : 1353 : return gimple_simplify_CFN_BUILT_IN_LCEIL (res_op, seq, valueize, code, type, _p0);
7064 : 124 : case -CFN_BUILT_IN_LLCEIL:
7065 : 124 : return gimple_simplify_CFN_BUILT_IN_LLCEIL (res_op, seq, valueize, code, type, _p0);
7066 : 504 : case -CFN_BUILT_IN_IROUND:
7067 : 504 : return gimple_simplify_CFN_BUILT_IN_IROUND (res_op, seq, valueize, code, type, _p0);
7068 : 1418 : case -CFN_BUILT_IN_LROUND:
7069 : 1418 : return gimple_simplify_CFN_BUILT_IN_LROUND (res_op, seq, valueize, code, type, _p0);
7070 : 296 : case -CFN_BUILT_IN_LLROUND:
7071 : 296 : return gimple_simplify_CFN_BUILT_IN_LLROUND (res_op, seq, valueize, code, type, _p0);
7072 : 236 : case -CFN_BUILT_IN_IRINT:
7073 : 236 : return gimple_simplify_CFN_BUILT_IN_IRINT (res_op, seq, valueize, code, type, _p0);
7074 : 2419 : case -CFN_BUILT_IN_LRINT:
7075 : 2419 : return gimple_simplify_CFN_BUILT_IN_LRINT (res_op, seq, valueize, code, type, _p0);
7076 : 329 : case -CFN_BUILT_IN_LLRINT:
7077 : 329 : return gimple_simplify_CFN_BUILT_IN_LLRINT (res_op, seq, valueize, code, type, _p0);
7078 : 183 : case -CFN_BUILT_IN_IFLOORF:
7079 : 183 : return gimple_simplify_CFN_BUILT_IN_IFLOORF (res_op, seq, valueize, code, type, _p0);
7080 : 40 : case -CFN_IFLOOR:
7081 : 40 : return gimple_simplify_CFN_IFLOOR (res_op, seq, valueize, code, type, _p0);
7082 : 1881 : case -CFN_BUILT_IN_LFLOORF:
7083 : 1881 : return gimple_simplify_CFN_BUILT_IN_LFLOORF (res_op, seq, valueize, code, type, _p0);
7084 : 0 : case -CFN_LFLOOR:
7085 : 0 : return gimple_simplify_CFN_LFLOOR (res_op, seq, valueize, code, type, _p0);
7086 : 142 : case -CFN_BUILT_IN_LLFLOORF:
7087 : 142 : return gimple_simplify_CFN_BUILT_IN_LLFLOORF (res_op, seq, valueize, code, type, _p0);
7088 : 0 : case -CFN_LLFLOOR:
7089 : 0 : return gimple_simplify_CFN_LLFLOOR (res_op, seq, valueize, code, type, _p0);
7090 : 183 : case -CFN_BUILT_IN_ICEILF:
7091 : 183 : return gimple_simplify_CFN_BUILT_IN_ICEILF (res_op, seq, valueize, code, type, _p0);
7092 : 40 : case -CFN_ICEIL:
7093 : 40 : return gimple_simplify_CFN_ICEIL (res_op, seq, valueize, code, type, _p0);
7094 : 1923 : case -CFN_BUILT_IN_LCEILF:
7095 : 1923 : return gimple_simplify_CFN_BUILT_IN_LCEILF (res_op, seq, valueize, code, type, _p0);
7096 : 0 : case -CFN_LCEIL:
7097 : 0 : return gimple_simplify_CFN_LCEIL (res_op, seq, valueize, code, type, _p0);
7098 : 142 : case -CFN_BUILT_IN_LLCEILF:
7099 : 142 : return gimple_simplify_CFN_BUILT_IN_LLCEILF (res_op, seq, valueize, code, type, _p0);
7100 : 0 : case -CFN_LLCEIL:
7101 : 0 : return gimple_simplify_CFN_LLCEIL (res_op, seq, valueize, code, type, _p0);
7102 : 970 : case -CFN_BUILT_IN_IROUNDF:
7103 : 970 : return gimple_simplify_CFN_BUILT_IN_IROUNDF (res_op, seq, valueize, code, type, _p0);
7104 : 40 : case -CFN_IROUND:
7105 : 40 : return gimple_simplify_CFN_IROUND (res_op, seq, valueize, code, type, _p0);
7106 : 2199 : case -CFN_BUILT_IN_LROUNDF:
7107 : 2199 : return gimple_simplify_CFN_BUILT_IN_LROUNDF (res_op, seq, valueize, code, type, _p0);
7108 : 0 : case -CFN_LROUND:
7109 : 0 : return gimple_simplify_CFN_LROUND (res_op, seq, valueize, code, type, _p0);
7110 : 422 : case -CFN_BUILT_IN_LLROUNDF:
7111 : 422 : return gimple_simplify_CFN_BUILT_IN_LLROUNDF (res_op, seq, valueize, code, type, _p0);
7112 : 0 : case -CFN_LLROUND:
7113 : 0 : return gimple_simplify_CFN_LLROUND (res_op, seq, valueize, code, type, _p0);
7114 : 200 : case -CFN_BUILT_IN_IRINTF:
7115 : 200 : return gimple_simplify_CFN_BUILT_IN_IRINTF (res_op, seq, valueize, code, type, _p0);
7116 : 40 : case -CFN_IRINT:
7117 : 40 : return gimple_simplify_CFN_IRINT (res_op, seq, valueize, code, type, _p0);
7118 : 2519 : case -CFN_BUILT_IN_LRINTF:
7119 : 2519 : return gimple_simplify_CFN_BUILT_IN_LRINTF (res_op, seq, valueize, code, type, _p0);
7120 : 0 : case -CFN_LRINT:
7121 : 0 : return gimple_simplify_CFN_LRINT (res_op, seq, valueize, code, type, _p0);
7122 : 467 : case -CFN_BUILT_IN_LLRINTF:
7123 : 467 : return gimple_simplify_CFN_BUILT_IN_LLRINTF (res_op, seq, valueize, code, type, _p0);
7124 : 0 : case -CFN_LLRINT:
7125 : 0 : return gimple_simplify_CFN_LLRINT (res_op, seq, valueize, code, type, _p0);
7126 : 974 : case -CFN_BUILT_IN_CPROJF:
7127 : 974 : return gimple_simplify_CFN_BUILT_IN_CPROJF (res_op, seq, valueize, code, type, _p0);
7128 : 891 : case -CFN_BUILT_IN_CPROJ:
7129 : 891 : return gimple_simplify_CFN_BUILT_IN_CPROJ (res_op, seq, valueize, code, type, _p0);
7130 : 814 : case -CFN_BUILT_IN_CPROJL:
7131 : 814 : return gimple_simplify_CFN_BUILT_IN_CPROJL (res_op, seq, valueize, code, type, _p0);
7132 : 906 : case -CFN_BUILT_IN_SIGNBITF:
7133 : 906 : return gimple_simplify_CFN_BUILT_IN_SIGNBITF (res_op, seq, valueize, code, type, _p0);
7134 : 38042 : case -CFN_BUILT_IN_SIGNBIT:
7135 : 38042 : return gimple_simplify_CFN_BUILT_IN_SIGNBIT (res_op, seq, valueize, code, type, _p0);
7136 : 768 : case -CFN_BUILT_IN_SIGNBITL:
7137 : 768 : return gimple_simplify_CFN_BUILT_IN_SIGNBITL (res_op, seq, valueize, code, type, _p0);
7138 : 32 : case -CFN_SIGNBIT:
7139 : 32 : return gimple_simplify_CFN_SIGNBIT (res_op, seq, valueize, code, type, _p0);
7140 : 4165 : case -CFN_BUILT_IN_CTZ:
7141 : 4165 : return gimple_simplify_CFN_BUILT_IN_CTZ (res_op, seq, valueize, code, type, _p0);
7142 : 5969 : case -CFN_BUILT_IN_CTZL:
7143 : 5969 : return gimple_simplify_CFN_BUILT_IN_CTZL (res_op, seq, valueize, code, type, _p0);
7144 : 3239 : case -CFN_BUILT_IN_CTZLL:
7145 : 3239 : return gimple_simplify_CFN_BUILT_IN_CTZLL (res_op, seq, valueize, code, type, _p0);
7146 : 156 : case -CFN_BUILT_IN_CTZIMAX:
7147 : 156 : return gimple_simplify_CFN_BUILT_IN_CTZIMAX (res_op, seq, valueize, code, type, _p0);
7148 : 403 : case -CFN_CTZ:
7149 : 403 : return gimple_simplify_CFN_CTZ (res_op, seq, valueize, code, type, _p0);
7150 : 5497 : case -CFN_BUILT_IN_POPCOUNT:
7151 : 5497 : return gimple_simplify_CFN_BUILT_IN_POPCOUNT (res_op, seq, valueize, code, type, _p0);
7152 : 1972 : case -CFN_BUILT_IN_POPCOUNTL:
7153 : 1972 : return gimple_simplify_CFN_BUILT_IN_POPCOUNTL (res_op, seq, valueize, code, type, _p0);
7154 : 1772 : case -CFN_BUILT_IN_POPCOUNTLL:
7155 : 1772 : return gimple_simplify_CFN_BUILT_IN_POPCOUNTLL (res_op, seq, valueize, code, type, _p0);
7156 : 0 : case -CFN_BUILT_IN_POPCOUNTIMAX:
7157 : 0 : return gimple_simplify_CFN_BUILT_IN_POPCOUNTIMAX (res_op, seq, valueize, code, type, _p0);
7158 : 751 : case -CFN_POPCOUNT:
7159 : 751 : return gimple_simplify_CFN_POPCOUNT (res_op, seq, valueize, code, type, _p0);
7160 : 2219 : case -CFN_BUILT_IN_PARITY:
7161 : 2219 : return gimple_simplify_CFN_BUILT_IN_PARITY (res_op, seq, valueize, code, type, _p0);
7162 : 753 : case -CFN_BUILT_IN_PARITYL:
7163 : 753 : return gimple_simplify_CFN_BUILT_IN_PARITYL (res_op, seq, valueize, code, type, _p0);
7164 : 639 : case -CFN_BUILT_IN_PARITYLL:
7165 : 639 : return gimple_simplify_CFN_BUILT_IN_PARITYLL (res_op, seq, valueize, code, type, _p0);
7166 : 0 : case -CFN_BUILT_IN_PARITYIMAX:
7167 : 0 : return gimple_simplify_CFN_BUILT_IN_PARITYIMAX (res_op, seq, valueize, code, type, _p0);
7168 : 482 : case -CFN_PARITY:
7169 : 482 : return gimple_simplify_CFN_PARITY (res_op, seq, valueize, code, type, _p0);
7170 : 1406 : case -CFN_BUILT_IN_FFS:
7171 : 1406 : return gimple_simplify_CFN_BUILT_IN_FFS (res_op, seq, valueize, code, type, _p0);
7172 : 426 : case -CFN_BUILT_IN_FFSL:
7173 : 426 : return gimple_simplify_CFN_BUILT_IN_FFSL (res_op, seq, valueize, code, type, _p0);
7174 : 453 : case -CFN_BUILT_IN_FFSLL:
7175 : 453 : return gimple_simplify_CFN_BUILT_IN_FFSLL (res_op, seq, valueize, code, type, _p0);
7176 : 0 : case -CFN_BUILT_IN_FFSIMAX:
7177 : 0 : return gimple_simplify_CFN_BUILT_IN_FFSIMAX (res_op, seq, valueize, code, type, _p0);
7178 : 182 : case -CFN_FFS:
7179 : 182 : return gimple_simplify_CFN_FFS (res_op, seq, valueize, code, type, _p0);
7180 : 110589 : case -CFN_REDUC_PLUS:
7181 : 110589 : return gimple_simplify_CFN_REDUC_PLUS (res_op, seq, valueize, code, type, _p0);
7182 : 4873 : case -CFN_REDUC_IOR:
7183 : 4873 : return gimple_simplify_CFN_REDUC_IOR (res_op, seq, valueize, code, type, _p0);
7184 : 580 : case -CFN_REDUC_XOR:
7185 : 580 : return gimple_simplify_CFN_REDUC_XOR (res_op, seq, valueize, code, type, _p0);
7186 : 1378 : case -CFN_REDUC_MAX:
7187 : 1378 : return gimple_simplify_CFN_REDUC_MAX (res_op, seq, valueize, code, type, _p0);
7188 : 1088 : case -CFN_REDUC_MIN:
7189 : 1088 : return gimple_simplify_CFN_REDUC_MIN (res_op, seq, valueize, code, type, _p0);
7190 : 0 : case -CFN_REDUC_FMAX:
7191 : 0 : return gimple_simplify_CFN_REDUC_FMAX (res_op, seq, valueize, code, type, _p0);
7192 : 0 : case -CFN_REDUC_FMIN:
7193 : 0 : return gimple_simplify_CFN_REDUC_FMIN (res_op, seq, valueize, code, type, _p0);
7194 : 5726 : case -CFN_REDUC_AND:
7195 : 5726 : return gimple_simplify_CFN_REDUC_AND (res_op, seq, valueize, code, type, _p0);
7196 : : default:;
7197 : : }
7198 : : return false;
7199 : : }
7200 : :
7201 : : bool
7202 : 342 : gimple_simplify_CFN_BUILT_IN_COPYSIGNF32 (gimple_match_op *res_op, gimple_seq *seq,
7203 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7204 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
7205 : : {
7206 : 342 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7207 : 342 : switch (TREE_CODE (_p0))
7208 : : {
7209 : 342 : case SSA_NAME:
7210 : 342 : if (gimple *_d1 = get_def (valueize, _p0))
7211 : : {
7212 : 225 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7213 : 438 : switch (gimple_assign_rhs_code (_a1))
7214 : : {
7215 : 12 : case NEGATE_EXPR:
7216 : 12 : {
7217 : 12 : tree _q20 = gimple_assign_rhs1 (_a1);
7218 : 12 : _q20 = do_valueize (valueize, _q20);
7219 : 12 : {
7220 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
7221 : 12 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGNF32;
7222 : 12 : gimple_seq *lseq = seq;
7223 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1869;
7224 : 12 : {
7225 : 12 : res_op->set_op (copysigns, type, 2);
7226 : 12 : res_op->ops[0] = captures[0];
7227 : 12 : res_op->ops[1] = captures[1];
7228 : 12 : res_op->resimplify (lseq, valueize);
7229 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
7230 : 12 : return true;
7231 : : }
7232 : 0 : next_after_fail1869:;
7233 : : }
7234 : 0 : break;
7235 : : }
7236 : 0 : case ABS_EXPR:
7237 : 0 : {
7238 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
7239 : 0 : _q20 = do_valueize (valueize, _q20);
7240 : 0 : {
7241 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
7242 : 0 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGNF32;
7243 : 0 : gimple_seq *lseq = seq;
7244 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1870;
7245 : 0 : {
7246 : 0 : res_op->set_op (copysigns, type, 2);
7247 : 0 : res_op->ops[0] = captures[0];
7248 : 0 : res_op->ops[1] = captures[1];
7249 : 0 : res_op->resimplify (lseq, valueize);
7250 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
7251 : 0 : return true;
7252 : : }
7253 : 0 : next_after_fail1870:;
7254 : : }
7255 : 0 : break;
7256 : : }
7257 : : default:;
7258 : : }
7259 : : }
7260 : : break;
7261 : 0 : case REAL_CST:
7262 : 0 : {
7263 : 0 : {
7264 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7265 : 0 : if (gimple_simplify_297 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF32))
7266 : 0 : return true;
7267 : : }
7268 : 0 : break;
7269 : : }
7270 : 330 : default:;
7271 : : }
7272 : 330 : switch (TREE_CODE (_p1))
7273 : : {
7274 : 0 : case REAL_CST:
7275 : 0 : {
7276 : 0 : {
7277 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7278 : 0 : if (gimple_simplify_298 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF32))
7279 : 0 : return true;
7280 : : }
7281 : 0 : break;
7282 : : }
7283 : 330 : default:;
7284 : : }
7285 : 330 : switch (TREE_CODE (_p0))
7286 : : {
7287 : 330 : case SSA_NAME:
7288 : 330 : if (gimple *_d1 = get_def (valueize, _p0))
7289 : : {
7290 : 213 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
7291 : 0 : switch (gimple_call_combined_fn (_c1))
7292 : : {
7293 : 0 : case CFN_BUILT_IN_COPYSIGNF32:
7294 : 0 : if (gimple_call_num_args (_c1) == 2)
7295 : : {
7296 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7297 : 0 : _q20 = do_valueize (valueize, _q20);
7298 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7299 : 0 : _q21 = do_valueize (valueize, _q21);
7300 : 0 : {
7301 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
7302 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF32))
7303 : 0 : return true;
7304 : : }
7305 : : }
7306 : : break;
7307 : : default:;
7308 : : }
7309 : : }
7310 : : break;
7311 : 330 : default:;
7312 : : }
7313 : 330 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
7314 : : {
7315 : 0 : {
7316 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7317 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF32))
7318 : 0 : return true;
7319 : : }
7320 : : }
7321 : 330 : switch (TREE_CODE (_p1))
7322 : : {
7323 : 330 : case SSA_NAME:
7324 : 330 : if (gimple *_d1 = get_def (valueize, _p1))
7325 : : {
7326 : 213 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7327 : 426 : switch (gimple_assign_rhs_code (_a1))
7328 : : {
7329 : 0 : case NEGATE_EXPR:
7330 : 0 : {
7331 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
7332 : 0 : _q30 = do_valueize (valueize, _q30);
7333 : 0 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
7334 : : {
7335 : 0 : {
7336 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7337 : 0 : if (gimple_simplify_301 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF32))
7338 : 0 : return true;
7339 : : }
7340 : : }
7341 : : break;
7342 : : }
7343 : : default:;
7344 : : }
7345 : : }
7346 : : break;
7347 : 330 : default:;
7348 : : }
7349 : 330 : if (tree_expr_nonnegative_p (_p1))
7350 : : {
7351 : 0 : {
7352 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7353 : 0 : if (gimple_simplify_302 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF32))
7354 : 0 : return true;
7355 : : }
7356 : : }
7357 : : return false;
7358 : : }
7359 : :
7360 : : bool
7361 : 2055 : gimple_simplify_CFN_BUILT_IN_COPYSIGNF128 (gimple_match_op *res_op, gimple_seq *seq,
7362 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7363 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
7364 : : {
7365 : 2055 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7366 : 2055 : switch (TREE_CODE (_p0))
7367 : : {
7368 : 1028 : case SSA_NAME:
7369 : 1028 : if (gimple *_d1 = get_def (valueize, _p0))
7370 : : {
7371 : 635 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7372 : 810 : switch (gimple_assign_rhs_code (_a1))
7373 : : {
7374 : 12 : case NEGATE_EXPR:
7375 : 12 : {
7376 : 12 : tree _q20 = gimple_assign_rhs1 (_a1);
7377 : 12 : _q20 = do_valueize (valueize, _q20);
7378 : 12 : {
7379 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
7380 : 12 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGNF128;
7381 : 12 : gimple_seq *lseq = seq;
7382 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1873;
7383 : 12 : {
7384 : 12 : res_op->set_op (copysigns, type, 2);
7385 : 12 : res_op->ops[0] = captures[0];
7386 : 12 : res_op->ops[1] = captures[1];
7387 : 12 : res_op->resimplify (lseq, valueize);
7388 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
7389 : 12 : return true;
7390 : : }
7391 : 0 : next_after_fail1873:;
7392 : : }
7393 : 0 : break;
7394 : : }
7395 : 0 : case ABS_EXPR:
7396 : 0 : {
7397 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
7398 : 0 : _q20 = do_valueize (valueize, _q20);
7399 : 0 : {
7400 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
7401 : 0 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGNF128;
7402 : 0 : gimple_seq *lseq = seq;
7403 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1874;
7404 : 0 : {
7405 : 0 : res_op->set_op (copysigns, type, 2);
7406 : 0 : res_op->ops[0] = captures[0];
7407 : 0 : res_op->ops[1] = captures[1];
7408 : 0 : res_op->resimplify (lseq, valueize);
7409 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
7410 : 0 : return true;
7411 : : }
7412 : 0 : next_after_fail1874:;
7413 : : }
7414 : 0 : break;
7415 : : }
7416 : : default:;
7417 : : }
7418 : : }
7419 : : break;
7420 : 1016 : case REAL_CST:
7421 : 1016 : {
7422 : 1016 : {
7423 : 1016 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7424 : 1016 : if (gimple_simplify_297 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF128))
7425 : 0 : return true;
7426 : : }
7427 : 1016 : break;
7428 : : }
7429 : 2043 : default:;
7430 : : }
7431 : 2043 : switch (TREE_CODE (_p1))
7432 : : {
7433 : 0 : case REAL_CST:
7434 : 0 : {
7435 : 0 : {
7436 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7437 : 0 : if (gimple_simplify_298 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF128))
7438 : 0 : return true;
7439 : : }
7440 : 0 : break;
7441 : : }
7442 : 2043 : default:;
7443 : : }
7444 : 2043 : switch (TREE_CODE (_p0))
7445 : : {
7446 : 1016 : case SSA_NAME:
7447 : 1016 : if (gimple *_d1 = get_def (valueize, _p0))
7448 : : {
7449 : 623 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
7450 : 22 : switch (gimple_call_combined_fn (_c1))
7451 : : {
7452 : 0 : case CFN_BUILT_IN_COPYSIGNF128:
7453 : 0 : if (gimple_call_num_args (_c1) == 2)
7454 : : {
7455 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7456 : 0 : _q20 = do_valueize (valueize, _q20);
7457 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7458 : 0 : _q21 = do_valueize (valueize, _q21);
7459 : 0 : {
7460 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
7461 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF128))
7462 : 0 : return true;
7463 : : }
7464 : : }
7465 : : break;
7466 : : default:;
7467 : : }
7468 : : }
7469 : : break;
7470 : 2043 : default:;
7471 : : }
7472 : 2043 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
7473 : : {
7474 : 0 : {
7475 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7476 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF128))
7477 : 0 : return true;
7478 : : }
7479 : : }
7480 : 2043 : switch (TREE_CODE (_p1))
7481 : : {
7482 : 1960 : case SSA_NAME:
7483 : 1960 : if (gimple *_d1 = get_def (valueize, _p1))
7484 : : {
7485 : 917 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7486 : 470 : switch (gimple_assign_rhs_code (_a1))
7487 : : {
7488 : 0 : case NEGATE_EXPR:
7489 : 0 : {
7490 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
7491 : 0 : _q30 = do_valueize (valueize, _q30);
7492 : 0 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
7493 : : {
7494 : 0 : {
7495 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7496 : 0 : if (gimple_simplify_301 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF128))
7497 : 0 : return true;
7498 : : }
7499 : : }
7500 : : break;
7501 : : }
7502 : : default:;
7503 : : }
7504 : : }
7505 : : break;
7506 : 2043 : default:;
7507 : : }
7508 : 2043 : if (tree_expr_nonnegative_p (_p1))
7509 : : {
7510 : 0 : {
7511 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7512 : 0 : if (gimple_simplify_302 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF128))
7513 : 0 : return true;
7514 : : }
7515 : : }
7516 : : return false;
7517 : : }
7518 : :
7519 : : bool
7520 : 342 : gimple_simplify_CFN_BUILT_IN_COPYSIGNF64X (gimple_match_op *res_op, gimple_seq *seq,
7521 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7522 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
7523 : : {
7524 : 342 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7525 : 342 : switch (TREE_CODE (_p0))
7526 : : {
7527 : 342 : case SSA_NAME:
7528 : 342 : if (gimple *_d1 = get_def (valueize, _p0))
7529 : : {
7530 : 225 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7531 : 438 : switch (gimple_assign_rhs_code (_a1))
7532 : : {
7533 : 12 : case NEGATE_EXPR:
7534 : 12 : {
7535 : 12 : tree _q20 = gimple_assign_rhs1 (_a1);
7536 : 12 : _q20 = do_valueize (valueize, _q20);
7537 : 12 : {
7538 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
7539 : 12 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGNF64X;
7540 : 12 : gimple_seq *lseq = seq;
7541 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1877;
7542 : 12 : {
7543 : 12 : res_op->set_op (copysigns, type, 2);
7544 : 12 : res_op->ops[0] = captures[0];
7545 : 12 : res_op->ops[1] = captures[1];
7546 : 12 : res_op->resimplify (lseq, valueize);
7547 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
7548 : 12 : return true;
7549 : : }
7550 : 0 : next_after_fail1877:;
7551 : : }
7552 : 0 : break;
7553 : : }
7554 : 0 : case ABS_EXPR:
7555 : 0 : {
7556 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
7557 : 0 : _q20 = do_valueize (valueize, _q20);
7558 : 0 : {
7559 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
7560 : 0 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGNF64X;
7561 : 0 : gimple_seq *lseq = seq;
7562 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1878;
7563 : 0 : {
7564 : 0 : res_op->set_op (copysigns, type, 2);
7565 : 0 : res_op->ops[0] = captures[0];
7566 : 0 : res_op->ops[1] = captures[1];
7567 : 0 : res_op->resimplify (lseq, valueize);
7568 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
7569 : 0 : return true;
7570 : : }
7571 : 0 : next_after_fail1878:;
7572 : : }
7573 : 0 : break;
7574 : : }
7575 : : default:;
7576 : : }
7577 : : }
7578 : : break;
7579 : 0 : case REAL_CST:
7580 : 0 : {
7581 : 0 : {
7582 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7583 : 0 : if (gimple_simplify_297 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF64X))
7584 : 0 : return true;
7585 : : }
7586 : 0 : break;
7587 : : }
7588 : 330 : default:;
7589 : : }
7590 : 330 : switch (TREE_CODE (_p1))
7591 : : {
7592 : 0 : case REAL_CST:
7593 : 0 : {
7594 : 0 : {
7595 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7596 : 0 : if (gimple_simplify_298 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF64X))
7597 : 0 : return true;
7598 : : }
7599 : 0 : break;
7600 : : }
7601 : 330 : default:;
7602 : : }
7603 : 330 : switch (TREE_CODE (_p0))
7604 : : {
7605 : 330 : case SSA_NAME:
7606 : 330 : if (gimple *_d1 = get_def (valueize, _p0))
7607 : : {
7608 : 213 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
7609 : 0 : switch (gimple_call_combined_fn (_c1))
7610 : : {
7611 : 0 : case CFN_BUILT_IN_COPYSIGNF64X:
7612 : 0 : if (gimple_call_num_args (_c1) == 2)
7613 : : {
7614 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7615 : 0 : _q20 = do_valueize (valueize, _q20);
7616 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7617 : 0 : _q21 = do_valueize (valueize, _q21);
7618 : 0 : {
7619 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
7620 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF64X))
7621 : 0 : return true;
7622 : : }
7623 : : }
7624 : : break;
7625 : : default:;
7626 : : }
7627 : : }
7628 : : break;
7629 : 330 : default:;
7630 : : }
7631 : 330 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
7632 : : {
7633 : 0 : {
7634 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7635 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF64X))
7636 : 0 : return true;
7637 : : }
7638 : : }
7639 : 330 : switch (TREE_CODE (_p1))
7640 : : {
7641 : 330 : case SSA_NAME:
7642 : 330 : if (gimple *_d1 = get_def (valueize, _p1))
7643 : : {
7644 : 213 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7645 : 426 : switch (gimple_assign_rhs_code (_a1))
7646 : : {
7647 : 0 : case NEGATE_EXPR:
7648 : 0 : {
7649 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
7650 : 0 : _q30 = do_valueize (valueize, _q30);
7651 : 0 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
7652 : : {
7653 : 0 : {
7654 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7655 : 0 : if (gimple_simplify_301 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF64X))
7656 : 0 : return true;
7657 : : }
7658 : : }
7659 : : break;
7660 : : }
7661 : : default:;
7662 : : }
7663 : : }
7664 : : break;
7665 : 330 : default:;
7666 : : }
7667 : 330 : if (tree_expr_nonnegative_p (_p1))
7668 : : {
7669 : 0 : {
7670 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7671 : 0 : if (gimple_simplify_302 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF64X))
7672 : 0 : return true;
7673 : : }
7674 : : }
7675 : : return false;
7676 : : }
7677 : :
7678 : : bool
7679 : 3672 : gimple_simplify_CFN_COPYSIGN (gimple_match_op *res_op, gimple_seq *seq,
7680 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7681 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
7682 : : {
7683 : 3672 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7684 : 3672 : switch (TREE_CODE (_p0))
7685 : : {
7686 : 3488 : case SSA_NAME:
7687 : 3488 : if (gimple *_d1 = get_def (valueize, _p0))
7688 : : {
7689 : 3085 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7690 : 3450 : switch (gimple_assign_rhs_code (_a1))
7691 : : {
7692 : 0 : case NEGATE_EXPR:
7693 : 0 : {
7694 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
7695 : 0 : _q20 = do_valueize (valueize, _q20);
7696 : 0 : {
7697 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
7698 : 0 : const combined_fn copysigns = CFN_COPYSIGN;
7699 : 0 : gimple_seq *lseq = seq;
7700 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1881;
7701 : 0 : {
7702 : 0 : res_op->set_op (copysigns, type, 2);
7703 : 0 : res_op->ops[0] = captures[0];
7704 : 0 : res_op->ops[1] = captures[1];
7705 : 0 : res_op->resimplify (lseq, valueize);
7706 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
7707 : 0 : return true;
7708 : : }
7709 : 0 : next_after_fail1881:;
7710 : : }
7711 : 0 : break;
7712 : : }
7713 : 0 : case ABS_EXPR:
7714 : 0 : {
7715 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
7716 : 0 : _q20 = do_valueize (valueize, _q20);
7717 : 0 : {
7718 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
7719 : 0 : const combined_fn copysigns = CFN_COPYSIGN;
7720 : 0 : gimple_seq *lseq = seq;
7721 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1882;
7722 : 0 : {
7723 : 0 : res_op->set_op (copysigns, type, 2);
7724 : 0 : res_op->ops[0] = captures[0];
7725 : 0 : res_op->ops[1] = captures[1];
7726 : 0 : res_op->resimplify (lseq, valueize);
7727 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
7728 : 0 : return true;
7729 : : }
7730 : 0 : next_after_fail1882:;
7731 : : }
7732 : 0 : break;
7733 : : }
7734 : : default:;
7735 : : }
7736 : : }
7737 : : break;
7738 : 0 : case REAL_CST:
7739 : 0 : {
7740 : 0 : {
7741 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7742 : 0 : if (gimple_simplify_297 (res_op, seq, valueize, type, captures, CFN_COPYSIGN))
7743 : 0 : return true;
7744 : : }
7745 : 0 : break;
7746 : : }
7747 : 3672 : default:;
7748 : : }
7749 : 3672 : switch (TREE_CODE (_p1))
7750 : : {
7751 : 2986 : case REAL_CST:
7752 : 2986 : {
7753 : 2986 : {
7754 : 2986 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7755 : 2986 : if (gimple_simplify_298 (res_op, seq, valueize, type, captures, CFN_COPYSIGN))
7756 : 0 : return true;
7757 : : }
7758 : 2986 : break;
7759 : : }
7760 : 3672 : default:;
7761 : : }
7762 : 3672 : switch (TREE_CODE (_p0))
7763 : : {
7764 : 3488 : case SSA_NAME:
7765 : 3488 : if (gimple *_d1 = get_def (valueize, _p0))
7766 : : {
7767 : 3085 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
7768 : 200 : switch (gimple_call_combined_fn (_c1))
7769 : : {
7770 : 0 : case CFN_COPYSIGN:
7771 : 0 : if (gimple_call_num_args (_c1) == 2)
7772 : : {
7773 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7774 : 0 : _q20 = do_valueize (valueize, _q20);
7775 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7776 : 0 : _q21 = do_valueize (valueize, _q21);
7777 : 0 : {
7778 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
7779 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, CFN_COPYSIGN))
7780 : 0 : return true;
7781 : : }
7782 : : }
7783 : : break;
7784 : : default:;
7785 : : }
7786 : : }
7787 : : break;
7788 : 3672 : default:;
7789 : : }
7790 : 3672 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
7791 : : {
7792 : 0 : {
7793 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7794 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, CFN_COPYSIGN))
7795 : 0 : return true;
7796 : : }
7797 : : }
7798 : 3672 : switch (TREE_CODE (_p1))
7799 : : {
7800 : 658 : case SSA_NAME:
7801 : 658 : if (gimple *_d1 = get_def (valueize, _p1))
7802 : : {
7803 : 369 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7804 : 690 : switch (gimple_assign_rhs_code (_a1))
7805 : : {
7806 : 0 : case NEGATE_EXPR:
7807 : 0 : {
7808 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
7809 : 0 : _q30 = do_valueize (valueize, _q30);
7810 : 0 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
7811 : : {
7812 : 0 : {
7813 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7814 : 0 : if (gimple_simplify_301 (res_op, seq, valueize, type, captures, CFN_COPYSIGN))
7815 : 0 : return true;
7816 : : }
7817 : : }
7818 : : break;
7819 : : }
7820 : : default:;
7821 : : }
7822 : : }
7823 : : break;
7824 : 3672 : default:;
7825 : : }
7826 : 3672 : if (tree_expr_nonnegative_p (_p1))
7827 : : {
7828 : 0 : {
7829 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7830 : 0 : if (gimple_simplify_302 (res_op, seq, valueize, type, captures, CFN_COPYSIGN))
7831 : 0 : return true;
7832 : : }
7833 : : }
7834 : : return false;
7835 : : }
7836 : :
7837 : : bool
7838 : 11217 : gimple_simplify_FLOOR_DIV_EXPR (gimple_match_op *res_op, gimple_seq *seq,
7839 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7840 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
7841 : : {
7842 : 11217 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7843 : 11217 : if (integer_onep (_p1))
7844 : : {
7845 : 112 : {
7846 : 112 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7847 : 112 : if (gimple_simplify_185 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7848 : 112 : return true;
7849 : : }
7850 : : }
7851 : 11105 : if (integer_zerop (_p0))
7852 : : {
7853 : 510 : {
7854 : 510 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7855 : 510 : if (gimple_simplify_305 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7856 : 510 : return true;
7857 : : }
7858 : : }
7859 : 10595 : switch (TREE_CODE (_p1))
7860 : : {
7861 : 4502 : case SSA_NAME:
7862 : 4502 : {
7863 : 4502 : {
7864 : 4502 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7865 : 4502 : if (gimple_simplify_307 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7866 : 0 : return true;
7867 : : }
7868 : 4502 : break;
7869 : : }
7870 : 10595 : default:;
7871 : : }
7872 : 10595 : if (integer_minus_onep (_p1))
7873 : : {
7874 : 318 : {
7875 : 318 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7876 : 318 : if (gimple_simplify_306 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7877 : 318 : return true;
7878 : : }
7879 : : }
7880 : 10277 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
7881 : : {
7882 : 0 : {
7883 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7884 : 0 : if (gimple_simplify_308 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7885 : 0 : return true;
7886 : : }
7887 : : }
7888 : 10277 : switch (TREE_CODE (_p1))
7889 : : {
7890 : 4502 : case SSA_NAME:
7891 : 4502 : if (gimple *_d1 = get_def (valueize, _p1))
7892 : : {
7893 : 3685 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7894 : 3852 : switch (gimple_assign_rhs_code (_a1))
7895 : : {
7896 : 0 : case ABS_EXPR:
7897 : 0 : {
7898 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
7899 : 0 : _q30 = do_valueize (valueize, _q30);
7900 : 0 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
7901 : : {
7902 : 0 : {
7903 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7904 : 0 : if (gimple_simplify_309 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7905 : 0 : return true;
7906 : : }
7907 : : }
7908 : : break;
7909 : : }
7910 : : default:;
7911 : : }
7912 : : }
7913 : : break;
7914 : 10277 : default:;
7915 : : }
7916 : 10277 : switch (TREE_CODE (_p0))
7917 : : {
7918 : 8425 : case SSA_NAME:
7919 : 8425 : if (gimple *_d1 = get_def (valueize, _p0))
7920 : : {
7921 : 5925 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7922 : 5563 : switch (gimple_assign_rhs_code (_a1))
7923 : : {
7924 : 24 : case ABS_EXPR:
7925 : 24 : {
7926 : 24 : tree _q20 = gimple_assign_rhs1 (_a1);
7927 : 24 : _q20 = do_valueize (valueize, _q20);
7928 : 24 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
7929 : : {
7930 : 0 : {
7931 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
7932 : 0 : if (gimple_simplify_309 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7933 : 0 : return true;
7934 : : }
7935 : : }
7936 : : break;
7937 : : }
7938 : : default:;
7939 : : }
7940 : : }
7941 : : break;
7942 : 10277 : default:;
7943 : : }
7944 : 10277 : switch (TREE_CODE (_p1))
7945 : : {
7946 : 4502 : case SSA_NAME:
7947 : 4502 : if (gimple *_d1 = get_def (valueize, _p1))
7948 : : {
7949 : 3685 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7950 : 3852 : switch (gimple_assign_rhs_code (_a1))
7951 : : {
7952 : 0 : case NEGATE_EXPR:
7953 : 0 : {
7954 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
7955 : 0 : _q30 = do_valueize (valueize, _q30);
7956 : 0 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
7957 : : {
7958 : 0 : {
7959 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7960 : 0 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7961 : 0 : return true;
7962 : : }
7963 : : }
7964 : : break;
7965 : : }
7966 : : default:;
7967 : : }
7968 : : }
7969 : : break;
7970 : 10277 : default:;
7971 : : }
7972 : 10277 : switch (TREE_CODE (_p0))
7973 : : {
7974 : 8425 : case SSA_NAME:
7975 : 8425 : if (gimple *_d1 = get_def (valueize, _p0))
7976 : : {
7977 : 5925 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7978 : 5563 : switch (gimple_assign_rhs_code (_a1))
7979 : : {
7980 : 150 : case NEGATE_EXPR:
7981 : 150 : {
7982 : 150 : tree _q20 = gimple_assign_rhs1 (_a1);
7983 : 150 : _q20 = do_valueize (valueize, _q20);
7984 : 150 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
7985 : : {
7986 : 0 : {
7987 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
7988 : 0 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
7989 : 0 : return true;
7990 : : }
7991 : : }
7992 : : break;
7993 : : }
7994 : : default:;
7995 : : }
7996 : : }
7997 : : break;
7998 : 10277 : default:;
7999 : : }
8000 : 10277 : {
8001 : 10277 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
8002 : 10277 : if (gimple_simplify_318 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR, TRUNC_DIV_EXPR))
8003 : 0 : return true;
8004 : : }
8005 : 10277 : switch (TREE_CODE (_p0))
8006 : : {
8007 : 8425 : case SSA_NAME:
8008 : 8425 : if (gimple *_d1 = get_def (valueize, _p0))
8009 : : {
8010 : 5925 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
8011 : 5563 : switch (gimple_assign_rhs_code (_a1))
8012 : : {
8013 : 350 : CASE_CONVERT:
8014 : 350 : {
8015 : 350 : tree _q20 = gimple_assign_rhs1 (_a1);
8016 : 350 : _q20 = do_valueize (valueize, _q20);
8017 : 350 : switch (TREE_CODE (_q20))
8018 : : {
8019 : 350 : case SSA_NAME:
8020 : 350 : if (gimple *_d2 = get_def (valueize, _q20))
8021 : : {
8022 : 315 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
8023 : 118 : switch (gimple_assign_rhs_code (_a2))
8024 : : {
8025 : 0 : case BIT_AND_EXPR:
8026 : 0 : {
8027 : 0 : tree _q30 = gimple_assign_rhs1 (_a2);
8028 : 0 : _q30 = do_valueize (valueize, _q30);
8029 : 0 : tree _q31 = gimple_assign_rhs2 (_a2);
8030 : 0 : _q31 = do_valueize (valueize, _q31);
8031 : 0 : if (tree_swap_operands_p (_q30, _q31))
8032 : 0 : std::swap (_q30, _q31);
8033 : 0 : switch (TREE_CODE (_q31))
8034 : : {
8035 : 0 : case INTEGER_CST:
8036 : 0 : {
8037 : 0 : switch (TREE_CODE (_p1))
8038 : : {
8039 : 0 : case INTEGER_CST:
8040 : 0 : {
8041 : 0 : {
8042 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
8043 : 0 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
8044 : 0 : return true;
8045 : : }
8046 : 0 : break;
8047 : : }
8048 : : default:;
8049 : : }
8050 : : break;
8051 : : }
8052 : : default:;
8053 : : }
8054 : 10277 : break;
8055 : : }
8056 : : default:;
8057 : : }
8058 : : }
8059 : : break;
8060 : : default:;
8061 : : }
8062 : : break;
8063 : : }
8064 : 0 : case BIT_AND_EXPR:
8065 : 0 : {
8066 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8067 : 0 : _q20 = do_valueize (valueize, _q20);
8068 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
8069 : 0 : _q21 = do_valueize (valueize, _q21);
8070 : 0 : if (tree_swap_operands_p (_q20, _q21))
8071 : 0 : std::swap (_q20, _q21);
8072 : 0 : switch (TREE_CODE (_q21))
8073 : : {
8074 : 0 : case INTEGER_CST:
8075 : 0 : {
8076 : 0 : switch (TREE_CODE (_p1))
8077 : : {
8078 : 0 : case INTEGER_CST:
8079 : 0 : {
8080 : 0 : {
8081 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
8082 : 0 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
8083 : 0 : return true;
8084 : : }
8085 : 0 : break;
8086 : : }
8087 : : default:;
8088 : : }
8089 : : break;
8090 : : }
8091 : : default:;
8092 : : }
8093 : 10277 : break;
8094 : : }
8095 : 0 : case MULT_EXPR:
8096 : 0 : {
8097 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8098 : 0 : _q20 = do_valueize (valueize, _q20);
8099 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
8100 : 0 : _q21 = do_valueize (valueize, _q21);
8101 : 0 : if (tree_swap_operands_p (_q20, _q21))
8102 : 0 : std::swap (_q20, _q21);
8103 : 0 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
8104 : : {
8105 : 0 : {
8106 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
8107 : 0 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
8108 : 0 : return true;
8109 : : }
8110 : : }
8111 : 0 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
8112 : : {
8113 : 0 : {
8114 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
8115 : 0 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
8116 : 0 : return true;
8117 : : }
8118 : : }
8119 : 0 : switch (TREE_CODE (_q21))
8120 : : {
8121 : 0 : case INTEGER_CST:
8122 : 0 : {
8123 : 0 : switch (TREE_CODE (_p1))
8124 : : {
8125 : 0 : case SSA_NAME:
8126 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
8127 : : {
8128 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
8129 : 0 : switch (gimple_assign_rhs_code (_a2))
8130 : : {
8131 : 0 : case MULT_EXPR:
8132 : 0 : {
8133 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
8134 : 0 : _q50 = do_valueize (valueize, _q50);
8135 : 0 : tree _q51 = gimple_assign_rhs2 (_a2);
8136 : 0 : _q51 = do_valueize (valueize, _q51);
8137 : 0 : if (tree_swap_operands_p (_q50, _q51))
8138 : 0 : std::swap (_q50, _q51);
8139 : 0 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
8140 : : {
8141 : 0 : switch (TREE_CODE (_q51))
8142 : : {
8143 : 0 : case INTEGER_CST:
8144 : 0 : {
8145 : 0 : {
8146 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
8147 : 0 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
8148 : 0 : return true;
8149 : : }
8150 : 0 : break;
8151 : : }
8152 : : default:;
8153 : : }
8154 : : }
8155 : 10277 : break;
8156 : : }
8157 : : default:;
8158 : : }
8159 : : }
8160 : : break;
8161 : 0 : case INTEGER_CST:
8162 : 0 : {
8163 : 0 : {
8164 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
8165 : 0 : if (gimple_simplify_314 (res_op, seq, valueize, type, captures, FLOOR_DIV_EXPR))
8166 : 0 : return true;
8167 : : }
8168 : 0 : break;
8169 : : }
8170 : : default:;
8171 : : }
8172 : : break;
8173 : : }
8174 : : default:;
8175 : : }
8176 : 10277 : break;
8177 : : }
8178 : 0 : case VEC_COND_EXPR:
8179 : 0 : {
8180 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8181 : 0 : _q20 = do_valueize (valueize, _q20);
8182 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
8183 : 0 : _q21 = do_valueize (valueize, _q21);
8184 : 0 : tree _q22 = gimple_assign_rhs3 (_a1);
8185 : 0 : _q22 = do_valueize (valueize, _q22);
8186 : 0 : switch (TREE_CODE (_p1))
8187 : : {
8188 : 0 : case SSA_NAME:
8189 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
8190 : : {
8191 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
8192 : 0 : switch (gimple_assign_rhs_code (_a2))
8193 : : {
8194 : 0 : case VEC_COND_EXPR:
8195 : 0 : {
8196 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
8197 : 0 : _q60 = do_valueize (valueize, _q60);
8198 : 0 : tree _q61 = gimple_assign_rhs2 (_a2);
8199 : 0 : _q61 = do_valueize (valueize, _q61);
8200 : 0 : tree _q62 = gimple_assign_rhs3 (_a2);
8201 : 0 : _q62 = do_valueize (valueize, _q62);
8202 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
8203 : : {
8204 : 0 : {
8205 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
8206 : 0 : if (TREE_CODE_CLASS (FLOOR_DIV_EXPR) != tcc_comparison
8207 : : || types_match (type, TREE_TYPE (captures[2]))
8208 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
8209 : : || (optimize_vectors_before_lowering_p ()
8210 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
8211 : : TREE_TYPE (captures[1]), ERROR_MARK))
8212 : : )
8213 : : {
8214 : 0 : gimple_seq *lseq = seq;
8215 : 0 : if (lseq
8216 : 0 : && (!single_use (captures[0])
8217 : 0 : || !single_use (captures[4])))
8218 : 0 : lseq = NULL;
8219 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1894;
8220 : 0 : {
8221 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
8222 : 0 : res_op->ops[0] = captures[1];
8223 : 0 : {
8224 : 0 : tree _o1[2], _r1;
8225 : 0 : _o1[0] = captures[2];
8226 : 0 : _o1[1] = captures[5];
8227 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), FLOOR_DIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8228 : 0 : tem_op.resimplify (NULL, valueize);
8229 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
8230 : 0 : if (!_r1) goto next_after_fail1894;
8231 : 0 : res_op->ops[1] = _r1;
8232 : : }
8233 : 0 : {
8234 : 0 : tree _o1[2], _r1;
8235 : 0 : _o1[0] = captures[3];
8236 : 0 : _o1[1] = captures[6];
8237 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), FLOOR_DIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8238 : 0 : tem_op.resimplify (NULL, valueize);
8239 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
8240 : 0 : if (!_r1) goto next_after_fail1894;
8241 : 0 : res_op->ops[2] = _r1;
8242 : : }
8243 : 0 : res_op->resimplify (lseq, valueize);
8244 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 925, __FILE__, __LINE__, true);
8245 : 0 : return true;
8246 : : }
8247 : 0 : next_after_fail1894:;
8248 : : }
8249 : : }
8250 : : }
8251 : : break;
8252 : : }
8253 : : default:;
8254 : : }
8255 : : }
8256 : : break;
8257 : 0 : default:;
8258 : : }
8259 : 0 : {
8260 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
8261 : 0 : if (TREE_CODE_CLASS (FLOOR_DIV_EXPR) != tcc_comparison
8262 : : || types_match (type, TREE_TYPE (captures[2]))
8263 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
8264 : : || (optimize_vectors_before_lowering_p ()
8265 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
8266 : : TREE_TYPE (captures[1]), ERROR_MARK))
8267 : : )
8268 : : {
8269 : 0 : gimple_seq *lseq = seq;
8270 : 0 : if (lseq
8271 : 0 : && (!single_use (captures[0])))
8272 : 0 : lseq = NULL;
8273 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1895;
8274 : 0 : {
8275 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
8276 : 0 : res_op->ops[0] = captures[1];
8277 : 0 : {
8278 : 0 : tree _o1[2], _r1;
8279 : 0 : _o1[0] = captures[2];
8280 : 0 : _o1[1] = captures[4];
8281 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), FLOOR_DIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8282 : 0 : tem_op.resimplify (NULL, valueize);
8283 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
8284 : 0 : if (!_r1) goto next_after_fail1895;
8285 : 0 : res_op->ops[1] = _r1;
8286 : : }
8287 : 0 : {
8288 : 0 : tree _o1[2], _r1;
8289 : 0 : _o1[0] = captures[3];
8290 : 0 : _o1[1] = captures[4];
8291 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), FLOOR_DIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8292 : 0 : tem_op.resimplify (NULL, valueize);
8293 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
8294 : 0 : if (!_r1) goto next_after_fail1895;
8295 : 0 : res_op->ops[2] = _r1;
8296 : : }
8297 : 0 : res_op->resimplify (lseq, valueize);
8298 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 926, __FILE__, __LINE__, true);
8299 : 0 : return true;
8300 : : }
8301 : 0 : next_after_fail1895:;
8302 : : }
8303 : : }
8304 : 0 : break;
8305 : : }
8306 : : default:;
8307 : : }
8308 : : }
8309 : : break;
8310 : 10277 : default:;
8311 : : }
8312 : 10277 : switch (TREE_CODE (_p1))
8313 : : {
8314 : 4502 : case SSA_NAME:
8315 : 4502 : if (gimple *_d1 = get_def (valueize, _p1))
8316 : : {
8317 : 3685 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
8318 : 3852 : switch (gimple_assign_rhs_code (_a1))
8319 : : {
8320 : 0 : case VEC_COND_EXPR:
8321 : 0 : {
8322 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
8323 : 0 : _q30 = do_valueize (valueize, _q30);
8324 : 0 : tree _q31 = gimple_assign_rhs2 (_a1);
8325 : 0 : _q31 = do_valueize (valueize, _q31);
8326 : 0 : tree _q32 = gimple_assign_rhs3 (_a1);
8327 : 0 : _q32 = do_valueize (valueize, _q32);
8328 : 0 : {
8329 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
8330 : 0 : if (TREE_CODE_CLASS (FLOOR_DIV_EXPR) != tcc_comparison
8331 : : || types_match (type, TREE_TYPE (captures[3]))
8332 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]), ERROR_MARK)
8333 : : || (optimize_vectors_before_lowering_p ()
8334 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]),
8335 : : TREE_TYPE (captures[2]), ERROR_MARK))
8336 : : )
8337 : : {
8338 : 0 : gimple_seq *lseq = seq;
8339 : 0 : if (lseq
8340 : 0 : && (!single_use (captures[1])))
8341 : 0 : lseq = NULL;
8342 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1896;
8343 : 0 : {
8344 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
8345 : 0 : res_op->ops[0] = captures[2];
8346 : 0 : {
8347 : 0 : tree _o1[2], _r1;
8348 : 0 : _o1[0] = captures[0];
8349 : 0 : _o1[1] = captures[3];
8350 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), FLOOR_DIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8351 : 0 : tem_op.resimplify (NULL, valueize);
8352 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
8353 : 0 : if (!_r1) goto next_after_fail1896;
8354 : 0 : res_op->ops[1] = _r1;
8355 : : }
8356 : 0 : {
8357 : 0 : tree _o1[2], _r1;
8358 : 0 : _o1[0] = captures[0];
8359 : 0 : _o1[1] = captures[4];
8360 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), FLOOR_DIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8361 : 0 : tem_op.resimplify (NULL, valueize);
8362 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
8363 : 0 : if (!_r1) goto next_after_fail1896;
8364 : 0 : res_op->ops[2] = _r1;
8365 : : }
8366 : 0 : res_op->resimplify (lseq, valueize);
8367 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 927, __FILE__, __LINE__, true);
8368 : 0 : return true;
8369 : : }
8370 : 0 : next_after_fail1896:;
8371 : : }
8372 : : }
8373 : 0 : break;
8374 : : }
8375 : : default:;
8376 : : }
8377 : : }
8378 : : break;
8379 : : default:;
8380 : : }
8381 : : return false;
8382 : : }
8383 : :
8384 : : bool
8385 : 983476 : gimple_simplify_EXACT_DIV_EXPR (gimple_match_op *res_op, gimple_seq *seq,
8386 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
8387 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
8388 : : {
8389 : 983476 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
8390 : 983476 : if (integer_onep (_p1))
8391 : : {
8392 : 0 : {
8393 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
8394 : 0 : if (gimple_simplify_185 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8395 : 0 : return true;
8396 : : }
8397 : : }
8398 : 983476 : if (integer_zerop (_p0))
8399 : : {
8400 : 0 : {
8401 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
8402 : 0 : if (gimple_simplify_305 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8403 : 0 : return true;
8404 : : }
8405 : : }
8406 : 983476 : switch (TREE_CODE (_p1))
8407 : : {
8408 : 127 : case SSA_NAME:
8409 : 127 : {
8410 : 127 : {
8411 : 127 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
8412 : 127 : if (gimple_simplify_307 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8413 : 0 : return true;
8414 : : }
8415 : 127 : break;
8416 : : }
8417 : 983476 : default:;
8418 : : }
8419 : 983476 : if (integer_minus_onep (_p1))
8420 : : {
8421 : 0 : {
8422 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
8423 : 0 : if (gimple_simplify_306 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8424 : 0 : return true;
8425 : : }
8426 : : }
8427 : 983476 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
8428 : : {
8429 : 0 : {
8430 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
8431 : 0 : if (gimple_simplify_308 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8432 : 0 : return true;
8433 : : }
8434 : : }
8435 : 983476 : switch (TREE_CODE (_p1))
8436 : : {
8437 : 127 : case SSA_NAME:
8438 : 127 : if (gimple *_d1 = get_def (valueize, _p1))
8439 : : {
8440 : 102 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
8441 : 102 : switch (gimple_assign_rhs_code (_a1))
8442 : : {
8443 : 0 : case ABS_EXPR:
8444 : 0 : {
8445 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
8446 : 0 : _q30 = do_valueize (valueize, _q30);
8447 : 0 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
8448 : : {
8449 : 0 : {
8450 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
8451 : 0 : if (gimple_simplify_309 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8452 : 0 : return true;
8453 : : }
8454 : : }
8455 : : break;
8456 : : }
8457 : : default:;
8458 : : }
8459 : : }
8460 : : break;
8461 : 983476 : default:;
8462 : : }
8463 : 983476 : switch (TREE_CODE (_p0))
8464 : : {
8465 : 974962 : case SSA_NAME:
8466 : 974962 : if (gimple *_d1 = get_def (valueize, _p0))
8467 : : {
8468 : 687949 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
8469 : 678379 : switch (gimple_assign_rhs_code (_a1))
8470 : : {
8471 : 0 : case ABS_EXPR:
8472 : 0 : {
8473 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8474 : 0 : _q20 = do_valueize (valueize, _q20);
8475 : 0 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
8476 : : {
8477 : 0 : {
8478 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8479 : 0 : if (gimple_simplify_309 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8480 : 0 : return true;
8481 : : }
8482 : : }
8483 : : break;
8484 : : }
8485 : : default:;
8486 : : }
8487 : : }
8488 : : break;
8489 : 983476 : default:;
8490 : : }
8491 : 983476 : switch (TREE_CODE (_p1))
8492 : : {
8493 : 127 : case SSA_NAME:
8494 : 127 : if (gimple *_d1 = get_def (valueize, _p1))
8495 : : {
8496 : 102 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
8497 : 102 : switch (gimple_assign_rhs_code (_a1))
8498 : : {
8499 : 0 : case NEGATE_EXPR:
8500 : 0 : {
8501 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
8502 : 0 : _q30 = do_valueize (valueize, _q30);
8503 : 0 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
8504 : : {
8505 : 0 : {
8506 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
8507 : 0 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8508 : 0 : return true;
8509 : : }
8510 : : }
8511 : : break;
8512 : : }
8513 : : default:;
8514 : : }
8515 : : }
8516 : : break;
8517 : 983476 : default:;
8518 : : }
8519 : 983476 : switch (TREE_CODE (_p0))
8520 : : {
8521 : 974962 : case SSA_NAME:
8522 : 974962 : if (gimple *_d1 = get_def (valueize, _p0))
8523 : : {
8524 : 687949 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
8525 : 678379 : switch (gimple_assign_rhs_code (_a1))
8526 : : {
8527 : 85 : case NEGATE_EXPR:
8528 : 85 : {
8529 : 85 : tree _q20 = gimple_assign_rhs1 (_a1);
8530 : 85 : _q20 = do_valueize (valueize, _q20);
8531 : 85 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
8532 : : {
8533 : 0 : {
8534 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8535 : 0 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8536 : 0 : return true;
8537 : : }
8538 : : }
8539 : : break;
8540 : : }
8541 : 0 : case EXACT_DIV_EXPR:
8542 : 0 : {
8543 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8544 : 0 : _q20 = do_valueize (valueize, _q20);
8545 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
8546 : 0 : _q21 = do_valueize (valueize, _q21);
8547 : 0 : switch (TREE_CODE (_q21))
8548 : : {
8549 : 0 : case INTEGER_CST:
8550 : 0 : {
8551 : 0 : switch (TREE_CODE (_p1))
8552 : : {
8553 : 0 : case INTEGER_CST:
8554 : 0 : {
8555 : 0 : {
8556 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
8557 : 0 : if (gimple_simplify_311 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8558 : 0 : return true;
8559 : : }
8560 : 0 : break;
8561 : : }
8562 : : default:;
8563 : : }
8564 : : break;
8565 : : }
8566 : : default:;
8567 : : }
8568 : : break;
8569 : : }
8570 : 25138 : CASE_CONVERT:
8571 : 25138 : {
8572 : 25138 : tree _q20 = gimple_assign_rhs1 (_a1);
8573 : 25138 : _q20 = do_valueize (valueize, _q20);
8574 : 25138 : switch (TREE_CODE (_q20))
8575 : : {
8576 : 25138 : case SSA_NAME:
8577 : 25138 : if (gimple *_d2 = get_def (valueize, _q20))
8578 : : {
8579 : 21766 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
8580 : 21408 : switch (gimple_assign_rhs_code (_a2))
8581 : : {
8582 : 0 : case BIT_AND_EXPR:
8583 : 0 : {
8584 : 0 : tree _q30 = gimple_assign_rhs1 (_a2);
8585 : 0 : _q30 = do_valueize (valueize, _q30);
8586 : 0 : tree _q31 = gimple_assign_rhs2 (_a2);
8587 : 0 : _q31 = do_valueize (valueize, _q31);
8588 : 0 : if (tree_swap_operands_p (_q30, _q31))
8589 : 0 : std::swap (_q30, _q31);
8590 : 0 : switch (TREE_CODE (_q31))
8591 : : {
8592 : 0 : case INTEGER_CST:
8593 : 0 : {
8594 : 0 : switch (TREE_CODE (_p1))
8595 : : {
8596 : 0 : case INTEGER_CST:
8597 : 0 : {
8598 : 0 : {
8599 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
8600 : 0 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8601 : 0 : return true;
8602 : : }
8603 : 0 : break;
8604 : : }
8605 : : default:;
8606 : : }
8607 : : break;
8608 : : }
8609 : : default:;
8610 : : }
8611 : 983476 : break;
8612 : : }
8613 : : default:;
8614 : : }
8615 : : }
8616 : : break;
8617 : : default:;
8618 : : }
8619 : : break;
8620 : : }
8621 : 31 : case BIT_AND_EXPR:
8622 : 31 : {
8623 : 31 : tree _q20 = gimple_assign_rhs1 (_a1);
8624 : 31 : _q20 = do_valueize (valueize, _q20);
8625 : 31 : tree _q21 = gimple_assign_rhs2 (_a1);
8626 : 31 : _q21 = do_valueize (valueize, _q21);
8627 : 31 : if (tree_swap_operands_p (_q20, _q21))
8628 : 0 : std::swap (_q20, _q21);
8629 : 31 : switch (TREE_CODE (_q21))
8630 : : {
8631 : 31 : case INTEGER_CST:
8632 : 31 : {
8633 : 31 : switch (TREE_CODE (_p1))
8634 : : {
8635 : 31 : case INTEGER_CST:
8636 : 31 : {
8637 : 31 : {
8638 : 31 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
8639 : 31 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8640 : 31 : return true;
8641 : : }
8642 : 0 : break;
8643 : : }
8644 : : default:;
8645 : : }
8646 : : break;
8647 : : }
8648 : : default:;
8649 : : }
8650 : 983476 : break;
8651 : : }
8652 : 73136 : case MULT_EXPR:
8653 : 73136 : {
8654 : 73136 : tree _q20 = gimple_assign_rhs1 (_a1);
8655 : 73136 : _q20 = do_valueize (valueize, _q20);
8656 : 73136 : tree _q21 = gimple_assign_rhs2 (_a1);
8657 : 73136 : _q21 = do_valueize (valueize, _q21);
8658 : 73136 : if (tree_swap_operands_p (_q20, _q21))
8659 : 0 : std::swap (_q20, _q21);
8660 : 73136 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
8661 : : {
8662 : 6651 : {
8663 : 6651 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
8664 : 6651 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8665 : 3900 : return true;
8666 : : }
8667 : : }
8668 : 69236 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
8669 : : {
8670 : 0 : {
8671 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
8672 : 0 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8673 : 0 : return true;
8674 : : }
8675 : : }
8676 : 69236 : switch (TREE_CODE (_q21))
8677 : : {
8678 : 69236 : case INTEGER_CST:
8679 : 69236 : {
8680 : 69236 : switch (TREE_CODE (_p1))
8681 : : {
8682 : 0 : case SSA_NAME:
8683 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
8684 : : {
8685 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
8686 : 0 : switch (gimple_assign_rhs_code (_a2))
8687 : : {
8688 : 0 : case MULT_EXPR:
8689 : 0 : {
8690 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
8691 : 0 : _q50 = do_valueize (valueize, _q50);
8692 : 0 : tree _q51 = gimple_assign_rhs2 (_a2);
8693 : 0 : _q51 = do_valueize (valueize, _q51);
8694 : 0 : if (tree_swap_operands_p (_q50, _q51))
8695 : 0 : std::swap (_q50, _q51);
8696 : 0 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
8697 : : {
8698 : 0 : switch (TREE_CODE (_q51))
8699 : : {
8700 : 0 : case INTEGER_CST:
8701 : 0 : {
8702 : 0 : {
8703 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
8704 : 0 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8705 : 0 : return true;
8706 : : }
8707 : 0 : break;
8708 : : }
8709 : : default:;
8710 : : }
8711 : : }
8712 : 983476 : break;
8713 : : }
8714 : : default:;
8715 : : }
8716 : : }
8717 : : break;
8718 : 69236 : case INTEGER_CST:
8719 : 69236 : {
8720 : 69236 : {
8721 : 69236 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
8722 : 69236 : if (gimple_simplify_314 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8723 : 20 : return true;
8724 : : }
8725 : 69216 : break;
8726 : : }
8727 : : default:;
8728 : : }
8729 : : break;
8730 : : }
8731 : : default:;
8732 : : }
8733 : 983476 : break;
8734 : : }
8735 : 6603 : case PLUS_EXPR:
8736 : 6603 : {
8737 : 6603 : tree _q20 = gimple_assign_rhs1 (_a1);
8738 : 6603 : _q20 = do_valueize (valueize, _q20);
8739 : 6603 : tree _q21 = gimple_assign_rhs2 (_a1);
8740 : 6603 : _q21 = do_valueize (valueize, _q21);
8741 : 6603 : if (tree_swap_operands_p (_q20, _q21))
8742 : 59 : std::swap (_q20, _q21);
8743 : 6603 : switch (TREE_CODE (_q21))
8744 : : {
8745 : 289 : case SSA_NAME:
8746 : 289 : if (gimple *_d2 = get_def (valueize, _q21))
8747 : : {
8748 : 284 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
8749 : 284 : switch (gimple_assign_rhs_code (_a2))
8750 : : {
8751 : 0 : case MULT_EXPR:
8752 : 0 : {
8753 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
8754 : 0 : _q40 = do_valueize (valueize, _q40);
8755 : 0 : tree _q41 = gimple_assign_rhs2 (_a2);
8756 : 0 : _q41 = do_valueize (valueize, _q41);
8757 : 0 : if (tree_swap_operands_p (_q40, _q41))
8758 : 0 : std::swap (_q40, _q41);
8759 : 0 : if ((_p1 == _q41 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q41, 0) && types_match (_p1, _q41)))
8760 : : {
8761 : 0 : {
8762 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q40, _q41 };
8763 : 0 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8764 : 0 : return true;
8765 : : }
8766 : : }
8767 : 0 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
8768 : : {
8769 : 0 : {
8770 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q41, _q40 };
8771 : 0 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8772 : 0 : return true;
8773 : : }
8774 : : }
8775 : 6603 : break;
8776 : : }
8777 : : default:;
8778 : : }
8779 : : }
8780 : : break;
8781 : 6603 : default:;
8782 : : }
8783 : 6603 : switch (TREE_CODE (_q20))
8784 : : {
8785 : 6603 : case SSA_NAME:
8786 : 6603 : if (gimple *_d2 = get_def (valueize, _q20))
8787 : : {
8788 : 5779 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
8789 : 5835 : switch (gimple_assign_rhs_code (_a2))
8790 : : {
8791 : 4192 : case MULT_EXPR:
8792 : 4192 : {
8793 : 4192 : tree _q30 = gimple_assign_rhs1 (_a2);
8794 : 4192 : _q30 = do_valueize (valueize, _q30);
8795 : 4192 : tree _q31 = gimple_assign_rhs2 (_a2);
8796 : 4192 : _q31 = do_valueize (valueize, _q31);
8797 : 4192 : if (tree_swap_operands_p (_q30, _q31))
8798 : 0 : std::swap (_q30, _q31);
8799 : 4192 : if ((_p1 == _q31 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q31, 0) && types_match (_p1, _q31)))
8800 : : {
8801 : 12 : {
8802 : 12 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q21, _q20, _q30, _q31 };
8803 : 12 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8804 : 0 : return true;
8805 : : }
8806 : : }
8807 : 4192 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
8808 : : {
8809 : 0 : {
8810 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q21, _q20, _q31, _q30 };
8811 : 0 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8812 : 0 : return true;
8813 : : }
8814 : : }
8815 : 6603 : break;
8816 : : }
8817 : : default:;
8818 : : }
8819 : : }
8820 : : break;
8821 : 6603 : default:;
8822 : : }
8823 : 6603 : switch (TREE_CODE (_q21))
8824 : : {
8825 : 6314 : case INTEGER_CST:
8826 : 6314 : {
8827 : 6314 : switch (TREE_CODE (_p1))
8828 : : {
8829 : 6200 : case INTEGER_CST:
8830 : 6200 : {
8831 : 6200 : {
8832 : 6200 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
8833 : 6200 : {
8834 : 6200 : wide_int c = wi::to_wide (captures[2]);
8835 : 6200 : wide_int n = wi::to_wide (captures[3]);
8836 : 6200 : bool shift = EXACT_DIV_EXPR == RSHIFT_EXPR;
8837 : 6200 : value_range vr0, vr1, vr3;
8838 : 6200 : if (INTEGRAL_TYPE_P (type)
8839 : 12400 : && get_range_query (cfun)->range_of_expr (vr0, captures[1])
8840 : : )
8841 : : {
8842 : 6200 : if ((shift ? wi::ctz (
8843 : : c
8844 : : ) >= n.to_shwi ()
8845 : 6200 : : wi::multiple_of_p (
8846 : : c
8847 : 6200 : , n, TYPE_SIGN (type)))
8848 : 12400 : && get_range_query (cfun)->range_of_expr (vr1, captures[2])
8849 : 6200 : && range_op_handler (PLUS_EXPR).overflow_free_p (vr0, vr1)
8850 : 9114 : && get_range_query (cfun)->range_of_expr (vr3, captures[0])
8851 : 4557 : && !vr3.undefined_p ()
8852 : 4557 : && (TYPE_UNSIGNED (type)
8853 : 4557 : || (vr0.nonnegative_p () && vr3.nonnegative_p ())
8854 : 4541 : || (vr0.nonpositive_p () && vr3.nonpositive_p ()))
8855 : : )
8856 : : {
8857 : 16 : gimple_seq *lseq = seq;
8858 : 16 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1900;
8859 : 16 : {
8860 : 16 : res_op->set_op (PLUS_EXPR, type, 2);
8861 : 16 : {
8862 : 16 : tree _o1[2], _r1;
8863 : 16 : _o1[0] = captures[1];
8864 : 16 : _o1[1] = captures[3];
8865 : 16 : gimple_match_op tem_op (res_op->cond.any_else (), EXACT_DIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8866 : 16 : tem_op.resimplify (lseq, valueize);
8867 : 16 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
8868 : 16 : if (!_r1) goto next_after_fail1900;
8869 : 16 : res_op->ops[0] = _r1;
8870 : : }
8871 : 16 : res_op->ops[1] = wide_int_to_tree (type,
8872 : 32 : (shift ? wi::rshift (
8873 : : c
8874 : : , n, TYPE_SIGN (type))
8875 : : : wi::div_trunc (
8876 : : c
8877 : 16 : , n, TYPE_SIGN (type)))
8878 : : );
8879 : 16 : res_op->resimplify (lseq, valueize);
8880 : 16 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1017, __FILE__, __LINE__, true);
8881 : 16 : return true;
8882 : : }
8883 : 6136 : next_after_fail1900:;
8884 : : }
8885 : : else
8886 : : {
8887 : 6184 : if (!vr0.undefined_p () && TYPE_UNSIGNED (type) && c.sign_mask () < 0
8888 : : &&
8889 : 627 : (shift ? wi::ctz (
8890 : : -c
8891 : : ) >= n.to_shwi ()
8892 : 1254 : : wi::multiple_of_p (
8893 : 6811 : -c
8894 : 627 : , n, TYPE_SIGN (type)))
8895 : 14070 : && wi::geu_p (vr0.lower_bound (), -c)
8896 : : )
8897 : : {
8898 : 179 : gimple_seq *lseq = seq;
8899 : 179 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1901;
8900 : 179 : {
8901 : 179 : res_op->set_op (PLUS_EXPR, type, 2);
8902 : 179 : {
8903 : 179 : tree _o1[2], _r1;
8904 : 179 : _o1[0] = captures[1];
8905 : 179 : _o1[1] = captures[3];
8906 : 179 : gimple_match_op tem_op (res_op->cond.any_else (), EXACT_DIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8907 : 179 : tem_op.resimplify (lseq, valueize);
8908 : 179 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
8909 : 179 : if (!_r1) goto next_after_fail1901;
8910 : 48 : res_op->ops[0] = _r1;
8911 : : }
8912 : 48 : res_op->ops[1] = wide_int_to_tree (type, -
8913 : 48 : (shift ? wi::rshift (
8914 : : -c
8915 : : , n, TYPE_SIGN (type))
8916 : : : wi::div_trunc (
8917 : 48 : -c
8918 : 48 : , n, TYPE_SIGN (type)))
8919 : : );
8920 : 48 : res_op->resimplify (lseq, valueize);
8921 : 48 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1018, __FILE__, __LINE__, true);
8922 : 48 : return true;
8923 : : }
8924 : 6136 : next_after_fail1901:;
8925 : : }
8926 : : }
8927 : : }
8928 : 6200 : }
8929 : : }
8930 : 6136 : break;
8931 : : }
8932 : : default:;
8933 : : }
8934 : : break;
8935 : : }
8936 : : default:;
8937 : : }
8938 : 983476 : break;
8939 : : }
8940 : 2684 : case MINUS_EXPR:
8941 : 2684 : {
8942 : 2684 : tree _q20 = gimple_assign_rhs1 (_a1);
8943 : 2684 : _q20 = do_valueize (valueize, _q20);
8944 : 2684 : tree _q21 = gimple_assign_rhs2 (_a1);
8945 : 2684 : _q21 = do_valueize (valueize, _q21);
8946 : 2684 : switch (TREE_CODE (_q21))
8947 : : {
8948 : 2684 : case SSA_NAME:
8949 : 2684 : if (gimple *_d2 = get_def (valueize, _q21))
8950 : : {
8951 : 2049 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
8952 : 2062 : switch (gimple_assign_rhs_code (_a2))
8953 : : {
8954 : 0 : case MULT_EXPR:
8955 : 0 : {
8956 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
8957 : 0 : _q40 = do_valueize (valueize, _q40);
8958 : 0 : tree _q41 = gimple_assign_rhs2 (_a2);
8959 : 0 : _q41 = do_valueize (valueize, _q41);
8960 : 0 : if (tree_swap_operands_p (_q40, _q41))
8961 : 0 : std::swap (_q40, _q41);
8962 : 0 : if ((_p1 == _q41 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q41, 0) && types_match (_p1, _q41)))
8963 : : {
8964 : 0 : {
8965 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q40, _q41 };
8966 : 0 : if (gimple_simplify_317 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8967 : 0 : return true;
8968 : : }
8969 : : }
8970 : 0 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
8971 : : {
8972 : 0 : {
8973 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q41, _q40 };
8974 : 0 : if (gimple_simplify_317 (res_op, seq, valueize, type, captures, EXACT_DIV_EXPR))
8975 : 0 : return true;
8976 : : }
8977 : : }
8978 : 983476 : break;
8979 : : }
8980 : : default:;
8981 : : }
8982 : : }
8983 : : break;
8984 : : default:;
8985 : : }
8986 : : break;
8987 : : }
8988 : : default:;
8989 : : }
8990 : : }
8991 : : break;
8992 : : default:;
8993 : : }
8994 : : return false;
8995 : : }
8996 : :
8997 : : bool
8998 : 12904253 : gimple_simplify_LT_EXPR (gimple_match_op *res_op, gimple_seq *seq,
8999 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9000 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
9001 : : {
9002 : 12904253 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9003 : 12904253 : switch (TREE_CODE (_p0))
9004 : : {
9005 : 12435800 : case SSA_NAME:
9006 : 12435800 : if (gimple *_d1 = get_def (valueize, _p0))
9007 : : {
9008 : 4271961 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9009 : 4226403 : switch (gimple_assign_rhs_code (_a1))
9010 : : {
9011 : 8420 : case RDIV_EXPR:
9012 : 8420 : {
9013 : 8420 : tree _q20 = gimple_assign_rhs1 (_a1);
9014 : 8420 : _q20 = do_valueize (valueize, _q20);
9015 : 8420 : tree _q21 = gimple_assign_rhs2 (_a1);
9016 : 8420 : _q21 = do_valueize (valueize, _q21);
9017 : 8420 : switch (TREE_CODE (_q20))
9018 : : {
9019 : 3916 : case REAL_CST:
9020 : 3916 : {
9021 : 3916 : if (real_zerop (_p1))
9022 : : {
9023 : 1805 : {
9024 : 1805 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
9025 : 1805 : if (gimple_simplify_336 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
9026 : 0 : return true;
9027 : : }
9028 : : }
9029 : : break;
9030 : : }
9031 : : default:;
9032 : : }
9033 : : break;
9034 : : }
9035 : 9653 : case TRUNC_MOD_EXPR:
9036 : 9653 : {
9037 : 9653 : tree _q20 = gimple_assign_rhs1 (_a1);
9038 : 9653 : _q20 = do_valueize (valueize, _q20);
9039 : 9653 : tree _q21 = gimple_assign_rhs2 (_a1);
9040 : 9653 : _q21 = do_valueize (valueize, _q21);
9041 : 9653 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
9042 : : {
9043 : 90 : {
9044 : 90 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
9045 : 90 : if (gimple_simplify_337 (res_op, seq, valueize, type, captures, LT_EXPR))
9046 : 0 : return true;
9047 : : }
9048 : : }
9049 : : break;
9050 : : }
9051 : 40188 : case MULT_EXPR:
9052 : 40188 : {
9053 : 40188 : tree _q20 = gimple_assign_rhs1 (_a1);
9054 : 40188 : _q20 = do_valueize (valueize, _q20);
9055 : 40188 : tree _q21 = gimple_assign_rhs2 (_a1);
9056 : 40188 : _q21 = do_valueize (valueize, _q21);
9057 : 40188 : if (tree_swap_operands_p (_q20, _q21))
9058 : 837 : std::swap (_q20, _q21);
9059 : 40188 : switch (TREE_CODE (_p1))
9060 : : {
9061 : 23302 : case SSA_NAME:
9062 : 23302 : if (gimple *_d2 = get_def (valueize, _p1))
9063 : : {
9064 : 22482 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
9065 : 22347 : switch (gimple_assign_rhs_code (_a2))
9066 : : {
9067 : 3146 : case MULT_EXPR:
9068 : 3146 : {
9069 : 3146 : tree _q50 = gimple_assign_rhs1 (_a2);
9070 : 3146 : _q50 = do_valueize (valueize, _q50);
9071 : 3146 : tree _q51 = gimple_assign_rhs2 (_a2);
9072 : 3146 : _q51 = do_valueize (valueize, _q51);
9073 : 3146 : if (tree_swap_operands_p (_q50, _q51))
9074 : 41 : std::swap (_q50, _q51);
9075 : 3146 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
9076 : : {
9077 : 1210 : {
9078 : 1210 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
9079 : 1210 : if (gimple_simplify_338 (res_op, seq, valueize, type, captures, LT_EXPR))
9080 : 228 : return true;
9081 : : }
9082 : : }
9083 : 2918 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
9084 : : {
9085 : 0 : {
9086 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
9087 : 0 : if (gimple_simplify_338 (res_op, seq, valueize, type, captures, LT_EXPR))
9088 : 0 : return true;
9089 : : }
9090 : : }
9091 : 2918 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
9092 : : {
9093 : 0 : {
9094 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q50 };
9095 : 0 : if (gimple_simplify_338 (res_op, seq, valueize, type, captures, LT_EXPR))
9096 : 0 : return true;
9097 : : }
9098 : : }
9099 : 2918 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
9100 : : {
9101 : 539 : {
9102 : 539 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q51 };
9103 : 539 : if (gimple_simplify_338 (res_op, seq, valueize, type, captures, LT_EXPR))
9104 : 0 : return true;
9105 : : }
9106 : : }
9107 : 12889629 : break;
9108 : : }
9109 : : default:;
9110 : : }
9111 : : }
9112 : : break;
9113 : : default:;
9114 : : }
9115 : 12889629 : break;
9116 : : }
9117 : 663090 : CASE_CONVERT:
9118 : 663090 : {
9119 : 663090 : tree _q20 = gimple_assign_rhs1 (_a1);
9120 : 663090 : _q20 = do_valueize (valueize, _q20);
9121 : 663090 : switch (TREE_CODE (_q20))
9122 : : {
9123 : 661149 : case SSA_NAME:
9124 : 661149 : if (gimple *_d2 = get_def (valueize, _q20))
9125 : : {
9126 : 627991 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
9127 : 616538 : switch (gimple_assign_rhs_code (_a2))
9128 : : {
9129 : 3083 : case EXACT_DIV_EXPR:
9130 : 3083 : {
9131 : 3083 : tree _q30 = gimple_assign_rhs1 (_a2);
9132 : 3083 : _q30 = do_valueize (valueize, _q30);
9133 : 3083 : tree _q31 = gimple_assign_rhs2 (_a2);
9134 : 3083 : _q31 = do_valueize (valueize, _q31);
9135 : 3083 : switch (TREE_CODE (_q31))
9136 : : {
9137 : 3083 : case INTEGER_CST:
9138 : 3083 : {
9139 : 3083 : switch (TREE_CODE (_p1))
9140 : : {
9141 : 2089 : case SSA_NAME:
9142 : 2089 : if (gimple *_d3 = get_def (valueize, _p1))
9143 : : {
9144 : 1817 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
9145 : 681 : switch (gimple_assign_rhs_code (_a3))
9146 : : {
9147 : 296 : CASE_CONVERT:
9148 : 296 : {
9149 : 296 : tree _q60 = gimple_assign_rhs1 (_a3);
9150 : 296 : _q60 = do_valueize (valueize, _q60);
9151 : 296 : switch (TREE_CODE (_q60))
9152 : : {
9153 : 296 : case SSA_NAME:
9154 : 296 : if (gimple *_d4 = get_def (valueize, _q60))
9155 : : {
9156 : 296 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
9157 : 296 : switch (gimple_assign_rhs_code (_a4))
9158 : : {
9159 : 296 : case EXACT_DIV_EXPR:
9160 : 296 : {
9161 : 296 : tree _q70 = gimple_assign_rhs1 (_a4);
9162 : 296 : _q70 = do_valueize (valueize, _q70);
9163 : 296 : tree _q71 = gimple_assign_rhs2 (_a4);
9164 : 296 : _q71 = do_valueize (valueize, _q71);
9165 : 296 : if ((_q71 == _q31 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q31, 0) && types_match (_q71, _q31)))
9166 : : {
9167 : 256 : {
9168 : 256 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _q70 };
9169 : 256 : if (gimple_simplify_209 (res_op, seq, valueize, type, captures, LT_EXPR))
9170 : 73 : return true;
9171 : : }
9172 : : }
9173 : : break;
9174 : : }
9175 : : default:;
9176 : : }
9177 : : }
9178 : : break;
9179 : : default:;
9180 : : }
9181 : : break;
9182 : : }
9183 : : default:;
9184 : : }
9185 : : }
9186 : : break;
9187 : : default:;
9188 : : }
9189 : : break;
9190 : : }
9191 : : default:;
9192 : : }
9193 : : break;
9194 : : }
9195 : : default:;
9196 : : }
9197 : : }
9198 : : break;
9199 : : default:;
9200 : : }
9201 : : break;
9202 : : }
9203 : 4827 : case EXACT_DIV_EXPR:
9204 : 4827 : {
9205 : 4827 : tree _q20 = gimple_assign_rhs1 (_a1);
9206 : 4827 : _q20 = do_valueize (valueize, _q20);
9207 : 4827 : tree _q21 = gimple_assign_rhs2 (_a1);
9208 : 4827 : _q21 = do_valueize (valueize, _q21);
9209 : 4827 : switch (TREE_CODE (_q21))
9210 : : {
9211 : 4827 : case INTEGER_CST:
9212 : 4827 : {
9213 : 4827 : switch (TREE_CODE (_p1))
9214 : : {
9215 : 3252 : case SSA_NAME:
9216 : 3252 : if (gimple *_d2 = get_def (valueize, _p1))
9217 : : {
9218 : 2825 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
9219 : 1587 : switch (gimple_assign_rhs_code (_a2))
9220 : : {
9221 : 93 : case EXACT_DIV_EXPR:
9222 : 93 : {
9223 : 93 : tree _q50 = gimple_assign_rhs1 (_a2);
9224 : 93 : _q50 = do_valueize (valueize, _q50);
9225 : 93 : tree _q51 = gimple_assign_rhs2 (_a2);
9226 : 93 : _q51 = do_valueize (valueize, _q51);
9227 : 93 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
9228 : : {
9229 : 85 : {
9230 : 85 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q50 };
9231 : 85 : if (gimple_simplify_209 (res_op, seq, valueize, type, captures, LT_EXPR))
9232 : 85 : return true;
9233 : : }
9234 : : }
9235 : : break;
9236 : : }
9237 : : default:;
9238 : : }
9239 : : }
9240 : : break;
9241 : : default:;
9242 : : }
9243 : : break;
9244 : : }
9245 : : default:;
9246 : : }
9247 : : break;
9248 : : }
9249 : 9425 : case TRUNC_DIV_EXPR:
9250 : 9425 : {
9251 : 9425 : tree _q20 = gimple_assign_rhs1 (_a1);
9252 : 9425 : _q20 = do_valueize (valueize, _q20);
9253 : 9425 : tree _q21 = gimple_assign_rhs2 (_a1);
9254 : 9425 : _q21 = do_valueize (valueize, _q21);
9255 : 9425 : switch (TREE_CODE (_q21))
9256 : : {
9257 : 3982 : case INTEGER_CST:
9258 : 3982 : {
9259 : 3982 : switch (TREE_CODE (_p1))
9260 : : {
9261 : 812 : case INTEGER_CST:
9262 : 812 : {
9263 : 812 : {
9264 : 812 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
9265 : 812 : if (gimple_simplify_212 (res_op, seq, valueize, type, captures, LT_EXPR))
9266 : 811 : return true;
9267 : : }
9268 : 1 : break;
9269 : : }
9270 : : default:;
9271 : : }
9272 : : break;
9273 : : }
9274 : : default:;
9275 : : }
9276 : : break;
9277 : : }
9278 : 503845 : case PLUS_EXPR:
9279 : 503845 : {
9280 : 503845 : tree _q20 = gimple_assign_rhs1 (_a1);
9281 : 503845 : _q20 = do_valueize (valueize, _q20);
9282 : 503845 : tree _q21 = gimple_assign_rhs2 (_a1);
9283 : 503845 : _q21 = do_valueize (valueize, _q21);
9284 : 503845 : if (tree_swap_operands_p (_q20, _q21))
9285 : 13305 : std::swap (_q20, _q21);
9286 : 503845 : switch (TREE_CODE (_p1))
9287 : : {
9288 : 351737 : case SSA_NAME:
9289 : 351737 : if (gimple *_d2 = get_def (valueize, _p1))
9290 : : {
9291 : 344387 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
9292 : 379048 : switch (gimple_assign_rhs_code (_a2))
9293 : : {
9294 : 118092 : case PLUS_EXPR:
9295 : 118092 : {
9296 : 118092 : tree _q50 = gimple_assign_rhs1 (_a2);
9297 : 118092 : _q50 = do_valueize (valueize, _q50);
9298 : 118092 : tree _q51 = gimple_assign_rhs2 (_a2);
9299 : 118092 : _q51 = do_valueize (valueize, _q51);
9300 : 118092 : if (tree_swap_operands_p (_q50, _q51))
9301 : 4008 : std::swap (_q50, _q51);
9302 : 118092 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
9303 : : {
9304 : 68758 : {
9305 : 68758 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
9306 : 68758 : if (gimple_simplify_339 (res_op, seq, valueize, type, captures, LT_EXPR))
9307 : 6960 : return true;
9308 : : }
9309 : : }
9310 : 111132 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
9311 : : {
9312 : 27 : {
9313 : 27 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
9314 : 27 : if (gimple_simplify_339 (res_op, seq, valueize, type, captures, LT_EXPR))
9315 : 23 : return true;
9316 : : }
9317 : : }
9318 : 111109 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
9319 : : {
9320 : 46 : {
9321 : 46 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q50 };
9322 : 46 : if (gimple_simplify_339 (res_op, seq, valueize, type, captures, LT_EXPR))
9323 : 14 : return true;
9324 : : }
9325 : : }
9326 : 111095 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
9327 : : {
9328 : 7543 : {
9329 : 7543 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q51 };
9330 : 7543 : if (gimple_simplify_339 (res_op, seq, valueize, type, captures, LT_EXPR))
9331 : 3839 : return true;
9332 : : }
9333 : : }
9334 : 493009 : break;
9335 : : }
9336 : : default:;
9337 : : }
9338 : : }
9339 : : break;
9340 : 493009 : default:;
9341 : : }
9342 : 493009 : switch (TREE_CODE (_q21))
9343 : : {
9344 : 365815 : case INTEGER_CST:
9345 : 365815 : {
9346 : 365815 : switch (TREE_CODE (_p1))
9347 : : {
9348 : 252696 : case SSA_NAME:
9349 : 252696 : if (gimple *_d2 = get_def (valueize, _p1))
9350 : : {
9351 : 248835 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
9352 : 277721 : switch (gimple_assign_rhs_code (_a2))
9353 : : {
9354 : 78533 : case PLUS_EXPR:
9355 : 78533 : {
9356 : 78533 : tree _q50 = gimple_assign_rhs1 (_a2);
9357 : 78533 : _q50 = do_valueize (valueize, _q50);
9358 : 78533 : tree _q51 = gimple_assign_rhs2 (_a2);
9359 : 78533 : _q51 = do_valueize (valueize, _q51);
9360 : 78533 : if (tree_swap_operands_p (_q50, _q51))
9361 : 145 : std::swap (_q50, _q51);
9362 : 78533 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
9363 : : {
9364 : 61650 : {
9365 : 61650 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
9366 : 61650 : if (gimple_simplify_340 (res_op, seq, valueize, type, captures, LT_EXPR))
9367 : 1 : return true;
9368 : : }
9369 : : }
9370 : 493008 : break;
9371 : : }
9372 : : default:;
9373 : : }
9374 : : }
9375 : : break;
9376 : : default:;
9377 : : }
9378 : : break;
9379 : : }
9380 : 493008 : default:;
9381 : : }
9382 : 493008 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
9383 : : {
9384 : 32044 : {
9385 : 32044 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
9386 : 32044 : if (gimple_simplify_341 (res_op, seq, valueize, type, captures, LT_EXPR))
9387 : 2201 : return true;
9388 : : }
9389 : : }
9390 : 490807 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
9391 : : {
9392 : 32670 : {
9393 : 32670 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q21, _q20 };
9394 : 32670 : if (gimple_simplify_341 (res_op, seq, valueize, type, captures, LT_EXPR))
9395 : 201 : return true;
9396 : : }
9397 : : }
9398 : 12889629 : break;
9399 : : }
9400 : 293668 : case MINUS_EXPR:
9401 : 293668 : {
9402 : 293668 : tree _q20 = gimple_assign_rhs1 (_a1);
9403 : 293668 : _q20 = do_valueize (valueize, _q20);
9404 : 293668 : tree _q21 = gimple_assign_rhs2 (_a1);
9405 : 293668 : _q21 = do_valueize (valueize, _q21);
9406 : 293668 : switch (TREE_CODE (_p1))
9407 : : {
9408 : 116345 : case SSA_NAME:
9409 : 116345 : if (gimple *_d2 = get_def (valueize, _p1))
9410 : : {
9411 : 103680 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
9412 : 92139 : switch (gimple_assign_rhs_code (_a2))
9413 : : {
9414 : 16081 : case MINUS_EXPR:
9415 : 16081 : {
9416 : 16081 : tree _q50 = gimple_assign_rhs1 (_a2);
9417 : 16081 : _q50 = do_valueize (valueize, _q50);
9418 : 16081 : tree _q51 = gimple_assign_rhs2 (_a2);
9419 : 16081 : _q51 = do_valueize (valueize, _q51);
9420 : 16081 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
9421 : : {
9422 : 735 : {
9423 : 735 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
9424 : 735 : if (gimple_simplify_342 (res_op, seq, valueize, type, captures, LT_EXPR))
9425 : 6 : return true;
9426 : : }
9427 : : }
9428 : 16075 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
9429 : : {
9430 : 721 : {
9431 : 721 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
9432 : 721 : if (gimple_simplify_343 (res_op, seq, valueize, type, captures, LT_EXPR))
9433 : 24 : return true;
9434 : : }
9435 : : }
9436 : : break;
9437 : : }
9438 : : default:;
9439 : : }
9440 : : }
9441 : : break;
9442 : : default:;
9443 : : }
9444 : : break;
9445 : : }
9446 : 46269 : case POINTER_DIFF_EXPR:
9447 : 46269 : {
9448 : 46269 : tree _q20 = gimple_assign_rhs1 (_a1);
9449 : 46269 : _q20 = do_valueize (valueize, _q20);
9450 : 46269 : tree _q21 = gimple_assign_rhs2 (_a1);
9451 : 46269 : _q21 = do_valueize (valueize, _q21);
9452 : 46269 : switch (TREE_CODE (_p1))
9453 : : {
9454 : 11259 : case SSA_NAME:
9455 : 11259 : if (gimple *_d2 = get_def (valueize, _p1))
9456 : : {
9457 : 11089 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
9458 : 10302 : switch (gimple_assign_rhs_code (_a2))
9459 : : {
9460 : 534 : case POINTER_DIFF_EXPR:
9461 : 534 : {
9462 : 534 : tree _q50 = gimple_assign_rhs1 (_a2);
9463 : 534 : _q50 = do_valueize (valueize, _q50);
9464 : 534 : tree _q51 = gimple_assign_rhs2 (_a2);
9465 : 534 : _q51 = do_valueize (valueize, _q51);
9466 : 534 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
9467 : : {
9468 : 158 : {
9469 : 158 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q50 };
9470 : 158 : if (gimple_simplify_216 (res_op, seq, valueize, type, captures, LT_EXPR))
9471 : 158 : return true;
9472 : : }
9473 : : }
9474 : 376 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
9475 : : {
9476 : 0 : {
9477 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q51 };
9478 : 0 : if (gimple_simplify_217 (res_op, seq, valueize, type, captures, LT_EXPR))
9479 : 0 : return true;
9480 : : }
9481 : : }
9482 : : break;
9483 : : }
9484 : : default:;
9485 : : }
9486 : : }
9487 : : break;
9488 : : default:;
9489 : : }
9490 : : break;
9491 : : }
9492 : : default:;
9493 : : }
9494 : : }
9495 : : break;
9496 : 12889629 : default:;
9497 : : }
9498 : 12889629 : switch (TREE_CODE (_p1))
9499 : : {
9500 : 9023171 : case SSA_NAME:
9501 : 9023171 : if (gimple *_d1 = get_def (valueize, _p1))
9502 : : {
9503 : 3087652 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9504 : 3929281 : switch (gimple_assign_rhs_code (_a1))
9505 : : {
9506 : 370567 : case PLUS_EXPR:
9507 : 370567 : {
9508 : 370567 : tree _q30 = gimple_assign_rhs1 (_a1);
9509 : 370567 : _q30 = do_valueize (valueize, _q30);
9510 : 370567 : tree _q31 = gimple_assign_rhs2 (_a1);
9511 : 370567 : _q31 = do_valueize (valueize, _q31);
9512 : 370567 : if (tree_swap_operands_p (_q30, _q31))
9513 : 14229 : std::swap (_q30, _q31);
9514 : 370567 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
9515 : : {
9516 : 8728 : {
9517 : 8728 : tree captures[3] ATTRIBUTE_UNUSED = { _p1, _q30, _p0 };
9518 : 8728 : if (gimple_simplify_341 (res_op, seq, valueize, type, captures, GT_EXPR))
9519 : 68 : return true;
9520 : : }
9521 : : }
9522 : 370499 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
9523 : : {
9524 : 20437 : {
9525 : 20437 : tree captures[3] ATTRIBUTE_UNUSED = { _p1, _q31, _p0 };
9526 : 20437 : if (gimple_simplify_341 (res_op, seq, valueize, type, captures, GT_EXPR))
9527 : 424 : return true;
9528 : : }
9529 : : }
9530 : 12889137 : break;
9531 : : }
9532 : 34375 : case MINUS_EXPR:
9533 : 34375 : {
9534 : 34375 : tree _q30 = gimple_assign_rhs1 (_a1);
9535 : 34375 : _q30 = do_valueize (valueize, _q30);
9536 : 34375 : tree _q31 = gimple_assign_rhs2 (_a1);
9537 : 34375 : _q31 = do_valueize (valueize, _q31);
9538 : 34375 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
9539 : : {
9540 : 1548 : {
9541 : 1548 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q31 };
9542 : 1548 : if (gimple_simplify_215 (res_op, seq, valueize, type, captures, LT_EXPR))
9543 : 0 : return true;
9544 : : }
9545 : : }
9546 : : break;
9547 : : }
9548 : : default:;
9549 : : }
9550 : : }
9551 : : break;
9552 : 12889137 : default:;
9553 : : }
9554 : 12889137 : switch (TREE_CODE (_p0))
9555 : : {
9556 : 12420684 : case SSA_NAME:
9557 : 12420684 : if (gimple *_d1 = get_def (valueize, _p0))
9558 : : {
9559 : 4256845 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9560 : 4211368 : switch (gimple_assign_rhs_code (_a1))
9561 : : {
9562 : 293638 : case MINUS_EXPR:
9563 : 293638 : {
9564 : 293638 : tree _q20 = gimple_assign_rhs1 (_a1);
9565 : 293638 : _q20 = do_valueize (valueize, _q20);
9566 : 293638 : tree _q21 = gimple_assign_rhs2 (_a1);
9567 : 293638 : _q21 = do_valueize (valueize, _q21);
9568 : 293638 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
9569 : : {
9570 : 387 : {
9571 : 387 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p0, _q21 };
9572 : 387 : if (gimple_simplify_215 (res_op, seq, valueize, type, captures, GT_EXPR))
9573 : 0 : return true;
9574 : : }
9575 : : }
9576 : : break;
9577 : : }
9578 : 3954 : case BIT_IOR_EXPR:
9579 : 3954 : {
9580 : 3954 : tree _q20 = gimple_assign_rhs1 (_a1);
9581 : 3954 : _q20 = do_valueize (valueize, _q20);
9582 : 3954 : tree _q21 = gimple_assign_rhs2 (_a1);
9583 : 3954 : _q21 = do_valueize (valueize, _q21);
9584 : 3954 : if (tree_swap_operands_p (_q20, _q21))
9585 : 380 : std::swap (_q20, _q21);
9586 : 3954 : if (tree_expr_nonnegative_p (_q20))
9587 : : {
9588 : 1028 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
9589 : : {
9590 : 0 : {
9591 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
9592 : 0 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, LT_EXPR, BIT_IOR_EXPR))
9593 : 0 : return true;
9594 : : }
9595 : : }
9596 : : }
9597 : 3954 : if (tree_expr_nonnegative_p (_q21))
9598 : : {
9599 : 1835 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
9600 : : {
9601 : 0 : {
9602 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
9603 : 0 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, LT_EXPR, BIT_IOR_EXPR))
9604 : 0 : return true;
9605 : : }
9606 : : }
9607 : : }
9608 : 12889137 : break;
9609 : : }
9610 : : default:;
9611 : : }
9612 : : }
9613 : : break;
9614 : 12889137 : default:;
9615 : : }
9616 : 12889137 : switch (TREE_CODE (_p1))
9617 : : {
9618 : 9022679 : case SSA_NAME:
9619 : 9022679 : if (gimple *_d1 = get_def (valueize, _p1))
9620 : : {
9621 : 3087160 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9622 : 3928789 : switch (gimple_assign_rhs_code (_a1))
9623 : : {
9624 : 2869 : case BIT_AND_EXPR:
9625 : 2869 : {
9626 : 2869 : tree _q30 = gimple_assign_rhs1 (_a1);
9627 : 2869 : _q30 = do_valueize (valueize, _q30);
9628 : 2869 : tree _q31 = gimple_assign_rhs2 (_a1);
9629 : 2869 : _q31 = do_valueize (valueize, _q31);
9630 : 2869 : if (tree_swap_operands_p (_q30, _q31))
9631 : 143 : std::swap (_q30, _q31);
9632 : 2869 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
9633 : : {
9634 : 33 : if (tree_expr_nonnegative_p (_q30))
9635 : : {
9636 : 2 : {
9637 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
9638 : 2 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, GT_EXPR, BIT_AND_EXPR))
9639 : 2 : return true;
9640 : : }
9641 : : }
9642 : : }
9643 : 2867 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
9644 : : {
9645 : 1 : if (tree_expr_nonnegative_p (_q31))
9646 : : {
9647 : 1 : {
9648 : 1 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
9649 : 1 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, GT_EXPR, BIT_AND_EXPR))
9650 : 1 : return true;
9651 : : }
9652 : : }
9653 : : }
9654 : 12889134 : break;
9655 : : }
9656 : : default:;
9657 : : }
9658 : : }
9659 : : break;
9660 : 12889134 : default:;
9661 : : }
9662 : 12889134 : switch (TREE_CODE (_p0))
9663 : : {
9664 : 12420681 : case SSA_NAME:
9665 : 12420681 : if (gimple *_d1 = get_def (valueize, _p0))
9666 : : {
9667 : 4256842 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9668 : 4211366 : switch (gimple_assign_rhs_code (_a1))
9669 : : {
9670 : 2742 : case MIN_EXPR:
9671 : 2742 : {
9672 : 2742 : tree _q20 = gimple_assign_rhs1 (_a1);
9673 : 2742 : _q20 = do_valueize (valueize, _q20);
9674 : 2742 : tree _q21 = gimple_assign_rhs2 (_a1);
9675 : 2742 : _q21 = do_valueize (valueize, _q21);
9676 : 2742 : if (tree_swap_operands_p (_q20, _q21))
9677 : 169 : std::swap (_q20, _q21);
9678 : 2742 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
9679 : : {
9680 : 220 : {
9681 : 220 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
9682 : 220 : if (gimple_simplify_225 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR, GT_EXPR))
9683 : 220 : return true;
9684 : : }
9685 : : }
9686 : 2522 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
9687 : : {
9688 : 115 : {
9689 : 115 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
9690 : 115 : if (gimple_simplify_225 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR, GT_EXPR))
9691 : 103 : return true;
9692 : : }
9693 : : }
9694 : 2419 : switch (TREE_CODE (_q21))
9695 : : {
9696 : 746 : case INTEGER_CST:
9697 : 746 : {
9698 : 746 : switch (TREE_CODE (_p1))
9699 : : {
9700 : 214 : case INTEGER_CST:
9701 : 214 : {
9702 : 214 : {
9703 : 214 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
9704 : 214 : if (gimple_simplify_345 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR, BIT_IOR_EXPR))
9705 : 41 : return true;
9706 : : }
9707 : 173 : break;
9708 : : }
9709 : : default:;
9710 : : }
9711 : : break;
9712 : : }
9713 : : default:;
9714 : : }
9715 : 12888770 : break;
9716 : : }
9717 : : default:;
9718 : : }
9719 : : }
9720 : : break;
9721 : 12888770 : default:;
9722 : : }
9723 : 12888770 : switch (TREE_CODE (_p1))
9724 : : {
9725 : 9022353 : case SSA_NAME:
9726 : 9022353 : if (gimple *_d1 = get_def (valueize, _p1))
9727 : : {
9728 : 3086834 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9729 : 3928596 : switch (gimple_assign_rhs_code (_a1))
9730 : : {
9731 : 6438 : case MAX_EXPR:
9732 : 6438 : {
9733 : 6438 : tree _q30 = gimple_assign_rhs1 (_a1);
9734 : 6438 : _q30 = do_valueize (valueize, _q30);
9735 : 6438 : tree _q31 = gimple_assign_rhs2 (_a1);
9736 : 6438 : _q31 = do_valueize (valueize, _q31);
9737 : 6438 : if (tree_swap_operands_p (_q30, _q31))
9738 : 8 : std::swap (_q30, _q31);
9739 : 6438 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
9740 : : {
9741 : 24 : {
9742 : 24 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
9743 : 24 : if (gimple_simplify_225 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR, LT_EXPR))
9744 : 24 : return true;
9745 : : }
9746 : : }
9747 : 6414 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
9748 : : {
9749 : 30 : {
9750 : 30 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
9751 : 30 : if (gimple_simplify_225 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR, LT_EXPR))
9752 : 30 : return true;
9753 : : }
9754 : : }
9755 : 12888705 : break;
9756 : : }
9757 : 23668 : case MIN_EXPR:
9758 : 23668 : {
9759 : 23668 : tree _q30 = gimple_assign_rhs1 (_a1);
9760 : 23668 : _q30 = do_valueize (valueize, _q30);
9761 : 23668 : tree _q31 = gimple_assign_rhs2 (_a1);
9762 : 23668 : _q31 = do_valueize (valueize, _q31);
9763 : 23668 : if (tree_swap_operands_p (_q30, _q31))
9764 : 309 : std::swap (_q30, _q31);
9765 : 23668 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
9766 : : {
9767 : 2 : {
9768 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
9769 : 2 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR))
9770 : 2 : return true;
9771 : : }
9772 : : }
9773 : 23666 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
9774 : : {
9775 : 9 : {
9776 : 9 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
9777 : 9 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR))
9778 : 9 : return true;
9779 : : }
9780 : : }
9781 : 12888705 : break;
9782 : : }
9783 : : default:;
9784 : : }
9785 : : }
9786 : : break;
9787 : 12888705 : default:;
9788 : : }
9789 : 12888705 : switch (TREE_CODE (_p0))
9790 : : {
9791 : 12420252 : case SSA_NAME:
9792 : 12420252 : if (gimple *_d1 = get_def (valueize, _p0))
9793 : : {
9794 : 4256413 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9795 : 4210962 : switch (gimple_assign_rhs_code (_a1))
9796 : : {
9797 : 10276 : case MAX_EXPR:
9798 : 10276 : {
9799 : 10276 : tree _q20 = gimple_assign_rhs1 (_a1);
9800 : 10276 : _q20 = do_valueize (valueize, _q20);
9801 : 10276 : tree _q21 = gimple_assign_rhs2 (_a1);
9802 : 10276 : _q21 = do_valueize (valueize, _q21);
9803 : 10276 : if (tree_swap_operands_p (_q20, _q21))
9804 : 203 : std::swap (_q20, _q21);
9805 : 10276 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
9806 : : {
9807 : 60 : {
9808 : 60 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
9809 : 60 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR))
9810 : 60 : return true;
9811 : : }
9812 : : }
9813 : 10216 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
9814 : : {
9815 : 118 : {
9816 : 118 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
9817 : 118 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR))
9818 : 118 : return true;
9819 : : }
9820 : : }
9821 : 10098 : switch (TREE_CODE (_q21))
9822 : : {
9823 : 9049 : case INTEGER_CST:
9824 : 9049 : {
9825 : 9049 : switch (TREE_CODE (_p1))
9826 : : {
9827 : 3925 : case INTEGER_CST:
9828 : 3925 : {
9829 : 3925 : {
9830 : 3925 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
9831 : 3925 : if (gimple_simplify_345 (res_op, seq, valueize, type, captures, MAX_EXPR, LT_EXPR, BIT_AND_EXPR))
9832 : 421 : return true;
9833 : : }
9834 : 3504 : break;
9835 : : }
9836 : : default:;
9837 : : }
9838 : : break;
9839 : : }
9840 : : default:;
9841 : : }
9842 : 12888056 : break;
9843 : : }
9844 : 218 : case VEC_COND_EXPR:
9845 : 218 : {
9846 : 218 : tree _q20 = gimple_assign_rhs1 (_a1);
9847 : 218 : _q20 = do_valueize (valueize, _q20);
9848 : 218 : tree _q21 = gimple_assign_rhs2 (_a1);
9849 : 218 : _q21 = do_valueize (valueize, _q21);
9850 : 218 : tree _q22 = gimple_assign_rhs3 (_a1);
9851 : 218 : _q22 = do_valueize (valueize, _q22);
9852 : 218 : switch (TREE_CODE (_p1))
9853 : : {
9854 : 15 : case SSA_NAME:
9855 : 15 : if (gimple *_d2 = get_def (valueize, _p1))
9856 : : {
9857 : 15 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
9858 : 30 : switch (gimple_assign_rhs_code (_a2))
9859 : : {
9860 : 0 : case VEC_COND_EXPR:
9861 : 0 : {
9862 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
9863 : 0 : _q60 = do_valueize (valueize, _q60);
9864 : 0 : tree _q61 = gimple_assign_rhs2 (_a2);
9865 : 0 : _q61 = do_valueize (valueize, _q61);
9866 : 0 : tree _q62 = gimple_assign_rhs3 (_a2);
9867 : 0 : _q62 = do_valueize (valueize, _q62);
9868 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
9869 : : {
9870 : 0 : {
9871 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
9872 : 0 : if (TREE_CODE_CLASS (LT_EXPR) != tcc_comparison
9873 : 0 : || types_match (type, TREE_TYPE (captures[2]))
9874 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
9875 : : || (optimize_vectors_before_lowering_p ()
9876 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
9877 : 0 : TREE_TYPE (captures[1]), ERROR_MARK))
9878 : : )
9879 : : {
9880 : 0 : gimple_seq *lseq = seq;
9881 : 0 : if (lseq
9882 : 0 : && (!single_use (captures[0])
9883 : 0 : || !single_use (captures[4])))
9884 : 0 : lseq = NULL;
9885 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1943;
9886 : 0 : {
9887 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
9888 : 0 : res_op->ops[0] = captures[1];
9889 : 0 : {
9890 : 0 : tree _o1[2], _r1;
9891 : 0 : _o1[0] = captures[2];
9892 : 0 : _o1[1] = captures[5];
9893 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LT_EXPR, type, _o1[0], _o1[1]);
9894 : 0 : tem_op.resimplify (NULL, valueize);
9895 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
9896 : 0 : if (!_r1) goto next_after_fail1943;
9897 : 0 : res_op->ops[1] = _r1;
9898 : : }
9899 : 0 : {
9900 : 0 : tree _o1[2], _r1;
9901 : 0 : _o1[0] = captures[3];
9902 : 0 : _o1[1] = captures[6];
9903 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LT_EXPR, type, _o1[0], _o1[1]);
9904 : 0 : tem_op.resimplify (NULL, valueize);
9905 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
9906 : 0 : if (!_r1) goto next_after_fail1943;
9907 : 0 : res_op->ops[2] = _r1;
9908 : : }
9909 : 0 : res_op->resimplify (lseq, valueize);
9910 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 925, __FILE__, __LINE__, true);
9911 : 0 : return true;
9912 : : }
9913 : 0 : next_after_fail1943:;
9914 : : }
9915 : : }
9916 : : }
9917 : : break;
9918 : : }
9919 : : default:;
9920 : : }
9921 : : }
9922 : : break;
9923 : 218 : default:;
9924 : : }
9925 : 218 : {
9926 : 218 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
9927 : 218 : if (TREE_CODE_CLASS (LT_EXPR) != tcc_comparison
9928 : 218 : || types_match (type, TREE_TYPE (captures[2]))
9929 : 218 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
9930 : : || (optimize_vectors_before_lowering_p ()
9931 : 42 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
9932 : 42 : TREE_TYPE (captures[1]), ERROR_MARK))
9933 : : )
9934 : : {
9935 : 180 : gimple_seq *lseq = seq;
9936 : 180 : if (lseq
9937 : 50 : && (!single_use (captures[0])))
9938 : 173 : lseq = NULL;
9939 : 180 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1944;
9940 : 180 : {
9941 : 180 : res_op->set_op (VEC_COND_EXPR, type, 3);
9942 : 180 : res_op->ops[0] = captures[1];
9943 : 180 : {
9944 : 180 : tree _o1[2], _r1;
9945 : 180 : _o1[0] = captures[2];
9946 : 180 : _o1[1] = captures[4];
9947 : 180 : gimple_match_op tem_op (res_op->cond.any_else (), LT_EXPR, type, _o1[0], _o1[1]);
9948 : 180 : tem_op.resimplify (NULL, valueize);
9949 : 180 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
9950 : 180 : if (!_r1) goto next_after_fail1944;
9951 : 50 : res_op->ops[1] = _r1;
9952 : : }
9953 : 50 : {
9954 : 50 : tree _o1[2], _r1;
9955 : 50 : _o1[0] = captures[3];
9956 : 50 : _o1[1] = captures[4];
9957 : 50 : gimple_match_op tem_op (res_op->cond.any_else (), LT_EXPR, type, _o1[0], _o1[1]);
9958 : 50 : tem_op.resimplify (NULL, valueize);
9959 : 50 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
9960 : 50 : if (!_r1) goto next_after_fail1944;
9961 : 50 : res_op->ops[2] = _r1;
9962 : : }
9963 : 50 : res_op->resimplify (lseq, valueize);
9964 : 50 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 926, __FILE__, __LINE__, true);
9965 : 50 : return true;
9966 : : }
9967 : 168 : next_after_fail1944:;
9968 : : }
9969 : : }
9970 : 168 : break;
9971 : : }
9972 : : default:;
9973 : : }
9974 : : }
9975 : : break;
9976 : 12888056 : default:;
9977 : : }
9978 : 12888056 : switch (TREE_CODE (_p1))
9979 : : {
9980 : 9022228 : case SSA_NAME:
9981 : 9022228 : if (gimple *_d1 = get_def (valueize, _p1))
9982 : : {
9983 : 3086709 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9984 : 3928411 : switch (gimple_assign_rhs_code (_a1))
9985 : : {
9986 : 0 : case VEC_COND_EXPR:
9987 : 0 : {
9988 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
9989 : 0 : _q30 = do_valueize (valueize, _q30);
9990 : 0 : tree _q31 = gimple_assign_rhs2 (_a1);
9991 : 0 : _q31 = do_valueize (valueize, _q31);
9992 : 0 : tree _q32 = gimple_assign_rhs3 (_a1);
9993 : 0 : _q32 = do_valueize (valueize, _q32);
9994 : 0 : {
9995 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
9996 : 0 : if (TREE_CODE_CLASS (LT_EXPR) != tcc_comparison
9997 : 0 : || types_match (type, TREE_TYPE (captures[3]))
9998 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]), ERROR_MARK)
9999 : : || (optimize_vectors_before_lowering_p ()
10000 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]),
10001 : 0 : TREE_TYPE (captures[2]), ERROR_MARK))
10002 : : )
10003 : : {
10004 : 0 : gimple_seq *lseq = seq;
10005 : 0 : if (lseq
10006 : 0 : && (!single_use (captures[1])))
10007 : 0 : lseq = NULL;
10008 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1945;
10009 : 0 : {
10010 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
10011 : 0 : res_op->ops[0] = captures[2];
10012 : 0 : {
10013 : 0 : tree _o1[2], _r1;
10014 : 0 : _o1[0] = captures[0];
10015 : 0 : _o1[1] = captures[3];
10016 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LT_EXPR, type, _o1[0], _o1[1]);
10017 : 0 : tem_op.resimplify (NULL, valueize);
10018 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
10019 : 0 : if (!_r1) goto next_after_fail1945;
10020 : 0 : res_op->ops[1] = _r1;
10021 : : }
10022 : 0 : {
10023 : 0 : tree _o1[2], _r1;
10024 : 0 : _o1[0] = captures[0];
10025 : 0 : _o1[1] = captures[4];
10026 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LT_EXPR, type, _o1[0], _o1[1]);
10027 : 0 : tem_op.resimplify (NULL, valueize);
10028 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
10029 : 0 : if (!_r1) goto next_after_fail1945;
10030 : 0 : res_op->ops[2] = _r1;
10031 : : }
10032 : 0 : res_op->resimplify (lseq, valueize);
10033 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 927, __FILE__, __LINE__, true);
10034 : 0 : return true;
10035 : : }
10036 : 0 : next_after_fail1945:;
10037 : : }
10038 : : }
10039 : 0 : break;
10040 : : }
10041 : : default:;
10042 : : }
10043 : : }
10044 : : break;
10045 : 12888056 : default:;
10046 : : }
10047 : 12888056 : if (uniform_integer_cst_p (_p1))
10048 : : {
10049 : 2999893 : {
10050 : 2999893 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
10051 : 2999893 : if (gimple_simplify_347 (res_op, seq, valueize, type, captures, LT_EXPR, LE_EXPR))
10052 : 462427 : return true;
10053 : : }
10054 : : }
10055 : 12425629 : switch (TREE_CODE (_p0))
10056 : : {
10057 : 11960949 : case SSA_NAME:
10058 : 11960949 : if (gimple *_d1 = get_def (valueize, _p0))
10059 : : {
10060 : 4040849 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10061 : 4001091 : switch (gimple_assign_rhs_code (_a1))
10062 : : {
10063 : 36103 : case MULT_EXPR:
10064 : 36103 : {
10065 : 36103 : tree _q20 = gimple_assign_rhs1 (_a1);
10066 : 36103 : _q20 = do_valueize (valueize, _q20);
10067 : 36103 : tree _q21 = gimple_assign_rhs2 (_a1);
10068 : 36103 : _q21 = do_valueize (valueize, _q21);
10069 : 36103 : if (tree_swap_operands_p (_q20, _q21))
10070 : 305 : std::swap (_q20, _q21);
10071 : 36103 : switch (TREE_CODE (_q21))
10072 : : {
10073 : 22941 : case INTEGER_CST:
10074 : 22941 : {
10075 : 22941 : if (integer_zerop (_p1))
10076 : : {
10077 : 2267 : {
10078 : 2267 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
10079 : 2267 : if (gimple_simplify_245 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
10080 : 243 : return true;
10081 : : }
10082 : : }
10083 : : break;
10084 : : }
10085 : : default:;
10086 : : }
10087 : 12425386 : break;
10088 : : }
10089 : : default:;
10090 : : }
10091 : : }
10092 : : break;
10093 : 12425386 : default:;
10094 : : }
10095 : 12425386 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
10096 : : {
10097 : 12372 : {
10098 : 12372 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10099 : 12372 : if (gimple_simplify_296 (res_op, seq, valueize, type, captures, LT_EXPR))
10100 : 12372 : return true;
10101 : : }
10102 : : }
10103 : 12413014 : switch (TREE_CODE (_p0))
10104 : : {
10105 : 11953053 : case SSA_NAME:
10106 : 11953053 : if (gimple *_d1 = get_def (valueize, _p0))
10107 : : {
10108 : 4033804 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10109 : 3990965 : switch (gimple_assign_rhs_code (_a1))
10110 : : {
10111 : 2624 : case BIT_NOT_EXPR:
10112 : 2624 : {
10113 : 2624 : tree _q20 = gimple_assign_rhs1 (_a1);
10114 : 2624 : _q20 = do_valueize (valueize, _q20);
10115 : 2624 : switch (TREE_CODE (_p1))
10116 : : {
10117 : 1756 : case SSA_NAME:
10118 : 1756 : if (gimple *_d2 = get_def (valueize, _p1))
10119 : : {
10120 : 1288 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10121 : 1370 : switch (gimple_assign_rhs_code (_a2))
10122 : : {
10123 : 28 : case BIT_NOT_EXPR:
10124 : 28 : {
10125 : 28 : tree _q40 = gimple_assign_rhs1 (_a2);
10126 : 28 : _q40 = do_valueize (valueize, _q40);
10127 : 28 : {
10128 : 28 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _p1, _q40 };
10129 : 28 : if (gimple_simplify_249 (res_op, seq, valueize, type, captures, LT_EXPR))
10130 : 0 : return true;
10131 : : }
10132 : 28 : break;
10133 : : }
10134 : : default:;
10135 : : }
10136 : : }
10137 : : break;
10138 : 2624 : default:;
10139 : : }
10140 : 2624 : {
10141 : 2624 : tree _p1_pops[1];
10142 : 2624 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
10143 : : {
10144 : 96 : tree _q40 = _p1_pops[0];
10145 : 96 : switch (TREE_CODE (_q40))
10146 : : {
10147 : 96 : case SSA_NAME:
10148 : 96 : if (gimple *_d2 = get_def (valueize, _q40))
10149 : : {
10150 : 96 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10151 : 96 : switch (gimple_assign_rhs_code (_a2))
10152 : : {
10153 : 2 : case BIT_NOT_EXPR:
10154 : 2 : {
10155 : 2 : tree _q50 = gimple_assign_rhs1 (_a2);
10156 : 2 : _q50 = do_valueize (valueize, _q50);
10157 : 2 : {
10158 : 2 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q40, _q50 };
10159 : 2 : if (gimple_simplify_249 (res_op, seq, valueize, type, captures, LT_EXPR))
10160 : 1 : return true;
10161 : : }
10162 : 1 : break;
10163 : : }
10164 : : default:;
10165 : : }
10166 : : }
10167 : : break;
10168 : : default:;
10169 : : }
10170 : : }
10171 : : }
10172 : 2623 : if (CONSTANT_CLASS_P (_p1))
10173 : : {
10174 : 868 : {
10175 : 868 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
10176 : 868 : if (gimple_simplify_250 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
10177 : 821 : return true;
10178 : : }
10179 : : }
10180 : : break;
10181 : : }
10182 : : default:;
10183 : : }
10184 : : }
10185 : : break;
10186 : 12412192 : default:;
10187 : : }
10188 : 12412192 : {
10189 : 12412192 : tree _p0_pops[1];
10190 : 12412192 : if (gimple_nop_convert (_p0, _p0_pops, valueize))
10191 : : {
10192 : 388657 : tree _q20 = _p0_pops[0];
10193 : 388657 : switch (TREE_CODE (_q20))
10194 : : {
10195 : 386720 : case SSA_NAME:
10196 : 386720 : if (gimple *_d1 = get_def (valueize, _q20))
10197 : : {
10198 : 362380 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10199 : 348754 : switch (gimple_assign_rhs_code (_a1))
10200 : : {
10201 : 37 : case BIT_NOT_EXPR:
10202 : 37 : {
10203 : 37 : tree _q30 = gimple_assign_rhs1 (_a1);
10204 : 37 : _q30 = do_valueize (valueize, _q30);
10205 : 37 : switch (TREE_CODE (_p1))
10206 : : {
10207 : 16 : case SSA_NAME:
10208 : 16 : if (gimple *_d2 = get_def (valueize, _p1))
10209 : : {
10210 : 16 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10211 : 0 : switch (gimple_assign_rhs_code (_a2))
10212 : : {
10213 : 0 : case BIT_NOT_EXPR:
10214 : 0 : {
10215 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
10216 : 0 : _q50 = do_valueize (valueize, _q50);
10217 : 0 : {
10218 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _p1, _q50 };
10219 : 0 : if (gimple_simplify_251 (res_op, seq, valueize, type, captures, LT_EXPR))
10220 : 0 : return true;
10221 : : }
10222 : 0 : break;
10223 : : }
10224 : : default:;
10225 : : }
10226 : : }
10227 : : break;
10228 : 37 : default:;
10229 : : }
10230 : 37 : {
10231 : 37 : tree _p1_pops[1];
10232 : 37 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
10233 : : {
10234 : 0 : tree _q50 = _p1_pops[0];
10235 : 0 : switch (TREE_CODE (_q50))
10236 : : {
10237 : 0 : case SSA_NAME:
10238 : 0 : if (gimple *_d2 = get_def (valueize, _q50))
10239 : : {
10240 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10241 : 0 : switch (gimple_assign_rhs_code (_a2))
10242 : : {
10243 : 0 : case BIT_NOT_EXPR:
10244 : 0 : {
10245 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
10246 : 0 : _q60 = do_valueize (valueize, _q60);
10247 : 0 : {
10248 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q50, _q60 };
10249 : 0 : if (gimple_simplify_251 (res_op, seq, valueize, type, captures, LT_EXPR))
10250 : 0 : return true;
10251 : : }
10252 : 0 : break;
10253 : : }
10254 : : default:;
10255 : : }
10256 : : }
10257 : : break;
10258 : : default:;
10259 : : }
10260 : : }
10261 : : }
10262 : 37 : if (CONSTANT_CLASS_P (_p1))
10263 : : {
10264 : 21 : {
10265 : 21 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _p1 };
10266 : 21 : if (gimple_simplify_250 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
10267 : 2 : return true;
10268 : : }
10269 : : }
10270 : : break;
10271 : : }
10272 : : default:;
10273 : : }
10274 : : }
10275 : : break;
10276 : : default:;
10277 : : }
10278 : : }
10279 : : }
10280 : 12412190 : switch (TREE_CODE (_p1))
10281 : : {
10282 : 497369 : case REAL_CST:
10283 : 497369 : {
10284 : 497369 : {
10285 : 497369 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
10286 : 497369 : if (gimple_simplify_252 (res_op, seq, valueize, type, captures, LT_EXPR))
10287 : 807 : return true;
10288 : : }
10289 : 496562 : break;
10290 : : }
10291 : 12411383 : default:;
10292 : : }
10293 : 12411383 : switch (TREE_CODE (_p0))
10294 : : {
10295 : 11951422 : case SSA_NAME:
10296 : 11951422 : if (gimple *_d1 = get_def (valueize, _p0))
10297 : : {
10298 : 4032380 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10299 : 3989149 : switch (gimple_assign_rhs_code (_a1))
10300 : : {
10301 : 435112 : case PLUS_EXPR:
10302 : 435112 : {
10303 : 435112 : tree _q20 = gimple_assign_rhs1 (_a1);
10304 : 435112 : _q20 = do_valueize (valueize, _q20);
10305 : 435112 : tree _q21 = gimple_assign_rhs2 (_a1);
10306 : 435112 : _q21 = do_valueize (valueize, _q21);
10307 : 435112 : if (tree_swap_operands_p (_q20, _q21))
10308 : 10313 : std::swap (_q20, _q21);
10309 : 435112 : switch (TREE_CODE (_q21))
10310 : : {
10311 : 1269 : case REAL_CST:
10312 : 1269 : {
10313 : 1269 : switch (TREE_CODE (_p1))
10314 : : {
10315 : 1013 : case REAL_CST:
10316 : 1013 : {
10317 : 1013 : {
10318 : 1013 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
10319 : 1013 : if (gimple_simplify_253 (res_op, seq, valueize, type, captures, PLUS_EXPR, LT_EXPR))
10320 : 4 : return true;
10321 : : }
10322 : 1009 : break;
10323 : : }
10324 : : default:;
10325 : : }
10326 : : break;
10327 : : }
10328 : 314811 : case INTEGER_CST:
10329 : 314811 : {
10330 : 314811 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
10331 : : {
10332 : 12449 : {
10333 : 12449 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q20, _q21 };
10334 : 12449 : if (gimple_simplify_348 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
10335 : 4022 : return true;
10336 : : }
10337 : : }
10338 : : break;
10339 : : }
10340 : : default:;
10341 : : }
10342 : 12403810 : break;
10343 : : }
10344 : 277921 : case MINUS_EXPR:
10345 : 277921 : {
10346 : 277921 : tree _q20 = gimple_assign_rhs1 (_a1);
10347 : 277921 : _q20 = do_valueize (valueize, _q20);
10348 : 277921 : tree _q21 = gimple_assign_rhs2 (_a1);
10349 : 277921 : _q21 = do_valueize (valueize, _q21);
10350 : 277921 : switch (TREE_CODE (_q21))
10351 : : {
10352 : 1086 : case REAL_CST:
10353 : 1086 : {
10354 : 1086 : switch (TREE_CODE (_p1))
10355 : : {
10356 : 1086 : case REAL_CST:
10357 : 1086 : {
10358 : 1086 : {
10359 : 1086 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
10360 : 1086 : if (gimple_simplify_253 (res_op, seq, valueize, type, captures, MINUS_EXPR, LT_EXPR))
10361 : 0 : return true;
10362 : : }
10363 : 1086 : break;
10364 : : }
10365 : : default:;
10366 : : }
10367 : : break;
10368 : : }
10369 : 277921 : default:;
10370 : : }
10371 : 277921 : switch (TREE_CODE (_q20))
10372 : : {
10373 : 890 : case REAL_CST:
10374 : 890 : {
10375 : 890 : switch (TREE_CODE (_p1))
10376 : : {
10377 : 678 : case REAL_CST:
10378 : 678 : {
10379 : 678 : {
10380 : 678 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
10381 : 678 : if (gimple_simplify_254 (res_op, seq, valueize, type, captures, LT_EXPR))
10382 : 0 : return true;
10383 : : }
10384 : 678 : break;
10385 : : }
10386 : : default:;
10387 : : }
10388 : : break;
10389 : : }
10390 : : default:;
10391 : : }
10392 : : break;
10393 : : }
10394 : 2863 : case FLOAT_EXPR:
10395 : 2863 : {
10396 : 2863 : tree _q20 = gimple_assign_rhs1 (_a1);
10397 : 2863 : _q20 = do_valueize (valueize, _q20);
10398 : 2863 : switch (TREE_CODE (_p1))
10399 : : {
10400 : 1318 : case SSA_NAME:
10401 : 1318 : if (gimple *_d2 = get_def (valueize, _p1))
10402 : : {
10403 : 1247 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10404 : 1673 : switch (gimple_assign_rhs_code (_a2))
10405 : : {
10406 : 225 : case FLOAT_EXPR:
10407 : 225 : {
10408 : 225 : tree _q40 = gimple_assign_rhs1 (_a2);
10409 : 225 : _q40 = do_valueize (valueize, _q40);
10410 : 225 : {
10411 : 225 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
10412 : 225 : if (gimple_simplify_257 (res_op, seq, valueize, type, captures, LT_EXPR, LT_EXPR))
10413 : 0 : return true;
10414 : : }
10415 : 225 : break;
10416 : : }
10417 : : default:;
10418 : : }
10419 : : }
10420 : : break;
10421 : 1545 : case REAL_CST:
10422 : 1545 : {
10423 : 1545 : {
10424 : 1545 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
10425 : 1545 : if (gimple_simplify_258 (res_op, seq, valueize, type, captures, LT_EXPR, LE_EXPR))
10426 : 72 : return true;
10427 : : }
10428 : 1473 : break;
10429 : : }
10430 : : default:;
10431 : : }
10432 : : break;
10433 : : }
10434 : 4293 : case EXACT_DIV_EXPR:
10435 : 4293 : {
10436 : 4293 : tree _q20 = gimple_assign_rhs1 (_a1);
10437 : 4293 : _q20 = do_valueize (valueize, _q20);
10438 : 4293 : tree _q21 = gimple_assign_rhs2 (_a1);
10439 : 4293 : _q21 = do_valueize (valueize, _q21);
10440 : 4293 : switch (TREE_CODE (_q21))
10441 : : {
10442 : 4293 : case INTEGER_CST:
10443 : 4293 : {
10444 : 4293 : switch (TREE_CODE (_p1))
10445 : : {
10446 : 1126 : case INTEGER_CST:
10447 : 1126 : {
10448 : 1126 : {
10449 : 1126 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
10450 : 1126 : if (gimple_simplify_349 (res_op, seq, valueize, type, captures, LT_EXPR))
10451 : 1126 : return true;
10452 : : }
10453 : 0 : break;
10454 : : }
10455 : : default:;
10456 : : }
10457 : : break;
10458 : : }
10459 : : default:;
10460 : : }
10461 : : break;
10462 : : }
10463 : 610713 : CASE_CONVERT:
10464 : 610713 : {
10465 : 610713 : tree _q20 = gimple_assign_rhs1 (_a1);
10466 : 610713 : _q20 = do_valueize (valueize, _q20);
10467 : 610713 : switch (TREE_CODE (_q20))
10468 : : {
10469 : 608776 : case SSA_NAME:
10470 : 608776 : if (gimple *_d2 = get_def (valueize, _q20))
10471 : : {
10472 : 578418 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10473 : 537997 : switch (gimple_assign_rhs_code (_a2))
10474 : : {
10475 : 2777 : case EXACT_DIV_EXPR:
10476 : 2777 : {
10477 : 2777 : tree _q30 = gimple_assign_rhs1 (_a2);
10478 : 2777 : _q30 = do_valueize (valueize, _q30);
10479 : 2777 : tree _q31 = gimple_assign_rhs2 (_a2);
10480 : 2777 : _q31 = do_valueize (valueize, _q31);
10481 : 2777 : switch (TREE_CODE (_q31))
10482 : : {
10483 : 2777 : case INTEGER_CST:
10484 : 2777 : {
10485 : 2777 : switch (TREE_CODE (_p1))
10486 : : {
10487 : 761 : case INTEGER_CST:
10488 : 761 : {
10489 : 761 : {
10490 : 761 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
10491 : 761 : if (gimple_simplify_350 (res_op, seq, valueize, type, captures, LT_EXPR, GE_EXPR))
10492 : 2 : return true;
10493 : : }
10494 : 759 : break;
10495 : : }
10496 : : default:;
10497 : : }
10498 : : break;
10499 : : }
10500 : : default:;
10501 : : }
10502 : : break;
10503 : : }
10504 : : default:;
10505 : : }
10506 : : }
10507 : : break;
10508 : 610711 : default:;
10509 : : }
10510 : 610711 : switch (TREE_CODE (_p1))
10511 : : {
10512 : 340493 : case SSA_NAME:
10513 : 340493 : if (gimple *_d2 = get_def (valueize, _p1))
10514 : : {
10515 : 326052 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10516 : 343648 : switch (gimple_assign_rhs_code (_a2))
10517 : : {
10518 : 106957 : CASE_CONVERT:
10519 : 106957 : {
10520 : 106957 : tree _q40 = gimple_assign_rhs1 (_a2);
10521 : 106957 : _q40 = do_valueize (valueize, _q40);
10522 : 106957 : {
10523 : 106957 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
10524 : 106957 : if (gimple_simplify_262 (res_op, seq, valueize, type, captures, LT_EXPR))
10525 : 746 : return true;
10526 : : }
10527 : 106211 : break;
10528 : : }
10529 : : default:;
10530 : : }
10531 : : }
10532 : : break;
10533 : 609965 : default:;
10534 : : }
10535 : 609965 : {
10536 : 609965 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _p1 };
10537 : 609965 : if (gimple_simplify_263 (res_op, seq, valueize, type, captures, LT_EXPR))
10538 : 998 : return true;
10539 : : }
10540 : 608967 : break;
10541 : : }
10542 : 2438 : case NEGATE_EXPR:
10543 : 2438 : {
10544 : 2438 : tree _q20 = gimple_assign_rhs1 (_a1);
10545 : 2438 : _q20 = do_valueize (valueize, _q20);
10546 : 2438 : switch (TREE_CODE (_p1))
10547 : : {
10548 : 1619 : case SSA_NAME:
10549 : 1619 : if (gimple *_d2 = get_def (valueize, _p1))
10550 : : {
10551 : 1528 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10552 : 1913 : switch (gimple_assign_rhs_code (_a2))
10553 : : {
10554 : 229 : case NEGATE_EXPR:
10555 : 229 : {
10556 : 229 : tree _q40 = gimple_assign_rhs1 (_a2);
10557 : 229 : _q40 = do_valueize (valueize, _q40);
10558 : 229 : {
10559 : 229 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
10560 : 229 : if (gimple_simplify_260 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
10561 : 229 : return true;
10562 : : }
10563 : 0 : break;
10564 : : }
10565 : : default:;
10566 : : }
10567 : : }
10568 : : break;
10569 : 2209 : default:;
10570 : : }
10571 : 2209 : if (CONSTANT_CLASS_P (_p1))
10572 : : {
10573 : 819 : {
10574 : 819 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
10575 : 819 : if (gimple_simplify_261 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
10576 : 349 : return true;
10577 : : }
10578 : : }
10579 : : break;
10580 : : }
10581 : 6891 : case COND_EXPR:
10582 : 6891 : {
10583 : 6891 : tree _q20 = gimple_assign_rhs1 (_a1);
10584 : 6891 : _q20 = do_valueize (valueize, _q20);
10585 : 6891 : tree _q21 = gimple_assign_rhs2 (_a1);
10586 : 6891 : _q21 = do_valueize (valueize, _q21);
10587 : 6891 : tree _q22 = gimple_assign_rhs3 (_a1);
10588 : 6891 : _q22 = do_valueize (valueize, _q22);
10589 : 6891 : {
10590 : 6891 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q22, _p1 };
10591 : 6891 : if (gimple_simplify_278 (res_op, seq, valueize, type, captures, LT_EXPR))
10592 : 1 : return true;
10593 : : }
10594 : 6890 : break;
10595 : : }
10596 : : default:;
10597 : : }
10598 : 1250294 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
10599 : 269687 : switch (gimple_call_combined_fn (_c1))
10600 : : {
10601 : 8 : case CFN_BUILT_IN_SQRTF:
10602 : 8 : if (gimple_call_num_args (_c1) == 1)
10603 : : {
10604 : 8 : tree _q20 = gimple_call_arg (_c1, 0);
10605 : 8 : _q20 = do_valueize (valueize, _q20);
10606 : 8 : switch (TREE_CODE (_p1))
10607 : : {
10608 : 2 : case SSA_NAME:
10609 : 2 : if (gimple *_d2 = get_def (valueize, _p1))
10610 : : {
10611 : 2 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
10612 : 2 : switch (gimple_call_combined_fn (_c2))
10613 : : {
10614 : 2 : case CFN_BUILT_IN_SQRTF:
10615 : 2 : if (gimple_call_num_args (_c2) == 1)
10616 : : {
10617 : 2 : tree _q40 = gimple_call_arg (_c2, 0);
10618 : 2 : _q40 = do_valueize (valueize, _q40);
10619 : 2 : {
10620 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
10621 : 2 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTF, LT_EXPR))
10622 : 2 : return true;
10623 : : }
10624 : : }
10625 : : break;
10626 : : default:;
10627 : : }
10628 : : }
10629 : : break;
10630 : 6 : case REAL_CST:
10631 : 6 : {
10632 : 6 : {
10633 : 6 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
10634 : 6 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTF, LT_EXPR))
10635 : 6 : return true;
10636 : : }
10637 : 0 : break;
10638 : : }
10639 : : default:;
10640 : : }
10641 : : }
10642 : : break;
10643 : 8 : case CFN_BUILT_IN_SQRTL:
10644 : 8 : if (gimple_call_num_args (_c1) == 1)
10645 : : {
10646 : 8 : tree _q20 = gimple_call_arg (_c1, 0);
10647 : 8 : _q20 = do_valueize (valueize, _q20);
10648 : 8 : switch (TREE_CODE (_p1))
10649 : : {
10650 : 2 : case SSA_NAME:
10651 : 2 : if (gimple *_d2 = get_def (valueize, _p1))
10652 : : {
10653 : 2 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
10654 : 2 : switch (gimple_call_combined_fn (_c2))
10655 : : {
10656 : 2 : case CFN_BUILT_IN_SQRTL:
10657 : 2 : if (gimple_call_num_args (_c2) == 1)
10658 : : {
10659 : 2 : tree _q40 = gimple_call_arg (_c2, 0);
10660 : 2 : _q40 = do_valueize (valueize, _q40);
10661 : 2 : {
10662 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
10663 : 2 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTL, LT_EXPR))
10664 : 2 : return true;
10665 : : }
10666 : : }
10667 : : break;
10668 : : default:;
10669 : : }
10670 : : }
10671 : : break;
10672 : 6 : case REAL_CST:
10673 : 6 : {
10674 : 6 : {
10675 : 6 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
10676 : 6 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTL, LT_EXPR))
10677 : 6 : return true;
10678 : : }
10679 : 0 : break;
10680 : : }
10681 : : default:;
10682 : : }
10683 : : }
10684 : : break;
10685 : 148 : case CFN_BUILT_IN_SQRT:
10686 : 148 : if (gimple_call_num_args (_c1) == 1)
10687 : : {
10688 : 148 : tree _q20 = gimple_call_arg (_c1, 0);
10689 : 148 : _q20 = do_valueize (valueize, _q20);
10690 : 148 : switch (TREE_CODE (_p1))
10691 : : {
10692 : 2 : case SSA_NAME:
10693 : 2 : if (gimple *_d2 = get_def (valueize, _p1))
10694 : : {
10695 : 2 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
10696 : 2 : switch (gimple_call_combined_fn (_c2))
10697 : : {
10698 : 2 : case CFN_BUILT_IN_SQRT:
10699 : 2 : if (gimple_call_num_args (_c2) == 1)
10700 : : {
10701 : 2 : tree _q40 = gimple_call_arg (_c2, 0);
10702 : 2 : _q40 = do_valueize (valueize, _q40);
10703 : 2 : {
10704 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
10705 : 2 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRT, LT_EXPR))
10706 : 2 : return true;
10707 : : }
10708 : : }
10709 : : break;
10710 : : default:;
10711 : : }
10712 : : }
10713 : : break;
10714 : 146 : case REAL_CST:
10715 : 146 : {
10716 : 146 : {
10717 : 146 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
10718 : 146 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRT, LT_EXPR))
10719 : 6 : return true;
10720 : : }
10721 : 140 : break;
10722 : : }
10723 : : default:;
10724 : : }
10725 : : }
10726 : : break;
10727 : 3 : case CFN_SQRT:
10728 : 3 : if (gimple_call_num_args (_c1) == 1)
10729 : : {
10730 : 3 : tree _q20 = gimple_call_arg (_c1, 0);
10731 : 3 : _q20 = do_valueize (valueize, _q20);
10732 : 3 : switch (TREE_CODE (_p1))
10733 : : {
10734 : 0 : case SSA_NAME:
10735 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
10736 : : {
10737 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
10738 : 0 : switch (gimple_call_combined_fn (_c2))
10739 : : {
10740 : 0 : case CFN_SQRT:
10741 : 0 : if (gimple_call_num_args (_c2) == 1)
10742 : : {
10743 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
10744 : 0 : _q40 = do_valueize (valueize, _q40);
10745 : 0 : {
10746 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
10747 : 0 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, CFN_SQRT, LT_EXPR))
10748 : 0 : return true;
10749 : : }
10750 : : }
10751 : : break;
10752 : : default:;
10753 : : }
10754 : : }
10755 : : break;
10756 : 3 : case REAL_CST:
10757 : 3 : {
10758 : 3 : {
10759 : 3 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
10760 : 3 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, CFN_SQRT, LT_EXPR))
10761 : 0 : return true;
10762 : : }
10763 : 3 : break;
10764 : : }
10765 : : default:;
10766 : : }
10767 : : }
10768 : : break;
10769 : : default:;
10770 : : }
10771 : : }
10772 : : break;
10773 : 12403810 : default:;
10774 : : }
10775 : 12403810 : switch (TREE_CODE (_p1))
10776 : : {
10777 : 9009571 : case SSA_NAME:
10778 : 9009571 : if (gimple *_d1 = get_def (valueize, _p1))
10779 : : {
10780 : 3074917 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10781 : 3912096 : switch (gimple_assign_rhs_code (_a1))
10782 : : {
10783 : 2894 : case COND_EXPR:
10784 : 2894 : {
10785 : 2894 : tree _q30 = gimple_assign_rhs1 (_a1);
10786 : 2894 : _q30 = do_valueize (valueize, _q30);
10787 : 2894 : tree _q31 = gimple_assign_rhs2 (_a1);
10788 : 2894 : _q31 = do_valueize (valueize, _q31);
10789 : 2894 : tree _q32 = gimple_assign_rhs3 (_a1);
10790 : 2894 : _q32 = do_valueize (valueize, _q32);
10791 : 2894 : {
10792 : 2894 : tree captures[4] ATTRIBUTE_UNUSED = { _q30, _q31, _q32, _p0 };
10793 : 2894 : if (gimple_simplify_278 (res_op, seq, valueize, type, captures, GT_EXPR))
10794 : 0 : return true;
10795 : : }
10796 : 2894 : break;
10797 : : }
10798 : : default:;
10799 : : }
10800 : : }
10801 : : break;
10802 : 12403810 : default:;
10803 : : }
10804 : 12403810 : switch (TREE_CODE (_p0))
10805 : : {
10806 : 11943849 : case SSA_NAME:
10807 : 11943849 : if (gimple *_d1 = get_def (valueize, _p0))
10808 : : {
10809 : 4024807 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10810 : 3981600 : switch (gimple_assign_rhs_code (_a1))
10811 : : {
10812 : 608967 : CASE_CONVERT:
10813 : 608967 : {
10814 : 608967 : tree _q20 = gimple_assign_rhs1 (_a1);
10815 : 608967 : _q20 = do_valueize (valueize, _q20);
10816 : 608967 : switch (TREE_CODE (_q20))
10817 : : {
10818 : 607030 : case SSA_NAME:
10819 : 607030 : if (gimple *_d2 = get_def (valueize, _q20))
10820 : : {
10821 : 576690 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10822 : 536180 : switch (gimple_assign_rhs_code (_a2))
10823 : : {
10824 : 1374 : case ADDR_EXPR:
10825 : 1374 : {
10826 : 1374 : switch (TREE_CODE (_p1))
10827 : : {
10828 : 1374 : case SSA_NAME:
10829 : 1374 : if (gimple *_d3 = get_def (valueize, _p1))
10830 : : {
10831 : 1374 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
10832 : 1374 : switch (gimple_assign_rhs_code (_a3))
10833 : : {
10834 : 1374 : CASE_CONVERT:
10835 : 1374 : {
10836 : 1374 : tree _q40 = gimple_assign_rhs1 (_a3);
10837 : 1374 : _q40 = do_valueize (valueize, _q40);
10838 : 1374 : switch (TREE_CODE (_q40))
10839 : : {
10840 : 1374 : case SSA_NAME:
10841 : 1374 : if (gimple *_d4 = get_def (valueize, _q40))
10842 : : {
10843 : 1374 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
10844 : 2748 : switch (gimple_assign_rhs_code (_a4))
10845 : : {
10846 : 0 : case ADDR_EXPR:
10847 : 0 : {
10848 : 0 : {
10849 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
10850 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, LT_EXPR))
10851 : 0 : return true;
10852 : : }
10853 : 0 : break;
10854 : : }
10855 : : default:;
10856 : : }
10857 : : }
10858 : : break;
10859 : 0 : case ADDR_EXPR:
10860 : 0 : {
10861 : 0 : {
10862 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
10863 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, LT_EXPR))
10864 : 0 : return true;
10865 : : }
10866 : 0 : break;
10867 : : }
10868 : : default:;
10869 : : }
10870 : : break;
10871 : : }
10872 : 0 : case ADDR_EXPR:
10873 : 0 : {
10874 : 0 : {
10875 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
10876 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, LT_EXPR))
10877 : 0 : return true;
10878 : : }
10879 : 0 : break;
10880 : : }
10881 : : default:;
10882 : : }
10883 : : }
10884 : : break;
10885 : 0 : case ADDR_EXPR:
10886 : 0 : {
10887 : 0 : {
10888 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
10889 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, LT_EXPR))
10890 : 0 : return true;
10891 : : }
10892 : 0 : break;
10893 : : }
10894 : : default:;
10895 : : }
10896 : : break;
10897 : : }
10898 : : default:;
10899 : : }
10900 : : }
10901 : : break;
10902 : 1937 : case ADDR_EXPR:
10903 : 1937 : {
10904 : 1937 : switch (TREE_CODE (_p1))
10905 : : {
10906 : 1937 : case SSA_NAME:
10907 : 1937 : if (gimple *_d2 = get_def (valueize, _p1))
10908 : : {
10909 : 1927 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10910 : 2789 : switch (gimple_assign_rhs_code (_a2))
10911 : : {
10912 : 1013 : CASE_CONVERT:
10913 : 1013 : {
10914 : 1013 : tree _q40 = gimple_assign_rhs1 (_a2);
10915 : 1013 : _q40 = do_valueize (valueize, _q40);
10916 : 1013 : switch (TREE_CODE (_q40))
10917 : : {
10918 : 817 : case SSA_NAME:
10919 : 817 : if (gimple *_d3 = get_def (valueize, _q40))
10920 : : {
10921 : 817 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
10922 : 1572 : switch (gimple_assign_rhs_code (_a3))
10923 : : {
10924 : 0 : case ADDR_EXPR:
10925 : 0 : {
10926 : 0 : {
10927 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
10928 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, LT_EXPR))
10929 : 0 : return true;
10930 : : }
10931 : 0 : break;
10932 : : }
10933 : : default:;
10934 : : }
10935 : : }
10936 : : break;
10937 : 196 : case ADDR_EXPR:
10938 : 196 : {
10939 : 196 : {
10940 : 196 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
10941 : 196 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, LT_EXPR))
10942 : 10 : return true;
10943 : : }
10944 : 186 : break;
10945 : : }
10946 : : default:;
10947 : : }
10948 : : break;
10949 : : }
10950 : 0 : case ADDR_EXPR:
10951 : 0 : {
10952 : 0 : {
10953 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
10954 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, LT_EXPR))
10955 : 0 : return true;
10956 : : }
10957 : 0 : break;
10958 : : }
10959 : : default:;
10960 : : }
10961 : : }
10962 : : break;
10963 : 0 : case ADDR_EXPR:
10964 : 0 : {
10965 : 0 : {
10966 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
10967 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, LT_EXPR))
10968 : 0 : return true;
10969 : : }
10970 : 0 : break;
10971 : : }
10972 : : default:;
10973 : : }
10974 : : break;
10975 : : }
10976 : 608957 : default:;
10977 : : }
10978 : 608957 : if (uniform_integer_cst_p (_p1))
10979 : : {
10980 : 261435 : {
10981 : 261435 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
10982 : 261435 : if (gimple_simplify_351 (res_op, seq, valueize, type, captures, LT_EXPR))
10983 : 1691 : return true;
10984 : : }
10985 : : }
10986 : : break;
10987 : : }
10988 : 260 : case ADDR_EXPR:
10989 : 260 : {
10990 : 260 : switch (TREE_CODE (_p1))
10991 : : {
10992 : 260 : case SSA_NAME:
10993 : 260 : if (gimple *_d2 = get_def (valueize, _p1))
10994 : : {
10995 : 258 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10996 : 320 : switch (gimple_assign_rhs_code (_a2))
10997 : : {
10998 : 2 : CASE_CONVERT:
10999 : 2 : {
11000 : 2 : tree _q30 = gimple_assign_rhs1 (_a2);
11001 : 2 : _q30 = do_valueize (valueize, _q30);
11002 : 2 : switch (TREE_CODE (_q30))
11003 : : {
11004 : 2 : case SSA_NAME:
11005 : 2 : if (gimple *_d3 = get_def (valueize, _q30))
11006 : : {
11007 : 2 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11008 : 2 : switch (gimple_assign_rhs_code (_a3))
11009 : : {
11010 : 0 : case ADDR_EXPR:
11011 : 0 : {
11012 : 0 : {
11013 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
11014 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, LT_EXPR))
11015 : 0 : return true;
11016 : : }
11017 : 0 : break;
11018 : : }
11019 : : default:;
11020 : : }
11021 : : }
11022 : : break;
11023 : 0 : case ADDR_EXPR:
11024 : 0 : {
11025 : 0 : {
11026 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
11027 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, LT_EXPR))
11028 : 0 : return true;
11029 : : }
11030 : 0 : break;
11031 : : }
11032 : : default:;
11033 : : }
11034 : : break;
11035 : : }
11036 : 82 : case ADDR_EXPR:
11037 : 82 : {
11038 : 82 : {
11039 : 82 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
11040 : 82 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, LT_EXPR))
11041 : 56 : return true;
11042 : : }
11043 : 26 : break;
11044 : : }
11045 : : default:;
11046 : : }
11047 : : }
11048 : : break;
11049 : 0 : case ADDR_EXPR:
11050 : 0 : {
11051 : 0 : {
11052 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
11053 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, LT_EXPR))
11054 : 0 : return true;
11055 : : }
11056 : 0 : break;
11057 : : }
11058 : : default:;
11059 : : }
11060 : : break;
11061 : : }
11062 : : default:;
11063 : : }
11064 : : }
11065 : : break;
11066 : 17836 : case ADDR_EXPR:
11067 : 17836 : {
11068 : 17836 : switch (TREE_CODE (_p1))
11069 : : {
11070 : 10553 : case SSA_NAME:
11071 : 10553 : if (gimple *_d1 = get_def (valueize, _p1))
11072 : : {
11073 : 3852 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11074 : 6491 : switch (gimple_assign_rhs_code (_a1))
11075 : : {
11076 : 23 : CASE_CONVERT:
11077 : 23 : {
11078 : 23 : tree _q30 = gimple_assign_rhs1 (_a1);
11079 : 23 : _q30 = do_valueize (valueize, _q30);
11080 : 23 : switch (TREE_CODE (_q30))
11081 : : {
11082 : 23 : case SSA_NAME:
11083 : 23 : if (gimple *_d2 = get_def (valueize, _q30))
11084 : : {
11085 : 18 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11086 : 18 : switch (gimple_assign_rhs_code (_a2))
11087 : : {
11088 : 0 : case ADDR_EXPR:
11089 : 0 : {
11090 : 0 : {
11091 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
11092 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, LT_EXPR))
11093 : 0 : return true;
11094 : : }
11095 : 0 : break;
11096 : : }
11097 : : default:;
11098 : : }
11099 : : }
11100 : : break;
11101 : 0 : case ADDR_EXPR:
11102 : 0 : {
11103 : 0 : {
11104 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
11105 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, LT_EXPR))
11106 : 0 : return true;
11107 : : }
11108 : 0 : break;
11109 : : }
11110 : : default:;
11111 : : }
11112 : : break;
11113 : : }
11114 : 6 : case ADDR_EXPR:
11115 : 6 : {
11116 : 6 : {
11117 : 6 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
11118 : 6 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, LT_EXPR))
11119 : 6 : return true;
11120 : : }
11121 : 0 : break;
11122 : : }
11123 : : default:;
11124 : : }
11125 : : }
11126 : : break;
11127 : 7239 : case ADDR_EXPR:
11128 : 7239 : {
11129 : 7239 : {
11130 : 7239 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
11131 : 7239 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, LT_EXPR))
11132 : 7117 : return true;
11133 : : }
11134 : 122 : break;
11135 : : }
11136 : : default:;
11137 : : }
11138 : : break;
11139 : : }
11140 : 12394930 : default:;
11141 : : }
11142 : 12394930 : switch (TREE_CODE (_p1))
11143 : : {
11144 : 9009499 : case SSA_NAME:
11145 : 9009499 : if (gimple *_d1 = get_def (valueize, _p1))
11146 : : {
11147 : 3074845 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11148 : 3911962 : switch (gimple_assign_rhs_code (_a1))
11149 : : {
11150 : 328588 : CASE_CONVERT:
11151 : 328588 : {
11152 : 328588 : tree _q30 = gimple_assign_rhs1 (_a1);
11153 : 328588 : _q30 = do_valueize (valueize, _q30);
11154 : 328588 : switch (TREE_CODE (_q30))
11155 : : {
11156 : 326795 : case SSA_NAME:
11157 : 326795 : if (gimple *_d2 = get_def (valueize, _q30))
11158 : : {
11159 : 316361 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11160 : 389500 : switch (gimple_assign_rhs_code (_a2))
11161 : : {
11162 : 52 : case NE_EXPR:
11163 : 52 : {
11164 : 52 : tree _q40 = gimple_assign_rhs1 (_a2);
11165 : 52 : _q40 = do_valueize (valueize, _q40);
11166 : 52 : tree _q41 = gimple_assign_rhs2 (_a2);
11167 : 52 : _q41 = do_valueize (valueize, _q41);
11168 : 52 : if (tree_swap_operands_p (_q40, _q41))
11169 : 0 : std::swap (_q40, _q41);
11170 : 52 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
11171 : : {
11172 : 0 : if (integer_zerop (_q41))
11173 : : {
11174 : 0 : {
11175 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
11176 : 0 : if (TYPE_UNSIGNED (TREE_TYPE (captures[0]))
11177 : : )
11178 : : {
11179 : 0 : gimple_seq *lseq = seq;
11180 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1946;
11181 : 0 : {
11182 : 0 : tree tem;
11183 : 0 : tem = constant_boolean_node (false, type);
11184 : 0 : res_op->set_value (tem);
11185 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1032, __FILE__, __LINE__, true);
11186 : 0 : return true;
11187 : : }
11188 : 0 : next_after_fail1946:;
11189 : : }
11190 : : }
11191 : : }
11192 : : }
11193 : 12394930 : break;
11194 : : }
11195 : : default:;
11196 : : }
11197 : : }
11198 : : break;
11199 : : default:;
11200 : : }
11201 : : break;
11202 : : }
11203 : : default:;
11204 : : }
11205 : : }
11206 : : break;
11207 : 12394930 : default:;
11208 : : }
11209 : 12394930 : if (uniform_integer_cst_p (_p1))
11210 : : {
11211 : 2532462 : {
11212 : 2532462 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
11213 : 2532462 : if (gimple_simplify_352 (res_op, seq, valueize, type, captures, LT_EXPR))
11214 : 17699 : return true;
11215 : : }
11216 : : }
11217 : 12377231 : switch (TREE_CODE (_p0))
11218 : : {
11219 : 11924572 : case SSA_NAME:
11220 : 11924572 : if (gimple *_d1 = get_def (valueize, _p0))
11221 : : {
11222 : 4016078 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11223 : 3969900 : switch (gimple_assign_rhs_code (_a1))
11224 : : {
11225 : 606259 : CASE_CONVERT:
11226 : 606259 : {
11227 : 606259 : tree _q20 = gimple_assign_rhs1 (_a1);
11228 : 606259 : _q20 = do_valueize (valueize, _q20);
11229 : 606259 : switch (TREE_CODE (_q20))
11230 : : {
11231 : 604332 : case SSA_NAME:
11232 : 604332 : if (gimple *_d2 = get_def (valueize, _q20))
11233 : : {
11234 : 573992 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11235 : 534166 : switch (gimple_assign_rhs_code (_a2))
11236 : : {
11237 : 74675 : case PLUS_EXPR:
11238 : 74675 : {
11239 : 74675 : tree _q30 = gimple_assign_rhs1 (_a2);
11240 : 74675 : _q30 = do_valueize (valueize, _q30);
11241 : 74675 : tree _q31 = gimple_assign_rhs2 (_a2);
11242 : 74675 : _q31 = do_valueize (valueize, _q31);
11243 : 74675 : if (tree_swap_operands_p (_q30, _q31))
11244 : 681 : std::swap (_q30, _q31);
11245 : 74675 : switch (TREE_CODE (_q30))
11246 : : {
11247 : 74675 : case SSA_NAME:
11248 : 74675 : if (gimple *_d3 = get_def (valueize, _q30))
11249 : : {
11250 : 72749 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11251 : 66376 : switch (gimple_assign_rhs_code (_a3))
11252 : : {
11253 : 21314 : CASE_CONVERT:
11254 : 21314 : {
11255 : 21314 : tree _q40 = gimple_assign_rhs1 (_a3);
11256 : 21314 : _q40 = do_valueize (valueize, _q40);
11257 : 21314 : switch (TREE_CODE (_q31))
11258 : : {
11259 : 18608 : case INTEGER_CST:
11260 : 18608 : {
11261 : 18608 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
11262 : : {
11263 : 6 : {
11264 : 6 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q40, _q31 };
11265 : 6 : if (gimple_simplify_353 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
11266 : 6 : return true;
11267 : : }
11268 : : }
11269 : : break;
11270 : : }
11271 : : default:;
11272 : : }
11273 : : break;
11274 : : }
11275 : : default:;
11276 : : }
11277 : : }
11278 : : break;
11279 : : default:;
11280 : : }
11281 : 12377225 : break;
11282 : : }
11283 : : default:;
11284 : : }
11285 : : }
11286 : : break;
11287 : : default:;
11288 : : }
11289 : : break;
11290 : : }
11291 : : default:;
11292 : : }
11293 : : }
11294 : : break;
11295 : 12377225 : default:;
11296 : : }
11297 : 12377225 : switch (TREE_CODE (_p1))
11298 : : {
11299 : 9009493 : case SSA_NAME:
11300 : 9009493 : if (gimple *_d1 = get_def (valueize, _p1))
11301 : : {
11302 : 3074839 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11303 : 3911956 : switch (gimple_assign_rhs_code (_a1))
11304 : : {
11305 : 328588 : CASE_CONVERT:
11306 : 328588 : {
11307 : 328588 : tree _q30 = gimple_assign_rhs1 (_a1);
11308 : 328588 : _q30 = do_valueize (valueize, _q30);
11309 : 328588 : switch (TREE_CODE (_q30))
11310 : : {
11311 : 326795 : case SSA_NAME:
11312 : 326795 : if (gimple *_d2 = get_def (valueize, _q30))
11313 : : {
11314 : 316361 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11315 : 389500 : switch (gimple_assign_rhs_code (_a2))
11316 : : {
11317 : 62291 : case PLUS_EXPR:
11318 : 62291 : {
11319 : 62291 : tree _q40 = gimple_assign_rhs1 (_a2);
11320 : 62291 : _q40 = do_valueize (valueize, _q40);
11321 : 62291 : tree _q41 = gimple_assign_rhs2 (_a2);
11322 : 62291 : _q41 = do_valueize (valueize, _q41);
11323 : 62291 : if (tree_swap_operands_p (_q40, _q41))
11324 : 987 : std::swap (_q40, _q41);
11325 : 62291 : switch (TREE_CODE (_q40))
11326 : : {
11327 : 62291 : case SSA_NAME:
11328 : 62291 : if (gimple *_d3 = get_def (valueize, _q40))
11329 : : {
11330 : 61003 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11331 : 54484 : switch (gimple_assign_rhs_code (_a3))
11332 : : {
11333 : 38931 : CASE_CONVERT:
11334 : 38931 : {
11335 : 38931 : tree _q50 = gimple_assign_rhs1 (_a3);
11336 : 38931 : _q50 = do_valueize (valueize, _q50);
11337 : 38931 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
11338 : : {
11339 : 110 : switch (TREE_CODE (_q41))
11340 : : {
11341 : 110 : case INTEGER_CST:
11342 : 110 : {
11343 : 110 : {
11344 : 110 : tree captures[5] ATTRIBUTE_UNUSED = { _p1, _q30, _q40, _p0, _q41 };
11345 : 110 : if (gimple_simplify_353 (res_op, seq, valueize, type, captures, GT_EXPR, LE_EXPR))
11346 : 13 : return true;
11347 : : }
11348 : 97 : break;
11349 : : }
11350 : : default:;
11351 : : }
11352 : : }
11353 : : break;
11354 : : }
11355 : : default:;
11356 : : }
11357 : : }
11358 : : break;
11359 : : default:;
11360 : : }
11361 : 12377046 : break;
11362 : : }
11363 : : default:;
11364 : : }
11365 : : }
11366 : : break;
11367 : : default:;
11368 : : }
11369 : : break;
11370 : : }
11371 : 369902 : case PLUS_EXPR:
11372 : 369902 : {
11373 : 369902 : tree _q30 = gimple_assign_rhs1 (_a1);
11374 : 369902 : _q30 = do_valueize (valueize, _q30);
11375 : 369902 : tree _q31 = gimple_assign_rhs2 (_a1);
11376 : 369902 : _q31 = do_valueize (valueize, _q31);
11377 : 369902 : if (tree_swap_operands_p (_q30, _q31))
11378 : 14135 : std::swap (_q30, _q31);
11379 : 369902 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
11380 : : {
11381 : 20013 : switch (TREE_CODE (_q31))
11382 : : {
11383 : 2078 : case INTEGER_CST:
11384 : 2078 : {
11385 : 2078 : {
11386 : 2078 : tree captures[5] ATTRIBUTE_UNUSED = { _p1, _p1, _q30, _p0, _q31 };
11387 : 2078 : if (gimple_simplify_348 (res_op, seq, valueize, type, captures, GT_EXPR, LE_EXPR))
11388 : 117 : return true;
11389 : : }
11390 : 1961 : break;
11391 : : }
11392 : : default:;
11393 : : }
11394 : : }
11395 : 12377046 : break;
11396 : : }
11397 : 34375 : case MINUS_EXPR:
11398 : 34375 : {
11399 : 34375 : tree _q30 = gimple_assign_rhs1 (_a1);
11400 : 34375 : _q30 = do_valueize (valueize, _q30);
11401 : 34375 : tree _q31 = gimple_assign_rhs2 (_a1);
11402 : 34375 : _q31 = do_valueize (valueize, _q31);
11403 : 34375 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
11404 : : {
11405 : 1548 : {
11406 : 1548 : tree captures[3] ATTRIBUTE_UNUSED = { _p1, _p0, _q31 };
11407 : 1548 : if (gimple_simplify_354 (res_op, seq, valueize, type, captures, GT_EXPR))
11408 : 49 : return true;
11409 : : }
11410 : : }
11411 : : break;
11412 : : }
11413 : : default:;
11414 : : }
11415 : : }
11416 : : break;
11417 : 12377046 : default:;
11418 : : }
11419 : 12377046 : switch (TREE_CODE (_p0))
11420 : : {
11421 : 11924387 : case SSA_NAME:
11422 : 11924387 : if (gimple *_d1 = get_def (valueize, _p0))
11423 : : {
11424 : 4015893 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11425 : 3969810 : switch (gimple_assign_rhs_code (_a1))
11426 : : {
11427 : 430841 : case PLUS_EXPR:
11428 : 430841 : {
11429 : 430841 : tree _q20 = gimple_assign_rhs1 (_a1);
11430 : 430841 : _q20 = do_valueize (valueize, _q20);
11431 : 430841 : tree _q21 = gimple_assign_rhs2 (_a1);
11432 : 430841 : _q21 = do_valueize (valueize, _q21);
11433 : 430841 : if (tree_swap_operands_p (_q20, _q21))
11434 : 10284 : std::swap (_q20, _q21);
11435 : 430841 : switch (TREE_CODE (_q20))
11436 : : {
11437 : 430841 : case SSA_NAME:
11438 : 430841 : if (gimple *_d2 = get_def (valueize, _q20))
11439 : : {
11440 : 418863 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11441 : 368764 : switch (gimple_assign_rhs_code (_a2))
11442 : : {
11443 : 24851 : case MINUS_EXPR:
11444 : 24851 : {
11445 : 24851 : tree _q30 = gimple_assign_rhs1 (_a2);
11446 : 24851 : _q30 = do_valueize (valueize, _q30);
11447 : 24851 : tree _q31 = gimple_assign_rhs2 (_a2);
11448 : 24851 : _q31 = do_valueize (valueize, _q31);
11449 : 24851 : if (integer_minus_onep (_q21))
11450 : : {
11451 : 1149 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
11452 : : {
11453 : 319 : {
11454 : 319 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q31 };
11455 : 319 : if (gimple_simplify_355 (res_op, seq, valueize, type, captures, LT_EXPR))
11456 : 2 : return true;
11457 : : }
11458 : : }
11459 : : }
11460 : : break;
11461 : : }
11462 : : default:;
11463 : : }
11464 : : }
11465 : : break;
11466 : : default:;
11467 : : }
11468 : 12377044 : break;
11469 : : }
11470 : : default:;
11471 : : }
11472 : : }
11473 : : break;
11474 : 12377044 : default:;
11475 : : }
11476 : 12377044 : switch (TREE_CODE (_p1))
11477 : : {
11478 : 9009312 : case SSA_NAME:
11479 : 9009312 : if (gimple *_d1 = get_def (valueize, _p1))
11480 : : {
11481 : 3074658 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11482 : 3911777 : switch (gimple_assign_rhs_code (_a1))
11483 : : {
11484 : 216 : case REALPART_EXPR:
11485 : 216 : {
11486 : 216 : tree _q30 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 0);
11487 : 216 : if ((TREE_CODE (_q30) == SSA_NAME
11488 : 216 : || is_gimple_min_invariant (_q30)))
11489 : : {
11490 : 216 : _q30 = do_valueize (valueize, _q30);
11491 : 216 : switch (TREE_CODE (_q30))
11492 : : {
11493 : 216 : case SSA_NAME:
11494 : 216 : if (gimple *_d2 = get_def (valueize, _q30))
11495 : : {
11496 : 216 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
11497 : 216 : switch (gimple_call_combined_fn (_c2))
11498 : : {
11499 : 0 : case CFN_SUB_OVERFLOW:
11500 : 0 : if (gimple_call_num_args (_c2) == 2)
11501 : : {
11502 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
11503 : 0 : _q40 = do_valueize (valueize, _q40);
11504 : 0 : tree _q41 = gimple_call_arg (_c2, 1);
11505 : 0 : _q41 = do_valueize (valueize, _q41);
11506 : 0 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
11507 : : {
11508 : 0 : {
11509 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q41 };
11510 : 0 : if (gimple_simplify_356 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR))
11511 : 0 : return true;
11512 : : }
11513 : : }
11514 : : }
11515 : : break;
11516 : : default:;
11517 : : }
11518 : : }
11519 : : break;
11520 : : default:;
11521 : : }
11522 : : }
11523 : : break;
11524 : : }
11525 : : default:;
11526 : : }
11527 : : }
11528 : : break;
11529 : 12377044 : default:;
11530 : : }
11531 : 12377044 : switch (TREE_CODE (_p0))
11532 : : {
11533 : 11924385 : case SSA_NAME:
11534 : 11924385 : if (gimple *_d1 = get_def (valueize, _p0))
11535 : : {
11536 : 4015891 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11537 : 3969808 : switch (gimple_assign_rhs_code (_a1))
11538 : : {
11539 : 4693 : case REALPART_EXPR:
11540 : 4693 : {
11541 : 4693 : tree _q20 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 0);
11542 : 4693 : if ((TREE_CODE (_q20) == SSA_NAME
11543 : 4693 : || is_gimple_min_invariant (_q20)))
11544 : : {
11545 : 4682 : _q20 = do_valueize (valueize, _q20);
11546 : 4682 : switch (TREE_CODE (_q20))
11547 : : {
11548 : 4682 : case SSA_NAME:
11549 : 4682 : if (gimple *_d2 = get_def (valueize, _q20))
11550 : : {
11551 : 4678 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
11552 : 386 : switch (gimple_call_combined_fn (_c2))
11553 : : {
11554 : 184 : case CFN_ADD_OVERFLOW:
11555 : 184 : if (gimple_call_num_args (_c2) == 2)
11556 : : {
11557 : 184 : tree _q30 = gimple_call_arg (_c2, 0);
11558 : 184 : _q30 = do_valueize (valueize, _q30);
11559 : 184 : tree _q31 = gimple_call_arg (_c2, 1);
11560 : 184 : _q31 = do_valueize (valueize, _q31);
11561 : 184 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
11562 : : {
11563 : 7 : {
11564 : 7 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _q31 };
11565 : 7 : if (gimple_simplify_357 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR))
11566 : 3 : return true;
11567 : : }
11568 : : }
11569 : 181 : if ((_p1 == _q31 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q31, 0) && types_match (_p1, _q31)))
11570 : : {
11571 : 6 : {
11572 : 6 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q31, _q30 };
11573 : 6 : if (gimple_simplify_357 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR))
11574 : 4 : return true;
11575 : : }
11576 : : }
11577 : : }
11578 : : break;
11579 : : default:;
11580 : : }
11581 : : }
11582 : : break;
11583 : : default:;
11584 : : }
11585 : : }
11586 : : break;
11587 : : }
11588 : 7589 : case TRUNC_DIV_EXPR:
11589 : 7589 : {
11590 : 7589 : tree _q20 = gimple_assign_rhs1 (_a1);
11591 : 7589 : _q20 = do_valueize (valueize, _q20);
11592 : 7589 : tree _q21 = gimple_assign_rhs2 (_a1);
11593 : 7589 : _q21 = do_valueize (valueize, _q21);
11594 : 7589 : if (integer_all_onesp (_q20))
11595 : : {
11596 : 855 : {
11597 : 855 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q21, _p1 };
11598 : 855 : if (gimple_simplify_358 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR))
11599 : 24 : return true;
11600 : : }
11601 : : }
11602 : : break;
11603 : : }
11604 : 35719 : case MULT_EXPR:
11605 : 35719 : {
11606 : 35719 : tree _q20 = gimple_assign_rhs1 (_a1);
11607 : 35719 : _q20 = do_valueize (valueize, _q20);
11608 : 35719 : tree _q21 = gimple_assign_rhs2 (_a1);
11609 : 35719 : _q21 = do_valueize (valueize, _q21);
11610 : 35719 : if (tree_swap_operands_p (_q20, _q21))
11611 : 305 : std::swap (_q20, _q21);
11612 : 35719 : switch (TREE_CODE (_q21))
11613 : : {
11614 : 4420 : case REAL_CST:
11615 : 4420 : {
11616 : 4420 : switch (TREE_CODE (_p1))
11617 : : {
11618 : 2940 : case REAL_CST:
11619 : 2940 : {
11620 : 2940 : {
11621 : 2940 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
11622 : 2940 : if (gimple_simplify_359 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
11623 : 3 : return true;
11624 : : }
11625 : 2937 : break;
11626 : : }
11627 : : default:;
11628 : : }
11629 : : break;
11630 : : }
11631 : : default:;
11632 : : }
11633 : 12904253 : break;
11634 : : }
11635 : 430839 : case PLUS_EXPR:
11636 : 430839 : {
11637 : 430839 : tree _q20 = gimple_assign_rhs1 (_a1);
11638 : 430839 : _q20 = do_valueize (valueize, _q20);
11639 : 430839 : tree _q21 = gimple_assign_rhs2 (_a1);
11640 : 430839 : _q21 = do_valueize (valueize, _q21);
11641 : 430839 : if (tree_swap_operands_p (_q20, _q21))
11642 : 10284 : std::swap (_q20, _q21);
11643 : 430839 : switch (TREE_CODE (_q21))
11644 : : {
11645 : 310652 : case INTEGER_CST:
11646 : 310652 : {
11647 : 310652 : switch (TREE_CODE (_p1))
11648 : : {
11649 : 62243 : case INTEGER_CST:
11650 : 62243 : {
11651 : 62243 : {
11652 : 62243 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
11653 : 62243 : if (gimple_simplify_360 (res_op, seq, valueize, type, captures, PLUS_EXPR, MINUS_EXPR, LT_EXPR))
11654 : 5272 : return true;
11655 : : }
11656 : 56971 : break;
11657 : : }
11658 : : default:;
11659 : : }
11660 : : break;
11661 : : }
11662 : : default:;
11663 : : }
11664 : 12904253 : break;
11665 : : }
11666 : 277046 : case MINUS_EXPR:
11667 : 277046 : {
11668 : 277046 : tree _q20 = gimple_assign_rhs1 (_a1);
11669 : 277046 : _q20 = do_valueize (valueize, _q20);
11670 : 277046 : tree _q21 = gimple_assign_rhs2 (_a1);
11671 : 277046 : _q21 = do_valueize (valueize, _q21);
11672 : 277046 : switch (TREE_CODE (_q21))
11673 : : {
11674 : 891 : case INTEGER_CST:
11675 : 891 : {
11676 : 891 : switch (TREE_CODE (_p1))
11677 : : {
11678 : 843 : case INTEGER_CST:
11679 : 843 : {
11680 : 843 : {
11681 : 843 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
11682 : 843 : if (gimple_simplify_360 (res_op, seq, valueize, type, captures, MINUS_EXPR, PLUS_EXPR, LT_EXPR))
11683 : 706 : return true;
11684 : : }
11685 : 137 : break;
11686 : : }
11687 : : default:;
11688 : : }
11689 : : break;
11690 : : }
11691 : : default:;
11692 : : }
11693 : : break;
11694 : : }
11695 : : default:;
11696 : : }
11697 : 1249717 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
11698 : 269657 : switch (gimple_call_combined_fn (_c1))
11699 : : {
11700 : 0 : case CFN_BUILT_IN_CTZ:
11701 : 0 : if (gimple_call_num_args (_c1) == 1)
11702 : : {
11703 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
11704 : 0 : _q20 = do_valueize (valueize, _q20);
11705 : 0 : switch (TREE_CODE (_p1))
11706 : : {
11707 : 0 : case INTEGER_CST:
11708 : 0 : {
11709 : 0 : {
11710 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
11711 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR, CFN_BUILT_IN_CTZ))
11712 : 0 : return true;
11713 : : }
11714 : 0 : break;
11715 : : }
11716 : : default:;
11717 : : }
11718 : : }
11719 : : break;
11720 : 0 : case CFN_BUILT_IN_CTZL:
11721 : 0 : if (gimple_call_num_args (_c1) == 1)
11722 : : {
11723 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
11724 : 0 : _q20 = do_valueize (valueize, _q20);
11725 : 0 : switch (TREE_CODE (_p1))
11726 : : {
11727 : 0 : case INTEGER_CST:
11728 : 0 : {
11729 : 0 : {
11730 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
11731 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR, CFN_BUILT_IN_CTZL))
11732 : 0 : return true;
11733 : : }
11734 : 0 : break;
11735 : : }
11736 : : default:;
11737 : : }
11738 : : }
11739 : : break;
11740 : 0 : case CFN_BUILT_IN_CTZIMAX:
11741 : 0 : if (gimple_call_num_args (_c1) == 1)
11742 : : {
11743 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
11744 : 0 : _q20 = do_valueize (valueize, _q20);
11745 : 0 : switch (TREE_CODE (_p1))
11746 : : {
11747 : 0 : case INTEGER_CST:
11748 : 0 : {
11749 : 0 : {
11750 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
11751 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR, CFN_BUILT_IN_CTZIMAX))
11752 : 0 : return true;
11753 : : }
11754 : 0 : break;
11755 : : }
11756 : : default:;
11757 : : }
11758 : : }
11759 : : break;
11760 : 0 : case CFN_CTZ:
11761 : 0 : if (gimple_call_num_args (_c1) == 1)
11762 : : {
11763 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
11764 : 0 : _q20 = do_valueize (valueize, _q20);
11765 : 0 : switch (TREE_CODE (_p1))
11766 : : {
11767 : 0 : case INTEGER_CST:
11768 : 0 : {
11769 : 0 : {
11770 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
11771 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR, CFN_CTZ))
11772 : 0 : return true;
11773 : : }
11774 : 0 : break;
11775 : : }
11776 : : default:;
11777 : : }
11778 : : }
11779 : 0 : if (gimple_call_num_args (_c1) == 2)
11780 : : {
11781 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
11782 : 0 : _q20 = do_valueize (valueize, _q20);
11783 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
11784 : 0 : _q21 = do_valueize (valueize, _q21);
11785 : 0 : switch (TREE_CODE (_p1))
11786 : : {
11787 : 0 : case INTEGER_CST:
11788 : 0 : {
11789 : 0 : {
11790 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
11791 : 0 : if (gimple_simplify_362 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR))
11792 : 0 : return true;
11793 : : }
11794 : 0 : break;
11795 : : }
11796 : : default:;
11797 : : }
11798 : : }
11799 : : break;
11800 : 0 : case CFN_BUILT_IN_CTZLL:
11801 : 0 : if (gimple_call_num_args (_c1) == 1)
11802 : : {
11803 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
11804 : 0 : _q20 = do_valueize (valueize, _q20);
11805 : 0 : switch (TREE_CODE (_p1))
11806 : : {
11807 : 0 : case INTEGER_CST:
11808 : 0 : {
11809 : 0 : {
11810 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
11811 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR, CFN_BUILT_IN_CTZLL))
11812 : 0 : return true;
11813 : : }
11814 : 0 : break;
11815 : : }
11816 : : default:;
11817 : : }
11818 : : }
11819 : : break;
11820 : : default:;
11821 : : }
11822 : : }
11823 : : break;
11824 : : default:;
11825 : : }
11826 : : return false;
11827 : : }
11828 : :
11829 : : bool
11830 : 26515362 : gimple_simplify_GT_EXPR (gimple_match_op *res_op, gimple_seq *seq,
11831 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
11832 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
11833 : : {
11834 : 26515362 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
11835 : 26515362 : switch (TREE_CODE (_p0))
11836 : : {
11837 : 25811578 : case SSA_NAME:
11838 : 25811578 : if (gimple *_d1 = get_def (valueize, _p0))
11839 : : {
11840 : 9072413 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11841 : 10667176 : switch (gimple_assign_rhs_code (_a1))
11842 : : {
11843 : 3836 : case RDIV_EXPR:
11844 : 3836 : {
11845 : 3836 : tree _q20 = gimple_assign_rhs1 (_a1);
11846 : 3836 : _q20 = do_valueize (valueize, _q20);
11847 : 3836 : tree _q21 = gimple_assign_rhs2 (_a1);
11848 : 3836 : _q21 = do_valueize (valueize, _q21);
11849 : 3836 : switch (TREE_CODE (_q20))
11850 : : {
11851 : 862 : case REAL_CST:
11852 : 862 : {
11853 : 862 : if (real_zerop (_p1))
11854 : : {
11855 : 0 : {
11856 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
11857 : 0 : if (gimple_simplify_336 (res_op, seq, valueize, type, captures, GT_EXPR, LT_EXPR))
11858 : 0 : return true;
11859 : : }
11860 : : }
11861 : : break;
11862 : : }
11863 : : default:;
11864 : : }
11865 : : break;
11866 : : }
11867 : : default:;
11868 : : }
11869 : : }
11870 : : break;
11871 : 26515362 : default:;
11872 : : }
11873 : 26515362 : switch (TREE_CODE (_p1))
11874 : : {
11875 : 9414256 : case SSA_NAME:
11876 : 9414256 : if (gimple *_d1 = get_def (valueize, _p1))
11877 : : {
11878 : 3024773 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11879 : 3252893 : switch (gimple_assign_rhs_code (_a1))
11880 : : {
11881 : 554 : case TRUNC_MOD_EXPR:
11882 : 554 : {
11883 : 554 : tree _q30 = gimple_assign_rhs1 (_a1);
11884 : 554 : _q30 = do_valueize (valueize, _q30);
11885 : 554 : tree _q31 = gimple_assign_rhs2 (_a1);
11886 : 554 : _q31 = do_valueize (valueize, _q31);
11887 : 554 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
11888 : : {
11889 : 168 : {
11890 : 168 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _p0 };
11891 : 168 : if (gimple_simplify_337 (res_op, seq, valueize, type, captures, LT_EXPR))
11892 : 1 : return true;
11893 : : }
11894 : : }
11895 : : break;
11896 : : }
11897 : : default:;
11898 : : }
11899 : : }
11900 : : break;
11901 : 26515361 : default:;
11902 : : }
11903 : 26515361 : switch (TREE_CODE (_p0))
11904 : : {
11905 : 25811577 : case SSA_NAME:
11906 : 25811577 : if (gimple *_d1 = get_def (valueize, _p0))
11907 : : {
11908 : 9072412 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11909 : 10667176 : switch (gimple_assign_rhs_code (_a1))
11910 : : {
11911 : 105975 : case MULT_EXPR:
11912 : 105975 : {
11913 : 105975 : tree _q20 = gimple_assign_rhs1 (_a1);
11914 : 105975 : _q20 = do_valueize (valueize, _q20);
11915 : 105975 : tree _q21 = gimple_assign_rhs2 (_a1);
11916 : 105975 : _q21 = do_valueize (valueize, _q21);
11917 : 105975 : if (tree_swap_operands_p (_q20, _q21))
11918 : 1888 : std::swap (_q20, _q21);
11919 : 105975 : switch (TREE_CODE (_p1))
11920 : : {
11921 : 58323 : case SSA_NAME:
11922 : 58323 : if (gimple *_d2 = get_def (valueize, _p1))
11923 : : {
11924 : 53224 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11925 : 46527 : switch (gimple_assign_rhs_code (_a2))
11926 : : {
11927 : 23900 : case MULT_EXPR:
11928 : 23900 : {
11929 : 23900 : tree _q50 = gimple_assign_rhs1 (_a2);
11930 : 23900 : _q50 = do_valueize (valueize, _q50);
11931 : 23900 : tree _q51 = gimple_assign_rhs2 (_a2);
11932 : 23900 : _q51 = do_valueize (valueize, _q51);
11933 : 23900 : if (tree_swap_operands_p (_q50, _q51))
11934 : 702 : std::swap (_q50, _q51);
11935 : 23900 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
11936 : : {
11937 : 309 : {
11938 : 309 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
11939 : 309 : if (gimple_simplify_338 (res_op, seq, valueize, type, captures, GT_EXPR))
11940 : 60 : return true;
11941 : : }
11942 : : }
11943 : 23840 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
11944 : : {
11945 : 32 : {
11946 : 32 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
11947 : 32 : if (gimple_simplify_338 (res_op, seq, valueize, type, captures, GT_EXPR))
11948 : 0 : return true;
11949 : : }
11950 : : }
11951 : 23840 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
11952 : : {
11953 : 0 : {
11954 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q50 };
11955 : 0 : if (gimple_simplify_338 (res_op, seq, valueize, type, captures, GT_EXPR))
11956 : 0 : return true;
11957 : : }
11958 : : }
11959 : 23840 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
11960 : : {
11961 : 1467 : {
11962 : 1467 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q51 };
11963 : 1467 : if (gimple_simplify_338 (res_op, seq, valueize, type, captures, GT_EXPR))
11964 : 0 : return true;
11965 : : }
11966 : : }
11967 : 26487308 : break;
11968 : : }
11969 : : default:;
11970 : : }
11971 : : }
11972 : : break;
11973 : : default:;
11974 : : }
11975 : 26487308 : break;
11976 : : }
11977 : 877531 : case PLUS_EXPR:
11978 : 877531 : {
11979 : 877531 : tree _q20 = gimple_assign_rhs1 (_a1);
11980 : 877531 : _q20 = do_valueize (valueize, _q20);
11981 : 877531 : tree _q21 = gimple_assign_rhs2 (_a1);
11982 : 877531 : _q21 = do_valueize (valueize, _q21);
11983 : 877531 : if (tree_swap_operands_p (_q20, _q21))
11984 : 18848 : std::swap (_q20, _q21);
11985 : 877531 : if (integer_minus_onep (_q21))
11986 : : {
11987 : 202828 : switch (TREE_CODE (_p1))
11988 : : {
11989 : 157476 : case INTEGER_CST:
11990 : 157476 : {
11991 : 157476 : {
11992 : 157476 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
11993 : 157476 : if (gimple_simplify_363 (res_op, seq, valueize, type, captures, GT_EXPR, LE_EXPR))
11994 : 19 : return true;
11995 : : }
11996 : 157457 : break;
11997 : : }
11998 : : default:;
11999 : : }
12000 : : }
12001 : 877512 : switch (TREE_CODE (_p1))
12002 : : {
12003 : 356554 : case SSA_NAME:
12004 : 356554 : if (gimple *_d2 = get_def (valueize, _p1))
12005 : : {
12006 : 321810 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12007 : 293533 : switch (gimple_assign_rhs_code (_a2))
12008 : : {
12009 : 148313 : case PLUS_EXPR:
12010 : 148313 : {
12011 : 148313 : tree _q50 = gimple_assign_rhs1 (_a2);
12012 : 148313 : _q50 = do_valueize (valueize, _q50);
12013 : 148313 : tree _q51 = gimple_assign_rhs2 (_a2);
12014 : 148313 : _q51 = do_valueize (valueize, _q51);
12015 : 148313 : if (tree_swap_operands_p (_q50, _q51))
12016 : 3304 : std::swap (_q50, _q51);
12017 : 148313 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
12018 : : {
12019 : 8393 : {
12020 : 8393 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
12021 : 8393 : if (gimple_simplify_339 (res_op, seq, valueize, type, captures, GT_EXPR))
12022 : 6076 : return true;
12023 : : }
12024 : : }
12025 : 142237 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
12026 : : {
12027 : 8288 : {
12028 : 8288 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
12029 : 8288 : if (gimple_simplify_339 (res_op, seq, valueize, type, captures, GT_EXPR))
12030 : 5177 : return true;
12031 : : }
12032 : : }
12033 : 137060 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
12034 : : {
12035 : 111 : {
12036 : 111 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q50 };
12037 : 111 : if (gimple_simplify_339 (res_op, seq, valueize, type, captures, GT_EXPR))
12038 : 4 : return true;
12039 : : }
12040 : : }
12041 : 137056 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12042 : : {
12043 : 2958 : {
12044 : 2958 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q51 };
12045 : 2958 : if (gimple_simplify_339 (res_op, seq, valueize, type, captures, GT_EXPR))
12046 : 411 : return true;
12047 : : }
12048 : : }
12049 : 865844 : break;
12050 : : }
12051 : : default:;
12052 : : }
12053 : : }
12054 : : break;
12055 : 865844 : default:;
12056 : : }
12057 : 865844 : switch (TREE_CODE (_q21))
12058 : : {
12059 : 669699 : case INTEGER_CST:
12060 : 669699 : {
12061 : 669699 : switch (TREE_CODE (_p1))
12062 : : {
12063 : 206459 : case SSA_NAME:
12064 : 206459 : if (gimple *_d2 = get_def (valueize, _p1))
12065 : : {
12066 : 175471 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12067 : 140899 : switch (gimple_assign_rhs_code (_a2))
12068 : : {
12069 : 44267 : case PLUS_EXPR:
12070 : 44267 : {
12071 : 44267 : tree _q50 = gimple_assign_rhs1 (_a2);
12072 : 44267 : _q50 = do_valueize (valueize, _q50);
12073 : 44267 : tree _q51 = gimple_assign_rhs2 (_a2);
12074 : 44267 : _q51 = do_valueize (valueize, _q51);
12075 : 44267 : if (tree_swap_operands_p (_q50, _q51))
12076 : 90 : std::swap (_q50, _q51);
12077 : 44267 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
12078 : : {
12079 : 2191 : {
12080 : 2191 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
12081 : 2191 : if (gimple_simplify_340 (res_op, seq, valueize, type, captures, GT_EXPR))
12082 : 0 : return true;
12083 : : }
12084 : : }
12085 : 865844 : break;
12086 : : }
12087 : : default:;
12088 : : }
12089 : : }
12090 : : break;
12091 : : default:;
12092 : : }
12093 : : break;
12094 : : }
12095 : 865844 : default:;
12096 : : }
12097 : 865844 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
12098 : : {
12099 : 22689 : {
12100 : 22689 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
12101 : 22689 : if (gimple_simplify_341 (res_op, seq, valueize, type, captures, GT_EXPR))
12102 : 1746 : return true;
12103 : : }
12104 : : }
12105 : 864098 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12106 : : {
12107 : 2067 : {
12108 : 2067 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q21, _q20 };
12109 : 2067 : if (gimple_simplify_341 (res_op, seq, valueize, type, captures, GT_EXPR))
12110 : 366 : return true;
12111 : : }
12112 : : }
12113 : 26487308 : break;
12114 : : }
12115 : 1089244 : CASE_CONVERT:
12116 : 1089244 : {
12117 : 1089244 : tree _q20 = gimple_assign_rhs1 (_a1);
12118 : 1089244 : _q20 = do_valueize (valueize, _q20);
12119 : 1089244 : switch (TREE_CODE (_q20))
12120 : : {
12121 : 1088374 : case SSA_NAME:
12122 : 1088374 : if (gimple *_d2 = get_def (valueize, _q20))
12123 : : {
12124 : 1027692 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12125 : 1069314 : switch (gimple_assign_rhs_code (_a2))
12126 : : {
12127 : 66383 : case EXACT_DIV_EXPR:
12128 : 66383 : {
12129 : 66383 : tree _q30 = gimple_assign_rhs1 (_a2);
12130 : 66383 : _q30 = do_valueize (valueize, _q30);
12131 : 66383 : tree _q31 = gimple_assign_rhs2 (_a2);
12132 : 66383 : _q31 = do_valueize (valueize, _q31);
12133 : 66383 : switch (TREE_CODE (_q31))
12134 : : {
12135 : 66383 : case INTEGER_CST:
12136 : 66383 : {
12137 : 66383 : switch (TREE_CODE (_p1))
12138 : : {
12139 : 31289 : case SSA_NAME:
12140 : 31289 : if (gimple *_d3 = get_def (valueize, _p1))
12141 : : {
12142 : 31235 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
12143 : 34189 : switch (gimple_assign_rhs_code (_a3))
12144 : : {
12145 : 932 : CASE_CONVERT:
12146 : 932 : {
12147 : 932 : tree _q60 = gimple_assign_rhs1 (_a3);
12148 : 932 : _q60 = do_valueize (valueize, _q60);
12149 : 932 : switch (TREE_CODE (_q60))
12150 : : {
12151 : 932 : case SSA_NAME:
12152 : 932 : if (gimple *_d4 = get_def (valueize, _q60))
12153 : : {
12154 : 925 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
12155 : 886 : switch (gimple_assign_rhs_code (_a4))
12156 : : {
12157 : 697 : case EXACT_DIV_EXPR:
12158 : 697 : {
12159 : 697 : tree _q70 = gimple_assign_rhs1 (_a4);
12160 : 697 : _q70 = do_valueize (valueize, _q70);
12161 : 697 : tree _q71 = gimple_assign_rhs2 (_a4);
12162 : 697 : _q71 = do_valueize (valueize, _q71);
12163 : 697 : if ((_q71 == _q31 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q31, 0) && types_match (_q71, _q31)))
12164 : : {
12165 : 697 : {
12166 : 697 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _q70 };
12167 : 697 : if (gimple_simplify_209 (res_op, seq, valueize, type, captures, GT_EXPR))
12168 : 182 : return true;
12169 : : }
12170 : : }
12171 : : break;
12172 : : }
12173 : : default:;
12174 : : }
12175 : : }
12176 : : break;
12177 : : default:;
12178 : : }
12179 : : break;
12180 : : }
12181 : : default:;
12182 : : }
12183 : : }
12184 : : break;
12185 : : default:;
12186 : : }
12187 : : break;
12188 : : }
12189 : : default:;
12190 : : }
12191 : : break;
12192 : : }
12193 : : default:;
12194 : : }
12195 : : }
12196 : : break;
12197 : : default:;
12198 : : }
12199 : : break;
12200 : : }
12201 : 22312 : case EXACT_DIV_EXPR:
12202 : 22312 : {
12203 : 22312 : tree _q20 = gimple_assign_rhs1 (_a1);
12204 : 22312 : _q20 = do_valueize (valueize, _q20);
12205 : 22312 : tree _q21 = gimple_assign_rhs2 (_a1);
12206 : 22312 : _q21 = do_valueize (valueize, _q21);
12207 : 22312 : switch (TREE_CODE (_q21))
12208 : : {
12209 : 22312 : case INTEGER_CST:
12210 : 22312 : {
12211 : 22312 : switch (TREE_CODE (_p1))
12212 : : {
12213 : 3710 : case SSA_NAME:
12214 : 3710 : if (gimple *_d2 = get_def (valueize, _p1))
12215 : : {
12216 : 3583 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12217 : 3176 : switch (gimple_assign_rhs_code (_a2))
12218 : : {
12219 : 706 : case EXACT_DIV_EXPR:
12220 : 706 : {
12221 : 706 : tree _q50 = gimple_assign_rhs1 (_a2);
12222 : 706 : _q50 = do_valueize (valueize, _q50);
12223 : 706 : tree _q51 = gimple_assign_rhs2 (_a2);
12224 : 706 : _q51 = do_valueize (valueize, _q51);
12225 : 706 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
12226 : : {
12227 : 688 : {
12228 : 688 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q50 };
12229 : 688 : if (gimple_simplify_209 (res_op, seq, valueize, type, captures, GT_EXPR))
12230 : 688 : return true;
12231 : : }
12232 : : }
12233 : : break;
12234 : : }
12235 : : default:;
12236 : : }
12237 : : }
12238 : : break;
12239 : : default:;
12240 : : }
12241 : : break;
12242 : : }
12243 : : default:;
12244 : : }
12245 : : break;
12246 : : }
12247 : 48825 : case TRUNC_DIV_EXPR:
12248 : 48825 : {
12249 : 48825 : tree _q20 = gimple_assign_rhs1 (_a1);
12250 : 48825 : _q20 = do_valueize (valueize, _q20);
12251 : 48825 : tree _q21 = gimple_assign_rhs2 (_a1);
12252 : 48825 : _q21 = do_valueize (valueize, _q21);
12253 : 48825 : switch (TREE_CODE (_q21))
12254 : : {
12255 : 34007 : case INTEGER_CST:
12256 : 34007 : {
12257 : 34007 : switch (TREE_CODE (_p1))
12258 : : {
12259 : 12058 : case INTEGER_CST:
12260 : 12058 : {
12261 : 12058 : {
12262 : 12058 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
12263 : 12058 : if (gimple_simplify_212 (res_op, seq, valueize, type, captures, GT_EXPR))
12264 : 12012 : return true;
12265 : : }
12266 : 46 : break;
12267 : : }
12268 : : default:;
12269 : : }
12270 : : break;
12271 : : }
12272 : : default:;
12273 : : }
12274 : : break;
12275 : : }
12276 : 179973 : case MINUS_EXPR:
12277 : 179973 : {
12278 : 179973 : tree _q20 = gimple_assign_rhs1 (_a1);
12279 : 179973 : _q20 = do_valueize (valueize, _q20);
12280 : 179973 : tree _q21 = gimple_assign_rhs2 (_a1);
12281 : 179973 : _q21 = do_valueize (valueize, _q21);
12282 : 179973 : switch (TREE_CODE (_p1))
12283 : : {
12284 : 67044 : case SSA_NAME:
12285 : 67044 : if (gimple *_d2 = get_def (valueize, _p1))
12286 : : {
12287 : 61645 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12288 : 47035 : switch (gimple_assign_rhs_code (_a2))
12289 : : {
12290 : 10962 : case MINUS_EXPR:
12291 : 10962 : {
12292 : 10962 : tree _q50 = gimple_assign_rhs1 (_a2);
12293 : 10962 : _q50 = do_valueize (valueize, _q50);
12294 : 10962 : tree _q51 = gimple_assign_rhs2 (_a2);
12295 : 10962 : _q51 = do_valueize (valueize, _q51);
12296 : 10962 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
12297 : : {
12298 : 1060 : {
12299 : 1060 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
12300 : 1060 : if (gimple_simplify_342 (res_op, seq, valueize, type, captures, GT_EXPR))
12301 : 384 : return true;
12302 : : }
12303 : : }
12304 : 10578 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12305 : : {
12306 : 1897 : {
12307 : 1897 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
12308 : 1897 : if (gimple_simplify_343 (res_op, seq, valueize, type, captures, GT_EXPR))
12309 : 788 : return true;
12310 : : }
12311 : : }
12312 : : break;
12313 : : }
12314 : : default:;
12315 : : }
12316 : : }
12317 : : break;
12318 : : default:;
12319 : : }
12320 : : break;
12321 : : }
12322 : 134405 : case POINTER_DIFF_EXPR:
12323 : 134405 : {
12324 : 134405 : tree _q20 = gimple_assign_rhs1 (_a1);
12325 : 134405 : _q20 = do_valueize (valueize, _q20);
12326 : 134405 : tree _q21 = gimple_assign_rhs2 (_a1);
12327 : 134405 : _q21 = do_valueize (valueize, _q21);
12328 : 134405 : switch (TREE_CODE (_p1))
12329 : : {
12330 : 7000 : case SSA_NAME:
12331 : 7000 : if (gimple *_d2 = get_def (valueize, _p1))
12332 : : {
12333 : 6758 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12334 : 6193 : switch (gimple_assign_rhs_code (_a2))
12335 : : {
12336 : 2043 : case POINTER_DIFF_EXPR:
12337 : 2043 : {
12338 : 2043 : tree _q50 = gimple_assign_rhs1 (_a2);
12339 : 2043 : _q50 = do_valueize (valueize, _q50);
12340 : 2043 : tree _q51 = gimple_assign_rhs2 (_a2);
12341 : 2043 : _q51 = do_valueize (valueize, _q51);
12342 : 2043 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
12343 : : {
12344 : 122 : {
12345 : 122 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q50 };
12346 : 122 : if (gimple_simplify_216 (res_op, seq, valueize, type, captures, GT_EXPR))
12347 : 122 : return true;
12348 : : }
12349 : : }
12350 : 1921 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12351 : : {
12352 : 18 : {
12353 : 18 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q51 };
12354 : 18 : if (gimple_simplify_217 (res_op, seq, valueize, type, captures, GT_EXPR))
12355 : 18 : return true;
12356 : : }
12357 : : }
12358 : : break;
12359 : : }
12360 : : default:;
12361 : : }
12362 : : }
12363 : : break;
12364 : : default:;
12365 : : }
12366 : : break;
12367 : : }
12368 : : default:;
12369 : : }
12370 : : }
12371 : : break;
12372 : 26487308 : default:;
12373 : : }
12374 : 26487308 : switch (TREE_CODE (_p1))
12375 : : {
12376 : 9399956 : case SSA_NAME:
12377 : 9399956 : if (gimple *_d1 = get_def (valueize, _p1))
12378 : : {
12379 : 3010473 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12380 : 3238762 : switch (gimple_assign_rhs_code (_a1))
12381 : : {
12382 : 655517 : case PLUS_EXPR:
12383 : 655517 : {
12384 : 655517 : tree _q30 = gimple_assign_rhs1 (_a1);
12385 : 655517 : _q30 = do_valueize (valueize, _q30);
12386 : 655517 : tree _q31 = gimple_assign_rhs2 (_a1);
12387 : 655517 : _q31 = do_valueize (valueize, _q31);
12388 : 655517 : if (tree_swap_operands_p (_q30, _q31))
12389 : 18733 : std::swap (_q30, _q31);
12390 : 655517 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
12391 : : {
12392 : 40428 : {
12393 : 40428 : tree captures[3] ATTRIBUTE_UNUSED = { _p1, _q30, _p0 };
12394 : 40428 : if (gimple_simplify_341 (res_op, seq, valueize, type, captures, LT_EXPR))
12395 : 16 : return true;
12396 : : }
12397 : : }
12398 : 655501 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
12399 : : {
12400 : 59488 : {
12401 : 59488 : tree captures[3] ATTRIBUTE_UNUSED = { _p1, _q31, _p0 };
12402 : 59488 : if (gimple_simplify_341 (res_op, seq, valueize, type, captures, LT_EXPR))
12403 : 304 : return true;
12404 : : }
12405 : : }
12406 : 26486988 : break;
12407 : : }
12408 : 100318 : case MINUS_EXPR:
12409 : 100318 : {
12410 : 100318 : tree _q30 = gimple_assign_rhs1 (_a1);
12411 : 100318 : _q30 = do_valueize (valueize, _q30);
12412 : 100318 : tree _q31 = gimple_assign_rhs2 (_a1);
12413 : 100318 : _q31 = do_valueize (valueize, _q31);
12414 : 100318 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
12415 : : {
12416 : 10095 : {
12417 : 10095 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q31 };
12418 : 10095 : if (gimple_simplify_215 (res_op, seq, valueize, type, captures, GT_EXPR))
12419 : 0 : return true;
12420 : : }
12421 : : }
12422 : : break;
12423 : : }
12424 : : default:;
12425 : : }
12426 : : }
12427 : : break;
12428 : 26486988 : default:;
12429 : : }
12430 : 26486988 : switch (TREE_CODE (_p0))
12431 : : {
12432 : 25783204 : case SSA_NAME:
12433 : 25783204 : if (gimple *_d1 = get_def (valueize, _p0))
12434 : : {
12435 : 9044039 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12436 : 10638628 : switch (gimple_assign_rhs_code (_a1))
12437 : : {
12438 : 178801 : case MINUS_EXPR:
12439 : 178801 : {
12440 : 178801 : tree _q20 = gimple_assign_rhs1 (_a1);
12441 : 178801 : _q20 = do_valueize (valueize, _q20);
12442 : 178801 : tree _q21 = gimple_assign_rhs2 (_a1);
12443 : 178801 : _q21 = do_valueize (valueize, _q21);
12444 : 178801 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12445 : : {
12446 : 3045 : {
12447 : 3045 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p0, _q21 };
12448 : 3045 : if (gimple_simplify_215 (res_op, seq, valueize, type, captures, LT_EXPR))
12449 : 9 : return true;
12450 : : }
12451 : : }
12452 : : break;
12453 : : }
12454 : 39101 : case BIT_AND_EXPR:
12455 : 39101 : {
12456 : 39101 : tree _q20 = gimple_assign_rhs1 (_a1);
12457 : 39101 : _q20 = do_valueize (valueize, _q20);
12458 : 39101 : tree _q21 = gimple_assign_rhs2 (_a1);
12459 : 39101 : _q21 = do_valueize (valueize, _q21);
12460 : 39101 : if (tree_swap_operands_p (_q20, _q21))
12461 : 151 : std::swap (_q20, _q21);
12462 : 39101 : if (tree_expr_nonnegative_p (_q20))
12463 : : {
12464 : 26525 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12465 : : {
12466 : 0 : {
12467 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
12468 : 0 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, GT_EXPR, BIT_AND_EXPR))
12469 : 0 : return true;
12470 : : }
12471 : : }
12472 : : }
12473 : 39101 : if (tree_expr_nonnegative_p (_q21))
12474 : : {
12475 : 30281 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
12476 : : {
12477 : 218 : {
12478 : 218 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
12479 : 218 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, GT_EXPR, BIT_AND_EXPR))
12480 : 218 : return true;
12481 : : }
12482 : : }
12483 : : }
12484 : 26486761 : break;
12485 : : }
12486 : : default:;
12487 : : }
12488 : : }
12489 : : break;
12490 : 26486761 : default:;
12491 : : }
12492 : 26486761 : switch (TREE_CODE (_p1))
12493 : : {
12494 : 9399635 : case SSA_NAME:
12495 : 9399635 : if (gimple *_d1 = get_def (valueize, _p1))
12496 : : {
12497 : 3010152 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12498 : 3238441 : switch (gimple_assign_rhs_code (_a1))
12499 : : {
12500 : 825 : case BIT_IOR_EXPR:
12501 : 825 : {
12502 : 825 : tree _q30 = gimple_assign_rhs1 (_a1);
12503 : 825 : _q30 = do_valueize (valueize, _q30);
12504 : 825 : tree _q31 = gimple_assign_rhs2 (_a1);
12505 : 825 : _q31 = do_valueize (valueize, _q31);
12506 : 825 : if (tree_swap_operands_p (_q30, _q31))
12507 : 6 : std::swap (_q30, _q31);
12508 : 825 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
12509 : : {
12510 : 18 : if (tree_expr_nonnegative_p (_q30))
12511 : : {
12512 : 3 : {
12513 : 3 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
12514 : 3 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, LT_EXPR, BIT_IOR_EXPR))
12515 : 3 : return true;
12516 : : }
12517 : : }
12518 : : }
12519 : 822 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
12520 : : {
12521 : 0 : if (tree_expr_nonnegative_p (_q31))
12522 : : {
12523 : 0 : {
12524 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
12525 : 0 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, LT_EXPR, BIT_IOR_EXPR))
12526 : 0 : return true;
12527 : : }
12528 : : }
12529 : : }
12530 : 26486758 : break;
12531 : : }
12532 : : default:;
12533 : : }
12534 : : }
12535 : : break;
12536 : 26486758 : default:;
12537 : : }
12538 : 26486758 : switch (TREE_CODE (_p0))
12539 : : {
12540 : 25782974 : case SSA_NAME:
12541 : 25782974 : if (gimple *_d1 = get_def (valueize, _p0))
12542 : : {
12543 : 9043809 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12544 : 10638399 : switch (gimple_assign_rhs_code (_a1))
12545 : : {
12546 : 46236 : case MAX_EXPR:
12547 : 46236 : {
12548 : 46236 : tree _q20 = gimple_assign_rhs1 (_a1);
12549 : 46236 : _q20 = do_valueize (valueize, _q20);
12550 : 46236 : tree _q21 = gimple_assign_rhs2 (_a1);
12551 : 46236 : _q21 = do_valueize (valueize, _q21);
12552 : 46236 : if (tree_swap_operands_p (_q20, _q21))
12553 : 39 : std::swap (_q20, _q21);
12554 : 46236 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12555 : : {
12556 : 0 : {
12557 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
12558 : 0 : if (gimple_simplify_225 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR, LT_EXPR))
12559 : 0 : return true;
12560 : : }
12561 : : }
12562 : 46236 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
12563 : : {
12564 : 8039 : {
12565 : 8039 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
12566 : 8039 : if (gimple_simplify_225 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR, LT_EXPR))
12567 : 8027 : return true;
12568 : : }
12569 : : }
12570 : 38209 : switch (TREE_CODE (_q21))
12571 : : {
12572 : 36871 : case INTEGER_CST:
12573 : 36871 : {
12574 : 36871 : switch (TREE_CODE (_p1))
12575 : : {
12576 : 5689 : case INTEGER_CST:
12577 : 5689 : {
12578 : 5689 : {
12579 : 5689 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
12580 : 5689 : if (gimple_simplify_345 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR, BIT_IOR_EXPR))
12581 : 558 : return true;
12582 : : }
12583 : 5131 : break;
12584 : : }
12585 : : default:;
12586 : : }
12587 : : break;
12588 : : }
12589 : : default:;
12590 : : }
12591 : 26478173 : break;
12592 : : }
12593 : : default:;
12594 : : }
12595 : : }
12596 : : break;
12597 : 26478173 : default:;
12598 : : }
12599 : 26478173 : switch (TREE_CODE (_p1))
12600 : : {
12601 : 9399600 : case SSA_NAME:
12602 : 9399600 : if (gimple *_d1 = get_def (valueize, _p1))
12603 : : {
12604 : 3010117 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12605 : 3238406 : switch (gimple_assign_rhs_code (_a1))
12606 : : {
12607 : 11211 : case MIN_EXPR:
12608 : 11211 : {
12609 : 11211 : tree _q30 = gimple_assign_rhs1 (_a1);
12610 : 11211 : _q30 = do_valueize (valueize, _q30);
12611 : 11211 : tree _q31 = gimple_assign_rhs2 (_a1);
12612 : 11211 : _q31 = do_valueize (valueize, _q31);
12613 : 11211 : if (tree_swap_operands_p (_q30, _q31))
12614 : 879 : std::swap (_q30, _q31);
12615 : 11211 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
12616 : : {
12617 : 861 : {
12618 : 861 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
12619 : 861 : if (gimple_simplify_225 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR, GT_EXPR))
12620 : 861 : return true;
12621 : : }
12622 : : }
12623 : 10350 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
12624 : : {
12625 : 49 : {
12626 : 49 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
12627 : 49 : if (gimple_simplify_225 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR, GT_EXPR))
12628 : 49 : return true;
12629 : : }
12630 : : }
12631 : 26477130 : break;
12632 : : }
12633 : 6198 : case MAX_EXPR:
12634 : 6198 : {
12635 : 6198 : tree _q30 = gimple_assign_rhs1 (_a1);
12636 : 6198 : _q30 = do_valueize (valueize, _q30);
12637 : 6198 : tree _q31 = gimple_assign_rhs2 (_a1);
12638 : 6198 : _q31 = do_valueize (valueize, _q31);
12639 : 6198 : if (tree_swap_operands_p (_q30, _q31))
12640 : 5 : std::swap (_q30, _q31);
12641 : 6198 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
12642 : : {
12643 : 126 : {
12644 : 126 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
12645 : 126 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR))
12646 : 126 : return true;
12647 : : }
12648 : : }
12649 : 6072 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
12650 : : {
12651 : 7 : {
12652 : 7 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
12653 : 7 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, MAX_EXPR, GT_EXPR))
12654 : 7 : return true;
12655 : : }
12656 : : }
12657 : 26477130 : break;
12658 : : }
12659 : : default:;
12660 : : }
12661 : : }
12662 : : break;
12663 : 26477130 : default:;
12664 : : }
12665 : 26477130 : switch (TREE_CODE (_p0))
12666 : : {
12667 : 25773346 : case SSA_NAME:
12668 : 25773346 : if (gimple *_d1 = get_def (valueize, _p0))
12669 : : {
12670 : 9034181 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12671 : 10629040 : switch (gimple_assign_rhs_code (_a1))
12672 : : {
12673 : 51886 : case MIN_EXPR:
12674 : 51886 : {
12675 : 51886 : tree _q20 = gimple_assign_rhs1 (_a1);
12676 : 51886 : _q20 = do_valueize (valueize, _q20);
12677 : 51886 : tree _q21 = gimple_assign_rhs2 (_a1);
12678 : 51886 : _q21 = do_valueize (valueize, _q21);
12679 : 51886 : if (tree_swap_operands_p (_q20, _q21))
12680 : 3139 : std::swap (_q20, _q21);
12681 : 51886 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12682 : : {
12683 : 0 : {
12684 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
12685 : 0 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR))
12686 : 0 : return true;
12687 : : }
12688 : : }
12689 : 51886 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
12690 : : {
12691 : 59 : {
12692 : 59 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
12693 : 59 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, MIN_EXPR, LT_EXPR))
12694 : 59 : return true;
12695 : : }
12696 : : }
12697 : 51827 : switch (TREE_CODE (_q21))
12698 : : {
12699 : 26343 : case INTEGER_CST:
12700 : 26343 : {
12701 : 26343 : switch (TREE_CODE (_p1))
12702 : : {
12703 : 11755 : case INTEGER_CST:
12704 : 11755 : {
12705 : 11755 : {
12706 : 11755 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
12707 : 11755 : if (gimple_simplify_345 (res_op, seq, valueize, type, captures, MIN_EXPR, GT_EXPR, BIT_AND_EXPR))
12708 : 423 : return true;
12709 : : }
12710 : 11332 : break;
12711 : : }
12712 : : default:;
12713 : : }
12714 : : break;
12715 : : }
12716 : : default:;
12717 : : }
12718 : 26476618 : break;
12719 : : }
12720 : 68 : case VEC_COND_EXPR:
12721 : 68 : {
12722 : 68 : tree _q20 = gimple_assign_rhs1 (_a1);
12723 : 68 : _q20 = do_valueize (valueize, _q20);
12724 : 68 : tree _q21 = gimple_assign_rhs2 (_a1);
12725 : 68 : _q21 = do_valueize (valueize, _q21);
12726 : 68 : tree _q22 = gimple_assign_rhs3 (_a1);
12727 : 68 : _q22 = do_valueize (valueize, _q22);
12728 : 68 : switch (TREE_CODE (_p1))
12729 : : {
12730 : 24 : case SSA_NAME:
12731 : 24 : if (gimple *_d2 = get_def (valueize, _p1))
12732 : : {
12733 : 24 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12734 : 24 : switch (gimple_assign_rhs_code (_a2))
12735 : : {
12736 : 24 : case VEC_COND_EXPR:
12737 : 24 : {
12738 : 24 : tree _q60 = gimple_assign_rhs1 (_a2);
12739 : 24 : _q60 = do_valueize (valueize, _q60);
12740 : 24 : tree _q61 = gimple_assign_rhs2 (_a2);
12741 : 24 : _q61 = do_valueize (valueize, _q61);
12742 : 24 : tree _q62 = gimple_assign_rhs3 (_a2);
12743 : 24 : _q62 = do_valueize (valueize, _q62);
12744 : 24 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
12745 : : {
12746 : 0 : {
12747 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
12748 : 0 : if (TREE_CODE_CLASS (GT_EXPR) != tcc_comparison
12749 : 0 : || types_match (type, TREE_TYPE (captures[2]))
12750 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
12751 : : || (optimize_vectors_before_lowering_p ()
12752 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
12753 : 0 : TREE_TYPE (captures[1]), ERROR_MARK))
12754 : : )
12755 : : {
12756 : 0 : gimple_seq *lseq = seq;
12757 : 0 : if (lseq
12758 : 0 : && (!single_use (captures[0])
12759 : 0 : || !single_use (captures[4])))
12760 : 0 : lseq = NULL;
12761 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1950;
12762 : 0 : {
12763 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
12764 : 0 : res_op->ops[0] = captures[1];
12765 : 0 : {
12766 : 0 : tree _o1[2], _r1;
12767 : 0 : _o1[0] = captures[2];
12768 : 0 : _o1[1] = captures[5];
12769 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), GT_EXPR, type, _o1[0], _o1[1]);
12770 : 0 : tem_op.resimplify (NULL, valueize);
12771 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
12772 : 0 : if (!_r1) goto next_after_fail1950;
12773 : 0 : res_op->ops[1] = _r1;
12774 : : }
12775 : 0 : {
12776 : 0 : tree _o1[2], _r1;
12777 : 0 : _o1[0] = captures[3];
12778 : 0 : _o1[1] = captures[6];
12779 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), GT_EXPR, type, _o1[0], _o1[1]);
12780 : 0 : tem_op.resimplify (NULL, valueize);
12781 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
12782 : 0 : if (!_r1) goto next_after_fail1950;
12783 : 0 : res_op->ops[2] = _r1;
12784 : : }
12785 : 0 : res_op->resimplify (lseq, valueize);
12786 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 925, __FILE__, __LINE__, true);
12787 : 0 : return true;
12788 : : }
12789 : 0 : next_after_fail1950:;
12790 : : }
12791 : : }
12792 : : }
12793 : : break;
12794 : : }
12795 : : default:;
12796 : : }
12797 : : }
12798 : : break;
12799 : 68 : default:;
12800 : : }
12801 : 68 : {
12802 : 68 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
12803 : 68 : if (TREE_CODE_CLASS (GT_EXPR) != tcc_comparison
12804 : 68 : || types_match (type, TREE_TYPE (captures[2]))
12805 : 68 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
12806 : : || (optimize_vectors_before_lowering_p ()
12807 : 26 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
12808 : 26 : TREE_TYPE (captures[1]), ERROR_MARK))
12809 : : )
12810 : : {
12811 : 68 : gimple_seq *lseq = seq;
12812 : 68 : if (lseq
12813 : 29 : && (!single_use (captures[0])))
12814 : 56 : lseq = NULL;
12815 : 68 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1951;
12816 : 68 : {
12817 : 68 : res_op->set_op (VEC_COND_EXPR, type, 3);
12818 : 68 : res_op->ops[0] = captures[1];
12819 : 68 : {
12820 : 68 : tree _o1[2], _r1;
12821 : 68 : _o1[0] = captures[2];
12822 : 68 : _o1[1] = captures[4];
12823 : 68 : gimple_match_op tem_op (res_op->cond.any_else (), GT_EXPR, type, _o1[0], _o1[1]);
12824 : 68 : tem_op.resimplify (NULL, valueize);
12825 : 68 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
12826 : 68 : if (!_r1) goto next_after_fail1951;
12827 : 38 : res_op->ops[1] = _r1;
12828 : : }
12829 : 38 : {
12830 : 38 : tree _o1[2], _r1;
12831 : 38 : _o1[0] = captures[3];
12832 : 38 : _o1[1] = captures[4];
12833 : 38 : gimple_match_op tem_op (res_op->cond.any_else (), GT_EXPR, type, _o1[0], _o1[1]);
12834 : 38 : tem_op.resimplify (NULL, valueize);
12835 : 38 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
12836 : 38 : if (!_r1) goto next_after_fail1951;
12837 : 30 : res_op->ops[2] = _r1;
12838 : : }
12839 : 30 : res_op->resimplify (lseq, valueize);
12840 : 30 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 926, __FILE__, __LINE__, true);
12841 : 30 : return true;
12842 : : }
12843 : 38 : next_after_fail1951:;
12844 : : }
12845 : : }
12846 : 38 : break;
12847 : : }
12848 : : default:;
12849 : : }
12850 : : }
12851 : : break;
12852 : 26476618 : default:;
12853 : : }
12854 : 26476618 : switch (TREE_CODE (_p1))
12855 : : {
12856 : 9398533 : case SSA_NAME:
12857 : 9398533 : if (gimple *_d1 = get_def (valueize, _p1))
12858 : : {
12859 : 3009050 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12860 : 3237339 : switch (gimple_assign_rhs_code (_a1))
12861 : : {
12862 : 36 : case VEC_COND_EXPR:
12863 : 36 : {
12864 : 36 : tree _q30 = gimple_assign_rhs1 (_a1);
12865 : 36 : _q30 = do_valueize (valueize, _q30);
12866 : 36 : tree _q31 = gimple_assign_rhs2 (_a1);
12867 : 36 : _q31 = do_valueize (valueize, _q31);
12868 : 36 : tree _q32 = gimple_assign_rhs3 (_a1);
12869 : 36 : _q32 = do_valueize (valueize, _q32);
12870 : 36 : {
12871 : 36 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
12872 : 36 : if (TREE_CODE_CLASS (GT_EXPR) != tcc_comparison
12873 : 36 : || types_match (type, TREE_TYPE (captures[3]))
12874 : 36 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]), ERROR_MARK)
12875 : : || (optimize_vectors_before_lowering_p ()
12876 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]),
12877 : 0 : TREE_TYPE (captures[2]), ERROR_MARK))
12878 : : )
12879 : : {
12880 : 36 : gimple_seq *lseq = seq;
12881 : 36 : if (lseq
12882 : 12 : && (!single_use (captures[1])))
12883 : 36 : lseq = NULL;
12884 : 36 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1952;
12885 : 36 : {
12886 : 36 : res_op->set_op (VEC_COND_EXPR, type, 3);
12887 : 36 : res_op->ops[0] = captures[2];
12888 : 36 : {
12889 : 36 : tree _o1[2], _r1;
12890 : 36 : _o1[0] = captures[0];
12891 : 36 : _o1[1] = captures[3];
12892 : 36 : gimple_match_op tem_op (res_op->cond.any_else (), GT_EXPR, type, _o1[0], _o1[1]);
12893 : 36 : tem_op.resimplify (NULL, valueize);
12894 : 36 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
12895 : 36 : if (!_r1) goto next_after_fail1952;
12896 : 0 : res_op->ops[1] = _r1;
12897 : : }
12898 : 0 : {
12899 : 0 : tree _o1[2], _r1;
12900 : 0 : _o1[0] = captures[0];
12901 : 0 : _o1[1] = captures[4];
12902 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), GT_EXPR, type, _o1[0], _o1[1]);
12903 : 0 : tem_op.resimplify (NULL, valueize);
12904 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
12905 : 0 : if (!_r1) goto next_after_fail1952;
12906 : 0 : res_op->ops[2] = _r1;
12907 : : }
12908 : 0 : res_op->resimplify (lseq, valueize);
12909 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 927, __FILE__, __LINE__, true);
12910 : 0 : return true;
12911 : : }
12912 : 36 : next_after_fail1952:;
12913 : : }
12914 : : }
12915 : 36 : break;
12916 : : }
12917 : : default:;
12918 : : }
12919 : : }
12920 : : break;
12921 : 26476618 : default:;
12922 : : }
12923 : 26476618 : if (uniform_integer_cst_p (_p1))
12924 : : {
12925 : 16356364 : {
12926 : 16356364 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
12927 : 16356364 : if (gimple_simplify_364 (res_op, seq, valueize, type, captures, GT_EXPR, GE_EXPR))
12928 : 16975 : return true;
12929 : : }
12930 : : }
12931 : 26459643 : switch (TREE_CODE (_p0))
12932 : : {
12933 : 25755881 : case SSA_NAME:
12934 : 25755881 : if (gimple *_d1 = get_def (valueize, _p0))
12935 : : {
12936 : 9021128 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12937 : 10612057 : switch (gimple_assign_rhs_code (_a1))
12938 : : {
12939 : 105827 : case MULT_EXPR:
12940 : 105827 : {
12941 : 105827 : tree _q20 = gimple_assign_rhs1 (_a1);
12942 : 105827 : _q20 = do_valueize (valueize, _q20);
12943 : 105827 : tree _q21 = gimple_assign_rhs2 (_a1);
12944 : 105827 : _q21 = do_valueize (valueize, _q21);
12945 : 105827 : if (tree_swap_operands_p (_q20, _q21))
12946 : 1888 : std::swap (_q20, _q21);
12947 : 105827 : switch (TREE_CODE (_q21))
12948 : : {
12949 : 66130 : case INTEGER_CST:
12950 : 66130 : {
12951 : 66130 : if (integer_zerop (_p1))
12952 : : {
12953 : 2743 : {
12954 : 2743 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
12955 : 2743 : if (gimple_simplify_245 (res_op, seq, valueize, type, captures, GT_EXPR, LT_EXPR))
12956 : 325 : return true;
12957 : : }
12958 : : }
12959 : : break;
12960 : : }
12961 : : default:;
12962 : : }
12963 : 26459318 : break;
12964 : : }
12965 : : default:;
12966 : : }
12967 : : }
12968 : : break;
12969 : 26459318 : default:;
12970 : : }
12971 : 26459318 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
12972 : : {
12973 : 9751 : {
12974 : 9751 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
12975 : 9751 : if (gimple_simplify_296 (res_op, seq, valueize, type, captures, GT_EXPR))
12976 : 9751 : return true;
12977 : : }
12978 : : }
12979 : 26449567 : switch (TREE_CODE (_p0))
12980 : : {
12981 : 25748309 : case SSA_NAME:
12982 : 25748309 : if (gimple *_d1 = get_def (valueize, _p0))
12983 : : {
12984 : 9013974 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12985 : 10603113 : switch (gimple_assign_rhs_code (_a1))
12986 : : {
12987 : 1599 : case BIT_NOT_EXPR:
12988 : 1599 : {
12989 : 1599 : tree _q20 = gimple_assign_rhs1 (_a1);
12990 : 1599 : _q20 = do_valueize (valueize, _q20);
12991 : 1599 : switch (TREE_CODE (_p1))
12992 : : {
12993 : 1276 : case SSA_NAME:
12994 : 1276 : if (gimple *_d2 = get_def (valueize, _p1))
12995 : : {
12996 : 1133 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12997 : 918 : switch (gimple_assign_rhs_code (_a2))
12998 : : {
12999 : 36 : case BIT_NOT_EXPR:
13000 : 36 : {
13001 : 36 : tree _q40 = gimple_assign_rhs1 (_a2);
13002 : 36 : _q40 = do_valueize (valueize, _q40);
13003 : 36 : {
13004 : 36 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _p1, _q40 };
13005 : 36 : if (gimple_simplify_249 (res_op, seq, valueize, type, captures, GT_EXPR))
13006 : 0 : return true;
13007 : : }
13008 : 36 : break;
13009 : : }
13010 : : default:;
13011 : : }
13012 : : }
13013 : : break;
13014 : 1599 : default:;
13015 : : }
13016 : 1599 : {
13017 : 1599 : tree _p1_pops[1];
13018 : 1599 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
13019 : : {
13020 : 5 : tree _q40 = _p1_pops[0];
13021 : 5 : switch (TREE_CODE (_q40))
13022 : : {
13023 : 5 : case SSA_NAME:
13024 : 5 : if (gimple *_d2 = get_def (valueize, _q40))
13025 : : {
13026 : 4 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13027 : 2 : switch (gimple_assign_rhs_code (_a2))
13028 : : {
13029 : 2 : case BIT_NOT_EXPR:
13030 : 2 : {
13031 : 2 : tree _q50 = gimple_assign_rhs1 (_a2);
13032 : 2 : _q50 = do_valueize (valueize, _q50);
13033 : 2 : {
13034 : 2 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q40, _q50 };
13035 : 2 : if (gimple_simplify_249 (res_op, seq, valueize, type, captures, GT_EXPR))
13036 : 1 : return true;
13037 : : }
13038 : 1 : break;
13039 : : }
13040 : : default:;
13041 : : }
13042 : : }
13043 : : break;
13044 : : default:;
13045 : : }
13046 : : }
13047 : : }
13048 : 1598 : if (CONSTANT_CLASS_P (_p1))
13049 : : {
13050 : 323 : {
13051 : 323 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
13052 : 323 : if (gimple_simplify_250 (res_op, seq, valueize, type, captures, GT_EXPR, LT_EXPR))
13053 : 89 : return true;
13054 : : }
13055 : : }
13056 : : break;
13057 : : }
13058 : : default:;
13059 : : }
13060 : : }
13061 : : break;
13062 : 26449477 : default:;
13063 : : }
13064 : 26449477 : {
13065 : 26449477 : tree _p0_pops[1];
13066 : 26449477 : if (gimple_nop_convert (_p0, _p0_pops, valueize))
13067 : : {
13068 : 763640 : tree _q20 = _p0_pops[0];
13069 : 763640 : switch (TREE_CODE (_q20))
13070 : : {
13071 : 762771 : case SSA_NAME:
13072 : 762771 : if (gimple *_d1 = get_def (valueize, _q20))
13073 : : {
13074 : 707570 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13075 : 675245 : switch (gimple_assign_rhs_code (_a1))
13076 : : {
13077 : 2 : case BIT_NOT_EXPR:
13078 : 2 : {
13079 : 2 : tree _q30 = gimple_assign_rhs1 (_a1);
13080 : 2 : _q30 = do_valueize (valueize, _q30);
13081 : 2 : switch (TREE_CODE (_p1))
13082 : : {
13083 : 2 : case SSA_NAME:
13084 : 2 : if (gimple *_d2 = get_def (valueize, _p1))
13085 : : {
13086 : 2 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13087 : 2 : switch (gimple_assign_rhs_code (_a2))
13088 : : {
13089 : 0 : case BIT_NOT_EXPR:
13090 : 0 : {
13091 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
13092 : 0 : _q50 = do_valueize (valueize, _q50);
13093 : 0 : {
13094 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _p1, _q50 };
13095 : 0 : if (gimple_simplify_251 (res_op, seq, valueize, type, captures, GT_EXPR))
13096 : 0 : return true;
13097 : : }
13098 : 0 : break;
13099 : : }
13100 : : default:;
13101 : : }
13102 : : }
13103 : : break;
13104 : 2 : default:;
13105 : : }
13106 : 2 : {
13107 : 2 : tree _p1_pops[1];
13108 : 2 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
13109 : : {
13110 : 2 : tree _q50 = _p1_pops[0];
13111 : 2 : switch (TREE_CODE (_q50))
13112 : : {
13113 : 2 : case SSA_NAME:
13114 : 2 : if (gimple *_d2 = get_def (valueize, _q50))
13115 : : {
13116 : 2 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13117 : 2 : switch (gimple_assign_rhs_code (_a2))
13118 : : {
13119 : 2 : case BIT_NOT_EXPR:
13120 : 2 : {
13121 : 2 : tree _q60 = gimple_assign_rhs1 (_a2);
13122 : 2 : _q60 = do_valueize (valueize, _q60);
13123 : 2 : {
13124 : 2 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q50, _q60 };
13125 : 2 : if (gimple_simplify_251 (res_op, seq, valueize, type, captures, GT_EXPR))
13126 : 1 : return true;
13127 : : }
13128 : 1 : break;
13129 : : }
13130 : : default:;
13131 : : }
13132 : : }
13133 : : break;
13134 : : default:;
13135 : : }
13136 : : }
13137 : : }
13138 : 1 : if (CONSTANT_CLASS_P (_p1))
13139 : : {
13140 : 0 : {
13141 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _p1 };
13142 : 0 : if (gimple_simplify_250 (res_op, seq, valueize, type, captures, GT_EXPR, LT_EXPR))
13143 : 0 : return true;
13144 : : }
13145 : : }
13146 : : break;
13147 : : }
13148 : : default:;
13149 : : }
13150 : : }
13151 : : break;
13152 : : default:;
13153 : : }
13154 : : }
13155 : : }
13156 : 26449476 : switch (TREE_CODE (_p1))
13157 : : {
13158 : 517219 : case REAL_CST:
13159 : 517219 : {
13160 : 517219 : {
13161 : 517219 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
13162 : 517219 : if (gimple_simplify_252 (res_op, seq, valueize, type, captures, GT_EXPR))
13163 : 848 : return true;
13164 : : }
13165 : 516371 : break;
13166 : : }
13167 : 26448628 : default:;
13168 : : }
13169 : 26448628 : switch (TREE_CODE (_p0))
13170 : : {
13171 : 25747376 : case SSA_NAME:
13172 : 25747376 : if (gimple *_d1 = get_def (valueize, _p0))
13173 : : {
13174 : 9013241 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13175 : 10602000 : switch (gimple_assign_rhs_code (_a1))
13176 : : {
13177 : 861343 : case PLUS_EXPR:
13178 : 861343 : {
13179 : 861343 : tree _q20 = gimple_assign_rhs1 (_a1);
13180 : 861343 : _q20 = do_valueize (valueize, _q20);
13181 : 861343 : tree _q21 = gimple_assign_rhs2 (_a1);
13182 : 861343 : _q21 = do_valueize (valueize, _q21);
13183 : 861343 : if (tree_swap_operands_p (_q20, _q21))
13184 : 18729 : std::swap (_q20, _q21);
13185 : 861343 : switch (TREE_CODE (_q21))
13186 : : {
13187 : 1300 : case REAL_CST:
13188 : 1300 : {
13189 : 1300 : switch (TREE_CODE (_p1))
13190 : : {
13191 : 959 : case REAL_CST:
13192 : 959 : {
13193 : 959 : {
13194 : 959 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
13195 : 959 : if (gimple_simplify_253 (res_op, seq, valueize, type, captures, PLUS_EXPR, GT_EXPR))
13196 : 2 : return true;
13197 : : }
13198 : 957 : break;
13199 : : }
13200 : : default:;
13201 : : }
13202 : : break;
13203 : : }
13204 : 665637 : case INTEGER_CST:
13205 : 665637 : {
13206 : 665637 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
13207 : : {
13208 : 1238 : {
13209 : 1238 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q20, _q21 };
13210 : 1238 : if (gimple_simplify_348 (res_op, seq, valueize, type, captures, GT_EXPR, LE_EXPR))
13211 : 20 : return true;
13212 : : }
13213 : : }
13214 : : break;
13215 : : }
13216 : : default:;
13217 : : }
13218 : 26390324 : break;
13219 : : }
13220 : 178490 : case MINUS_EXPR:
13221 : 178490 : {
13222 : 178490 : tree _q20 = gimple_assign_rhs1 (_a1);
13223 : 178490 : _q20 = do_valueize (valueize, _q20);
13224 : 178490 : tree _q21 = gimple_assign_rhs2 (_a1);
13225 : 178490 : _q21 = do_valueize (valueize, _q21);
13226 : 178490 : switch (TREE_CODE (_q21))
13227 : : {
13228 : 2409 : case REAL_CST:
13229 : 2409 : {
13230 : 2409 : switch (TREE_CODE (_p1))
13231 : : {
13232 : 2409 : case REAL_CST:
13233 : 2409 : {
13234 : 2409 : {
13235 : 2409 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
13236 : 2409 : if (gimple_simplify_253 (res_op, seq, valueize, type, captures, MINUS_EXPR, GT_EXPR))
13237 : 0 : return true;
13238 : : }
13239 : 2409 : break;
13240 : : }
13241 : : default:;
13242 : : }
13243 : : break;
13244 : : }
13245 : 178490 : default:;
13246 : : }
13247 : 178490 : switch (TREE_CODE (_q20))
13248 : : {
13249 : 143 : case REAL_CST:
13250 : 143 : {
13251 : 143 : switch (TREE_CODE (_p1))
13252 : : {
13253 : 143 : case REAL_CST:
13254 : 143 : {
13255 : 143 : {
13256 : 143 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
13257 : 143 : if (gimple_simplify_254 (res_op, seq, valueize, type, captures, GT_EXPR))
13258 : 9 : return true;
13259 : : }
13260 : 134 : break;
13261 : : }
13262 : : default:;
13263 : : }
13264 : : break;
13265 : : }
13266 : : default:;
13267 : : }
13268 : : break;
13269 : : }
13270 : 2173 : case FLOAT_EXPR:
13271 : 2173 : {
13272 : 2173 : tree _q20 = gimple_assign_rhs1 (_a1);
13273 : 2173 : _q20 = do_valueize (valueize, _q20);
13274 : 2173 : switch (TREE_CODE (_p1))
13275 : : {
13276 : 986 : case SSA_NAME:
13277 : 986 : if (gimple *_d2 = get_def (valueize, _p1))
13278 : : {
13279 : 931 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13280 : 1016 : switch (gimple_assign_rhs_code (_a2))
13281 : : {
13282 : 0 : case FLOAT_EXPR:
13283 : 0 : {
13284 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
13285 : 0 : _q40 = do_valueize (valueize, _q40);
13286 : 0 : {
13287 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
13288 : 0 : if (gimple_simplify_257 (res_op, seq, valueize, type, captures, GT_EXPR, GT_EXPR))
13289 : 0 : return true;
13290 : : }
13291 : 0 : break;
13292 : : }
13293 : : default:;
13294 : : }
13295 : : }
13296 : : break;
13297 : 1187 : case REAL_CST:
13298 : 1187 : {
13299 : 1187 : {
13300 : 1187 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
13301 : 1187 : if (gimple_simplify_258 (res_op, seq, valueize, type, captures, GT_EXPR, GE_EXPR))
13302 : 157 : return true;
13303 : : }
13304 : 1030 : break;
13305 : : }
13306 : : default:;
13307 : : }
13308 : : break;
13309 : : }
13310 : 21594 : case EXACT_DIV_EXPR:
13311 : 21594 : {
13312 : 21594 : tree _q20 = gimple_assign_rhs1 (_a1);
13313 : 21594 : _q20 = do_valueize (valueize, _q20);
13314 : 21594 : tree _q21 = gimple_assign_rhs2 (_a1);
13315 : 21594 : _q21 = do_valueize (valueize, _q21);
13316 : 21594 : switch (TREE_CODE (_q21))
13317 : : {
13318 : 21594 : case INTEGER_CST:
13319 : 21594 : {
13320 : 21594 : switch (TREE_CODE (_p1))
13321 : : {
13322 : 18572 : case INTEGER_CST:
13323 : 18572 : {
13324 : 18572 : {
13325 : 18572 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
13326 : 18572 : if (gimple_simplify_349 (res_op, seq, valueize, type, captures, GT_EXPR))
13327 : 18572 : return true;
13328 : : }
13329 : 0 : break;
13330 : : }
13331 : : default:;
13332 : : }
13333 : : break;
13334 : : }
13335 : : default:;
13336 : : }
13337 : : break;
13338 : : }
13339 : 1087449 : CASE_CONVERT:
13340 : 1087449 : {
13341 : 1087449 : tree _q20 = gimple_assign_rhs1 (_a1);
13342 : 1087449 : _q20 = do_valueize (valueize, _q20);
13343 : 1087449 : switch (TREE_CODE (_q20))
13344 : : {
13345 : 1086580 : case SSA_NAME:
13346 : 1086580 : if (gimple *_d2 = get_def (valueize, _q20))
13347 : : {
13348 : 1025898 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13349 : 1067977 : switch (gimple_assign_rhs_code (_a2))
13350 : : {
13351 : 66201 : case EXACT_DIV_EXPR:
13352 : 66201 : {
13353 : 66201 : tree _q30 = gimple_assign_rhs1 (_a2);
13354 : 66201 : _q30 = do_valueize (valueize, _q30);
13355 : 66201 : tree _q31 = gimple_assign_rhs2 (_a2);
13356 : 66201 : _q31 = do_valueize (valueize, _q31);
13357 : 66201 : switch (TREE_CODE (_q31))
13358 : : {
13359 : 66201 : case INTEGER_CST:
13360 : 66201 : {
13361 : 66201 : switch (TREE_CODE (_p1))
13362 : : {
13363 : 35094 : case INTEGER_CST:
13364 : 35094 : {
13365 : 35094 : {
13366 : 35094 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
13367 : 35094 : if (gimple_simplify_350 (res_op, seq, valueize, type, captures, GT_EXPR, LT_EXPR))
13368 : 16887 : return true;
13369 : : }
13370 : 18207 : break;
13371 : : }
13372 : : default:;
13373 : : }
13374 : : break;
13375 : : }
13376 : : default:;
13377 : : }
13378 : : break;
13379 : : }
13380 : : default:;
13381 : : }
13382 : : }
13383 : : break;
13384 : 1070562 : default:;
13385 : : }
13386 : 1070562 : switch (TREE_CODE (_p1))
13387 : : {
13388 : 568720 : case SSA_NAME:
13389 : 568720 : if (gimple *_d2 = get_def (valueize, _p1))
13390 : : {
13391 : 549777 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13392 : 525955 : switch (gimple_assign_rhs_code (_a2))
13393 : : {
13394 : 336979 : CASE_CONVERT:
13395 : 336979 : {
13396 : 336979 : tree _q40 = gimple_assign_rhs1 (_a2);
13397 : 336979 : _q40 = do_valueize (valueize, _q40);
13398 : 336979 : {
13399 : 336979 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
13400 : 336979 : if (gimple_simplify_262 (res_op, seq, valueize, type, captures, GT_EXPR))
13401 : 495 : return true;
13402 : : }
13403 : 336484 : break;
13404 : : }
13405 : : default:;
13406 : : }
13407 : : }
13408 : : break;
13409 : 1070067 : default:;
13410 : : }
13411 : 1070067 : {
13412 : 1070067 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _p1 };
13413 : 1070067 : if (gimple_simplify_263 (res_op, seq, valueize, type, captures, GT_EXPR))
13414 : 20793 : return true;
13415 : : }
13416 : 1049274 : break;
13417 : : }
13418 : 38881 : case BIT_AND_EXPR:
13419 : 38881 : {
13420 : 38881 : tree _q20 = gimple_assign_rhs1 (_a1);
13421 : 38881 : _q20 = do_valueize (valueize, _q20);
13422 : 38881 : tree _q21 = gimple_assign_rhs2 (_a1);
13423 : 38881 : _q21 = do_valueize (valueize, _q21);
13424 : 38881 : if (tree_swap_operands_p (_q20, _q21))
13425 : 151 : std::swap (_q20, _q21);
13426 : 38881 : switch (TREE_CODE (_q21))
13427 : : {
13428 : 36840 : case INTEGER_CST:
13429 : 36840 : {
13430 : 36840 : switch (TREE_CODE (_p1))
13431 : : {
13432 : 26037 : case INTEGER_CST:
13433 : 26037 : {
13434 : 26037 : {
13435 : 26037 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
13436 : 26037 : if (gimple_simplify_365 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR))
13437 : 112 : return true;
13438 : : }
13439 : 25925 : break;
13440 : : }
13441 : : default:;
13442 : : }
13443 : : break;
13444 : : }
13445 : : default:;
13446 : : }
13447 : 26390324 : break;
13448 : : }
13449 : 16514 : case NEGATE_EXPR:
13450 : 16514 : {
13451 : 16514 : tree _q20 = gimple_assign_rhs1 (_a1);
13452 : 16514 : _q20 = do_valueize (valueize, _q20);
13453 : 16514 : switch (TREE_CODE (_p1))
13454 : : {
13455 : 14905 : case SSA_NAME:
13456 : 14905 : if (gimple *_d2 = get_def (valueize, _p1))
13457 : : {
13458 : 14738 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13459 : 14463 : switch (gimple_assign_rhs_code (_a2))
13460 : : {
13461 : 314 : case NEGATE_EXPR:
13462 : 314 : {
13463 : 314 : tree _q40 = gimple_assign_rhs1 (_a2);
13464 : 314 : _q40 = do_valueize (valueize, _q40);
13465 : 314 : {
13466 : 314 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
13467 : 314 : if (gimple_simplify_260 (res_op, seq, valueize, type, captures, GT_EXPR, LT_EXPR))
13468 : 295 : return true;
13469 : : }
13470 : 19 : break;
13471 : : }
13472 : : default:;
13473 : : }
13474 : : }
13475 : : break;
13476 : 16219 : default:;
13477 : : }
13478 : 16219 : if (CONSTANT_CLASS_P (_p1))
13479 : : {
13480 : 1609 : {
13481 : 1609 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
13482 : 1609 : if (gimple_simplify_261 (res_op, seq, valueize, type, captures, GT_EXPR, LT_EXPR))
13483 : 827 : return true;
13484 : : }
13485 : : }
13486 : : break;
13487 : : }
13488 : 3810 : case COND_EXPR:
13489 : 3810 : {
13490 : 3810 : tree _q20 = gimple_assign_rhs1 (_a1);
13491 : 3810 : _q20 = do_valueize (valueize, _q20);
13492 : 3810 : tree _q21 = gimple_assign_rhs2 (_a1);
13493 : 3810 : _q21 = do_valueize (valueize, _q21);
13494 : 3810 : tree _q22 = gimple_assign_rhs3 (_a1);
13495 : 3810 : _q22 = do_valueize (valueize, _q22);
13496 : 3810 : {
13497 : 3810 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q22, _p1 };
13498 : 3810 : if (gimple_simplify_278 (res_op, seq, valueize, type, captures, GT_EXPR))
13499 : 90 : return true;
13500 : : }
13501 : 3720 : break;
13502 : : }
13503 : : default:;
13504 : : }
13505 : 2279031 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
13506 : 325015 : switch (gimple_call_combined_fn (_c1))
13507 : : {
13508 : 17 : case CFN_BUILT_IN_SQRTF:
13509 : 17 : if (gimple_call_num_args (_c1) == 1)
13510 : : {
13511 : 17 : tree _q20 = gimple_call_arg (_c1, 0);
13512 : 17 : _q20 = do_valueize (valueize, _q20);
13513 : 17 : switch (TREE_CODE (_p1))
13514 : : {
13515 : 2 : case SSA_NAME:
13516 : 2 : if (gimple *_d2 = get_def (valueize, _p1))
13517 : : {
13518 : 2 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
13519 : 2 : switch (gimple_call_combined_fn (_c2))
13520 : : {
13521 : 2 : case CFN_BUILT_IN_SQRTF:
13522 : 2 : if (gimple_call_num_args (_c2) == 1)
13523 : : {
13524 : 2 : tree _q40 = gimple_call_arg (_c2, 0);
13525 : 2 : _q40 = do_valueize (valueize, _q40);
13526 : 2 : {
13527 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
13528 : 2 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTF, GT_EXPR))
13529 : 2 : return true;
13530 : : }
13531 : : }
13532 : : break;
13533 : : default:;
13534 : : }
13535 : : }
13536 : : break;
13537 : 15 : case REAL_CST:
13538 : 15 : {
13539 : 15 : {
13540 : 15 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
13541 : 15 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTF, GT_EXPR))
13542 : 15 : return true;
13543 : : }
13544 : 0 : break;
13545 : : }
13546 : : default:;
13547 : : }
13548 : : }
13549 : : break;
13550 : 14 : case CFN_BUILT_IN_SQRTL:
13551 : 14 : if (gimple_call_num_args (_c1) == 1)
13552 : : {
13553 : 14 : tree _q20 = gimple_call_arg (_c1, 0);
13554 : 14 : _q20 = do_valueize (valueize, _q20);
13555 : 14 : switch (TREE_CODE (_p1))
13556 : : {
13557 : 2 : case SSA_NAME:
13558 : 2 : if (gimple *_d2 = get_def (valueize, _p1))
13559 : : {
13560 : 2 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
13561 : 2 : switch (gimple_call_combined_fn (_c2))
13562 : : {
13563 : 2 : case CFN_BUILT_IN_SQRTL:
13564 : 2 : if (gimple_call_num_args (_c2) == 1)
13565 : : {
13566 : 2 : tree _q40 = gimple_call_arg (_c2, 0);
13567 : 2 : _q40 = do_valueize (valueize, _q40);
13568 : 2 : {
13569 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
13570 : 2 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTL, GT_EXPR))
13571 : 2 : return true;
13572 : : }
13573 : : }
13574 : : break;
13575 : : default:;
13576 : : }
13577 : : }
13578 : : break;
13579 : 12 : case REAL_CST:
13580 : 12 : {
13581 : 12 : {
13582 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
13583 : 12 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTL, GT_EXPR))
13584 : 12 : return true;
13585 : : }
13586 : 0 : break;
13587 : : }
13588 : : default:;
13589 : : }
13590 : : }
13591 : : break;
13592 : 364 : case CFN_BUILT_IN_SQRT:
13593 : 364 : if (gimple_call_num_args (_c1) == 1)
13594 : : {
13595 : 364 : tree _q20 = gimple_call_arg (_c1, 0);
13596 : 364 : _q20 = do_valueize (valueize, _q20);
13597 : 364 : switch (TREE_CODE (_p1))
13598 : : {
13599 : 2 : case SSA_NAME:
13600 : 2 : if (gimple *_d2 = get_def (valueize, _p1))
13601 : : {
13602 : 2 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
13603 : 2 : switch (gimple_call_combined_fn (_c2))
13604 : : {
13605 : 2 : case CFN_BUILT_IN_SQRT:
13606 : 2 : if (gimple_call_num_args (_c2) == 1)
13607 : : {
13608 : 2 : tree _q40 = gimple_call_arg (_c2, 0);
13609 : 2 : _q40 = do_valueize (valueize, _q40);
13610 : 2 : {
13611 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
13612 : 2 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRT, GT_EXPR))
13613 : 2 : return true;
13614 : : }
13615 : : }
13616 : : break;
13617 : : default:;
13618 : : }
13619 : : }
13620 : : break;
13621 : 362 : case REAL_CST:
13622 : 362 : {
13623 : 362 : {
13624 : 362 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
13625 : 362 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRT, GT_EXPR))
13626 : 12 : return true;
13627 : : }
13628 : 350 : break;
13629 : : }
13630 : : default:;
13631 : : }
13632 : : }
13633 : : break;
13634 : 21 : case CFN_SQRT:
13635 : 21 : if (gimple_call_num_args (_c1) == 1)
13636 : : {
13637 : 21 : tree _q20 = gimple_call_arg (_c1, 0);
13638 : 21 : _q20 = do_valueize (valueize, _q20);
13639 : 21 : switch (TREE_CODE (_p1))
13640 : : {
13641 : 0 : case SSA_NAME:
13642 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
13643 : : {
13644 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
13645 : 0 : switch (gimple_call_combined_fn (_c2))
13646 : : {
13647 : 0 : case CFN_SQRT:
13648 : 0 : if (gimple_call_num_args (_c2) == 1)
13649 : : {
13650 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
13651 : 0 : _q40 = do_valueize (valueize, _q40);
13652 : 0 : {
13653 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
13654 : 0 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, CFN_SQRT, GT_EXPR))
13655 : 0 : return true;
13656 : : }
13657 : : }
13658 : : break;
13659 : : default:;
13660 : : }
13661 : : }
13662 : : break;
13663 : 21 : case REAL_CST:
13664 : 21 : {
13665 : 21 : {
13666 : 21 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
13667 : 21 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, CFN_SQRT, GT_EXPR))
13668 : 0 : return true;
13669 : : }
13670 : 21 : break;
13671 : : }
13672 : : default:;
13673 : : }
13674 : : }
13675 : : break;
13676 : : default:;
13677 : : }
13678 : : }
13679 : : break;
13680 : 26390324 : default:;
13681 : : }
13682 : 26390324 : switch (TREE_CODE (_p1))
13683 : : {
13684 : 9390468 : case SSA_NAME:
13685 : 9390468 : if (gimple *_d1 = get_def (valueize, _p1))
13686 : : {
13687 : 3001423 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13688 : 3227928 : switch (gimple_assign_rhs_code (_a1))
13689 : : {
13690 : 1534 : case COND_EXPR:
13691 : 1534 : {
13692 : 1534 : tree _q30 = gimple_assign_rhs1 (_a1);
13693 : 1534 : _q30 = do_valueize (valueize, _q30);
13694 : 1534 : tree _q31 = gimple_assign_rhs2 (_a1);
13695 : 1534 : _q31 = do_valueize (valueize, _q31);
13696 : 1534 : tree _q32 = gimple_assign_rhs3 (_a1);
13697 : 1534 : _q32 = do_valueize (valueize, _q32);
13698 : 1534 : {
13699 : 1534 : tree captures[4] ATTRIBUTE_UNUSED = { _q30, _q31, _q32, _p0 };
13700 : 1534 : if (gimple_simplify_278 (res_op, seq, valueize, type, captures, LT_EXPR))
13701 : 0 : return true;
13702 : : }
13703 : 1534 : break;
13704 : : }
13705 : : default:;
13706 : : }
13707 : : }
13708 : : break;
13709 : 26390324 : default:;
13710 : : }
13711 : 26390324 : switch (TREE_CODE (_p0))
13712 : : {
13713 : 25689072 : case SSA_NAME:
13714 : 25689072 : if (gimple *_d1 = get_def (valueize, _p0))
13715 : : {
13716 : 8954937 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13717 : 10543741 : switch (gimple_assign_rhs_code (_a1))
13718 : : {
13719 : 1049274 : CASE_CONVERT:
13720 : 1049274 : {
13721 : 1049274 : tree _q20 = gimple_assign_rhs1 (_a1);
13722 : 1049274 : _q20 = do_valueize (valueize, _q20);
13723 : 1049274 : switch (TREE_CODE (_q20))
13724 : : {
13725 : 1048405 : case SSA_NAME:
13726 : 1048405 : if (gimple *_d2 = get_def (valueize, _q20))
13727 : : {
13728 : 989789 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13729 : 1026917 : switch (gimple_assign_rhs_code (_a2))
13730 : : {
13731 : 2622 : case ADDR_EXPR:
13732 : 2622 : {
13733 : 2622 : switch (TREE_CODE (_p1))
13734 : : {
13735 : 130 : case SSA_NAME:
13736 : 130 : if (gimple *_d3 = get_def (valueize, _p1))
13737 : : {
13738 : 130 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13739 : 130 : switch (gimple_assign_rhs_code (_a3))
13740 : : {
13741 : 26 : CASE_CONVERT:
13742 : 26 : {
13743 : 26 : tree _q40 = gimple_assign_rhs1 (_a3);
13744 : 26 : _q40 = do_valueize (valueize, _q40);
13745 : 26 : switch (TREE_CODE (_q40))
13746 : : {
13747 : 26 : case SSA_NAME:
13748 : 26 : if (gimple *_d4 = get_def (valueize, _q40))
13749 : : {
13750 : 26 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
13751 : 52 : switch (gimple_assign_rhs_code (_a4))
13752 : : {
13753 : 0 : case ADDR_EXPR:
13754 : 0 : {
13755 : 0 : {
13756 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
13757 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, GT_EXPR))
13758 : 0 : return true;
13759 : : }
13760 : 0 : break;
13761 : : }
13762 : : default:;
13763 : : }
13764 : : }
13765 : : break;
13766 : 0 : case ADDR_EXPR:
13767 : 0 : {
13768 : 0 : {
13769 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
13770 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, GT_EXPR))
13771 : 0 : return true;
13772 : : }
13773 : 0 : break;
13774 : : }
13775 : : default:;
13776 : : }
13777 : : break;
13778 : : }
13779 : 0 : case ADDR_EXPR:
13780 : 0 : {
13781 : 0 : {
13782 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
13783 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, GT_EXPR))
13784 : 0 : return true;
13785 : : }
13786 : 0 : break;
13787 : : }
13788 : : default:;
13789 : : }
13790 : : }
13791 : : break;
13792 : 0 : case ADDR_EXPR:
13793 : 0 : {
13794 : 0 : {
13795 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
13796 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, GT_EXPR))
13797 : 0 : return true;
13798 : : }
13799 : 0 : break;
13800 : : }
13801 : : default:;
13802 : : }
13803 : : break;
13804 : : }
13805 : : default:;
13806 : : }
13807 : : }
13808 : : break;
13809 : 869 : case ADDR_EXPR:
13810 : 869 : {
13811 : 869 : switch (TREE_CODE (_p1))
13812 : : {
13813 : 600 : case SSA_NAME:
13814 : 600 : if (gimple *_d2 = get_def (valueize, _p1))
13815 : : {
13816 : 597 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13817 : 597 : switch (gimple_assign_rhs_code (_a2))
13818 : : {
13819 : 597 : CASE_CONVERT:
13820 : 597 : {
13821 : 597 : tree _q40 = gimple_assign_rhs1 (_a2);
13822 : 597 : _q40 = do_valueize (valueize, _q40);
13823 : 597 : switch (TREE_CODE (_q40))
13824 : : {
13825 : 423 : case SSA_NAME:
13826 : 423 : if (gimple *_d3 = get_def (valueize, _q40))
13827 : : {
13828 : 423 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13829 : 416 : switch (gimple_assign_rhs_code (_a3))
13830 : : {
13831 : 0 : case ADDR_EXPR:
13832 : 0 : {
13833 : 0 : {
13834 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
13835 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, GT_EXPR))
13836 : 0 : return true;
13837 : : }
13838 : 0 : break;
13839 : : }
13840 : : default:;
13841 : : }
13842 : : }
13843 : : break;
13844 : 174 : case ADDR_EXPR:
13845 : 174 : {
13846 : 174 : {
13847 : 174 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
13848 : 174 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, GT_EXPR))
13849 : 10 : return true;
13850 : : }
13851 : 164 : break;
13852 : : }
13853 : : default:;
13854 : : }
13855 : : break;
13856 : : }
13857 : 0 : case ADDR_EXPR:
13858 : 0 : {
13859 : 0 : {
13860 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
13861 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, GT_EXPR))
13862 : 0 : return true;
13863 : : }
13864 : 0 : break;
13865 : : }
13866 : : default:;
13867 : : }
13868 : : }
13869 : : break;
13870 : 0 : case ADDR_EXPR:
13871 : 0 : {
13872 : 0 : {
13873 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
13874 : 0 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, GT_EXPR))
13875 : 0 : return true;
13876 : : }
13877 : 0 : break;
13878 : : }
13879 : : default:;
13880 : : }
13881 : : break;
13882 : : }
13883 : 1049264 : default:;
13884 : : }
13885 : 1049264 : if (uniform_integer_cst_p (_p1))
13886 : : {
13887 : 476615 : {
13888 : 476615 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
13889 : 476615 : if (gimple_simplify_351 (res_op, seq, valueize, type, captures, GT_EXPR))
13890 : 14508 : return true;
13891 : : }
13892 : : }
13893 : : break;
13894 : : }
13895 : 292 : case ADDR_EXPR:
13896 : 292 : {
13897 : 292 : switch (TREE_CODE (_p1))
13898 : : {
13899 : 283 : case SSA_NAME:
13900 : 283 : if (gimple *_d2 = get_def (valueize, _p1))
13901 : : {
13902 : 275 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13903 : 324 : switch (gimple_assign_rhs_code (_a2))
13904 : : {
13905 : 20 : CASE_CONVERT:
13906 : 20 : {
13907 : 20 : tree _q30 = gimple_assign_rhs1 (_a2);
13908 : 20 : _q30 = do_valueize (valueize, _q30);
13909 : 20 : switch (TREE_CODE (_q30))
13910 : : {
13911 : 20 : case SSA_NAME:
13912 : 20 : if (gimple *_d3 = get_def (valueize, _q30))
13913 : : {
13914 : 16 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13915 : 16 : switch (gimple_assign_rhs_code (_a3))
13916 : : {
13917 : 0 : case ADDR_EXPR:
13918 : 0 : {
13919 : 0 : {
13920 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
13921 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, GT_EXPR))
13922 : 0 : return true;
13923 : : }
13924 : 0 : break;
13925 : : }
13926 : : default:;
13927 : : }
13928 : : }
13929 : : break;
13930 : 0 : case ADDR_EXPR:
13931 : 0 : {
13932 : 0 : {
13933 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
13934 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, GT_EXPR))
13935 : 0 : return true;
13936 : : }
13937 : 0 : break;
13938 : : }
13939 : : default:;
13940 : : }
13941 : : break;
13942 : : }
13943 : 98 : case ADDR_EXPR:
13944 : 98 : {
13945 : 98 : {
13946 : 98 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
13947 : 98 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, GT_EXPR))
13948 : 62 : return true;
13949 : : }
13950 : 36 : break;
13951 : : }
13952 : : default:;
13953 : : }
13954 : : }
13955 : : break;
13956 : 9 : case ADDR_EXPR:
13957 : 9 : {
13958 : 9 : {
13959 : 9 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
13960 : 9 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, GT_EXPR))
13961 : 0 : return true;
13962 : : }
13963 : 9 : break;
13964 : : }
13965 : : default:;
13966 : : }
13967 : : break;
13968 : : }
13969 : : default:;
13970 : : }
13971 : : }
13972 : : break;
13973 : 38321 : case ADDR_EXPR:
13974 : 38321 : {
13975 : 38321 : switch (TREE_CODE (_p1))
13976 : : {
13977 : 31863 : case SSA_NAME:
13978 : 31863 : if (gimple *_d1 = get_def (valueize, _p1))
13979 : : {
13980 : 7763 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13981 : 8488 : switch (gimple_assign_rhs_code (_a1))
13982 : : {
13983 : 727 : CASE_CONVERT:
13984 : 727 : {
13985 : 727 : tree _q30 = gimple_assign_rhs1 (_a1);
13986 : 727 : _q30 = do_valueize (valueize, _q30);
13987 : 727 : switch (TREE_CODE (_q30))
13988 : : {
13989 : 727 : case SSA_NAME:
13990 : 727 : if (gimple *_d2 = get_def (valueize, _q30))
13991 : : {
13992 : 630 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13993 : 195 : switch (gimple_assign_rhs_code (_a2))
13994 : : {
13995 : 0 : case ADDR_EXPR:
13996 : 0 : {
13997 : 0 : {
13998 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
13999 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, GT_EXPR))
14000 : 0 : return true;
14001 : : }
14002 : 0 : break;
14003 : : }
14004 : : default:;
14005 : : }
14006 : : }
14007 : : break;
14008 : 0 : case ADDR_EXPR:
14009 : 0 : {
14010 : 0 : {
14011 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
14012 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, GT_EXPR))
14013 : 0 : return true;
14014 : : }
14015 : 0 : break;
14016 : : }
14017 : : default:;
14018 : : }
14019 : : break;
14020 : : }
14021 : 0 : case ADDR_EXPR:
14022 : 0 : {
14023 : 0 : {
14024 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
14025 : 0 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, GT_EXPR))
14026 : 0 : return true;
14027 : : }
14028 : 0 : break;
14029 : : }
14030 : : default:;
14031 : : }
14032 : : }
14033 : : break;
14034 : 6408 : case ADDR_EXPR:
14035 : 6408 : {
14036 : 6408 : {
14037 : 6408 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
14038 : 6408 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, GT_EXPR))
14039 : 4979 : return true;
14040 : : }
14041 : 1429 : break;
14042 : : }
14043 : : default:;
14044 : : }
14045 : : break;
14046 : : }
14047 : 26370765 : default:;
14048 : : }
14049 : 26370765 : if (uniform_integer_cst_p (_p1))
14050 : : {
14051 : 16267377 : {
14052 : 16267377 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
14053 : 16267377 : if (gimple_simplify_352 (res_op, seq, valueize, type, captures, GT_EXPR))
14054 : 72973 : return true;
14055 : : }
14056 : : }
14057 : 26297792 : switch (TREE_CODE (_p0))
14058 : : {
14059 : 25601527 : case SSA_NAME:
14060 : 25601527 : if (gimple *_d1 = get_def (valueize, _p0))
14061 : : {
14062 : 8882260 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14063 : 10485931 : switch (gimple_assign_rhs_code (_a1))
14064 : : {
14065 : 1032656 : CASE_CONVERT:
14066 : 1032656 : {
14067 : 1032656 : tree _q20 = gimple_assign_rhs1 (_a1);
14068 : 1032656 : _q20 = do_valueize (valueize, _q20);
14069 : 1032656 : switch (TREE_CODE (_q20))
14070 : : {
14071 : 1031797 : case SSA_NAME:
14072 : 1031797 : if (gimple *_d2 = get_def (valueize, _q20))
14073 : : {
14074 : 973898 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14075 : 1009046 : switch (gimple_assign_rhs_code (_a2))
14076 : : {
14077 : 102 : case NE_EXPR:
14078 : 102 : {
14079 : 102 : tree _q30 = gimple_assign_rhs1 (_a2);
14080 : 102 : _q30 = do_valueize (valueize, _q30);
14081 : 102 : tree _q31 = gimple_assign_rhs2 (_a2);
14082 : 102 : _q31 = do_valueize (valueize, _q31);
14083 : 102 : if (tree_swap_operands_p (_q30, _q31))
14084 : 0 : std::swap (_q30, _q31);
14085 : 102 : if (integer_zerop (_q31))
14086 : : {
14087 : 0 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
14088 : : {
14089 : 0 : {
14090 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q30 };
14091 : 0 : if (TYPE_UNSIGNED (TREE_TYPE (captures[0]))
14092 : : )
14093 : : {
14094 : 0 : gimple_seq *lseq = seq;
14095 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1953;
14096 : 0 : {
14097 : 0 : tree tem;
14098 : 0 : tem = constant_boolean_node (false, type);
14099 : 0 : res_op->set_value (tem);
14100 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1032, __FILE__, __LINE__, true);
14101 : 0 : return true;
14102 : : }
14103 : 0 : next_after_fail1953:;
14104 : : }
14105 : : }
14106 : : }
14107 : : }
14108 : 26297778 : break;
14109 : : }
14110 : 312449 : case PLUS_EXPR:
14111 : 312449 : {
14112 : 312449 : tree _q30 = gimple_assign_rhs1 (_a2);
14113 : 312449 : _q30 = do_valueize (valueize, _q30);
14114 : 312449 : tree _q31 = gimple_assign_rhs2 (_a2);
14115 : 312449 : _q31 = do_valueize (valueize, _q31);
14116 : 312449 : if (tree_swap_operands_p (_q30, _q31))
14117 : 3408 : std::swap (_q30, _q31);
14118 : 312449 : switch (TREE_CODE (_q30))
14119 : : {
14120 : 312449 : case SSA_NAME:
14121 : 312449 : if (gimple *_d3 = get_def (valueize, _q30))
14122 : : {
14123 : 308995 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
14124 : 358946 : switch (gimple_assign_rhs_code (_a3))
14125 : : {
14126 : 47480 : CASE_CONVERT:
14127 : 47480 : {
14128 : 47480 : tree _q40 = gimple_assign_rhs1 (_a3);
14129 : 47480 : _q40 = do_valueize (valueize, _q40);
14130 : 47480 : switch (TREE_CODE (_q31))
14131 : : {
14132 : 44573 : case INTEGER_CST:
14133 : 44573 : {
14134 : 44573 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
14135 : : {
14136 : 14 : {
14137 : 14 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q40, _q31 };
14138 : 14 : if (gimple_simplify_353 (res_op, seq, valueize, type, captures, GT_EXPR, LE_EXPR))
14139 : 14 : return true;
14140 : : }
14141 : : }
14142 : : break;
14143 : : }
14144 : : default:;
14145 : : }
14146 : : break;
14147 : : }
14148 : : default:;
14149 : : }
14150 : : }
14151 : : break;
14152 : : default:;
14153 : : }
14154 : 26297778 : break;
14155 : : }
14156 : : default:;
14157 : : }
14158 : : }
14159 : : break;
14160 : : default:;
14161 : : }
14162 : : break;
14163 : : }
14164 : : default:;
14165 : : }
14166 : : }
14167 : : break;
14168 : 26297778 : default:;
14169 : : }
14170 : 26297778 : switch (TREE_CODE (_p1))
14171 : : {
14172 : 9390382 : case SSA_NAME:
14173 : 9390382 : if (gimple *_d1 = get_def (valueize, _p1))
14174 : : {
14175 : 3001337 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14176 : 3227790 : switch (gimple_assign_rhs_code (_a1))
14177 : : {
14178 : 489861 : CASE_CONVERT:
14179 : 489861 : {
14180 : 489861 : tree _q30 = gimple_assign_rhs1 (_a1);
14181 : 489861 : _q30 = do_valueize (valueize, _q30);
14182 : 489861 : switch (TREE_CODE (_q30))
14183 : : {
14184 : 487890 : case SSA_NAME:
14185 : 487890 : if (gimple *_d2 = get_def (valueize, _q30))
14186 : : {
14187 : 436912 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14188 : 533138 : switch (gimple_assign_rhs_code (_a2))
14189 : : {
14190 : 37945 : case PLUS_EXPR:
14191 : 37945 : {
14192 : 37945 : tree _q40 = gimple_assign_rhs1 (_a2);
14193 : 37945 : _q40 = do_valueize (valueize, _q40);
14194 : 37945 : tree _q41 = gimple_assign_rhs2 (_a2);
14195 : 37945 : _q41 = do_valueize (valueize, _q41);
14196 : 37945 : if (tree_swap_operands_p (_q40, _q41))
14197 : 887 : std::swap (_q40, _q41);
14198 : 37945 : switch (TREE_CODE (_q40))
14199 : : {
14200 : 37945 : case SSA_NAME:
14201 : 37945 : if (gimple *_d3 = get_def (valueize, _q40))
14202 : : {
14203 : 35614 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
14204 : 24508 : switch (gimple_assign_rhs_code (_a3))
14205 : : {
14206 : 12252 : CASE_CONVERT:
14207 : 12252 : {
14208 : 12252 : tree _q50 = gimple_assign_rhs1 (_a3);
14209 : 12252 : _q50 = do_valueize (valueize, _q50);
14210 : 12252 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
14211 : : {
14212 : 15 : switch (TREE_CODE (_q41))
14213 : : {
14214 : 0 : case INTEGER_CST:
14215 : 0 : {
14216 : 0 : {
14217 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p1, _q30, _q40, _p0, _q41 };
14218 : 0 : if (gimple_simplify_353 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
14219 : 0 : return true;
14220 : : }
14221 : 0 : break;
14222 : : }
14223 : : default:;
14224 : : }
14225 : : }
14226 : : break;
14227 : : }
14228 : : default:;
14229 : : }
14230 : : }
14231 : : break;
14232 : : default:;
14233 : : }
14234 : 26295737 : break;
14235 : : }
14236 : : default:;
14237 : : }
14238 : : }
14239 : : break;
14240 : : default:;
14241 : : }
14242 : : break;
14243 : : }
14244 : 655105 : case PLUS_EXPR:
14245 : 655105 : {
14246 : 655105 : tree _q30 = gimple_assign_rhs1 (_a1);
14247 : 655105 : _q30 = do_valueize (valueize, _q30);
14248 : 655105 : tree _q31 = gimple_assign_rhs2 (_a1);
14249 : 655105 : _q31 = do_valueize (valueize, _q31);
14250 : 655105 : if (tree_swap_operands_p (_q30, _q31))
14251 : 18723 : std::swap (_q30, _q31);
14252 : 655105 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
14253 : : {
14254 : 59184 : switch (TREE_CODE (_q31))
14255 : : {
14256 : 12963 : case INTEGER_CST:
14257 : 12963 : {
14258 : 12963 : {
14259 : 12963 : tree captures[5] ATTRIBUTE_UNUSED = { _p1, _p1, _q30, _p0, _q31 };
14260 : 12963 : if (gimple_simplify_348 (res_op, seq, valueize, type, captures, LT_EXPR, GT_EXPR))
14261 : 2041 : return true;
14262 : : }
14263 : 10922 : break;
14264 : : }
14265 : : default:;
14266 : : }
14267 : : }
14268 : 26295737 : break;
14269 : : }
14270 : : default:;
14271 : : }
14272 : : }
14273 : : break;
14274 : 26295737 : default:;
14275 : : }
14276 : 26295737 : switch (TREE_CODE (_p0))
14277 : : {
14278 : 25599472 : case SSA_NAME:
14279 : 25599472 : if (gimple *_d1 = get_def (valueize, _p0))
14280 : : {
14281 : 8880209 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14282 : 10482473 : switch (gimple_assign_rhs_code (_a1))
14283 : : {
14284 : 177605 : case MINUS_EXPR:
14285 : 177605 : {
14286 : 177605 : tree _q20 = gimple_assign_rhs1 (_a1);
14287 : 177605 : _q20 = do_valueize (valueize, _q20);
14288 : 177605 : tree _q21 = gimple_assign_rhs2 (_a1);
14289 : 177605 : _q21 = do_valueize (valueize, _q21);
14290 : 177605 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
14291 : : {
14292 : 3030 : {
14293 : 3030 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
14294 : 3030 : if (gimple_simplify_354 (res_op, seq, valueize, type, captures, GT_EXPR))
14295 : 65 : return true;
14296 : : }
14297 : : }
14298 : : break;
14299 : : }
14300 : : default:;
14301 : : }
14302 : : }
14303 : : break;
14304 : 26295672 : default:;
14305 : : }
14306 : 26295672 : switch (TREE_CODE (_p1))
14307 : : {
14308 : 9388276 : case SSA_NAME:
14309 : 9388276 : if (gimple *_d1 = get_def (valueize, _p1))
14310 : : {
14311 : 2999231 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14312 : 3225647 : switch (gimple_assign_rhs_code (_a1))
14313 : : {
14314 : 653064 : case PLUS_EXPR:
14315 : 653064 : {
14316 : 653064 : tree _q30 = gimple_assign_rhs1 (_a1);
14317 : 653064 : _q30 = do_valueize (valueize, _q30);
14318 : 653064 : tree _q31 = gimple_assign_rhs2 (_a1);
14319 : 653064 : _q31 = do_valueize (valueize, _q31);
14320 : 653064 : if (tree_swap_operands_p (_q30, _q31))
14321 : 18723 : std::swap (_q30, _q31);
14322 : 653064 : switch (TREE_CODE (_q30))
14323 : : {
14324 : 653064 : case SSA_NAME:
14325 : 653064 : if (gimple *_d2 = get_def (valueize, _q30))
14326 : : {
14327 : 615562 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14328 : 283288 : switch (gimple_assign_rhs_code (_a2))
14329 : : {
14330 : 18575 : case MINUS_EXPR:
14331 : 18575 : {
14332 : 18575 : tree _q40 = gimple_assign_rhs1 (_a2);
14333 : 18575 : _q40 = do_valueize (valueize, _q40);
14334 : 18575 : tree _q41 = gimple_assign_rhs2 (_a2);
14335 : 18575 : _q41 = do_valueize (valueize, _q41);
14336 : 18575 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
14337 : : {
14338 : 685 : if (integer_minus_onep (_q31))
14339 : : {
14340 : 523 : {
14341 : 523 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q41 };
14342 : 523 : if (gimple_simplify_366 (res_op, seq, valueize, type, captures, LT_EXPR))
14343 : 0 : return true;
14344 : : }
14345 : : }
14346 : : }
14347 : : break;
14348 : : }
14349 : : default:;
14350 : : }
14351 : : }
14352 : : break;
14353 : : default:;
14354 : : }
14355 : 26295672 : break;
14356 : : }
14357 : : default:;
14358 : : }
14359 : : }
14360 : : break;
14361 : 26295672 : default:;
14362 : : }
14363 : 26295672 : switch (TREE_CODE (_p0))
14364 : : {
14365 : 25599407 : case SSA_NAME:
14366 : 25599407 : if (gimple *_d1 = get_def (valueize, _p0))
14367 : : {
14368 : 8880144 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14369 : 10482408 : switch (gimple_assign_rhs_code (_a1))
14370 : : {
14371 : 6405 : case REALPART_EXPR:
14372 : 6405 : {
14373 : 6405 : tree _q20 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 0);
14374 : 6405 : if ((TREE_CODE (_q20) == SSA_NAME
14375 : 6405 : || is_gimple_min_invariant (_q20)))
14376 : : {
14377 : 5869 : _q20 = do_valueize (valueize, _q20);
14378 : 5869 : switch (TREE_CODE (_q20))
14379 : : {
14380 : 5869 : case SSA_NAME:
14381 : 5869 : if (gimple *_d2 = get_def (valueize, _q20))
14382 : : {
14383 : 5864 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
14384 : 1143 : switch (gimple_call_combined_fn (_c2))
14385 : : {
14386 : 4 : case CFN_SUB_OVERFLOW:
14387 : 4 : if (gimple_call_num_args (_c2) == 2)
14388 : : {
14389 : 4 : tree _q30 = gimple_call_arg (_c2, 0);
14390 : 4 : _q30 = do_valueize (valueize, _q30);
14391 : 4 : tree _q31 = gimple_call_arg (_c2, 1);
14392 : 4 : _q31 = do_valueize (valueize, _q31);
14393 : 4 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
14394 : : {
14395 : 4 : {
14396 : 4 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _q31 };
14397 : 4 : if (gimple_simplify_367 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR))
14398 : 2 : return true;
14399 : : }
14400 : : }
14401 : : }
14402 : : break;
14403 : : default:;
14404 : : }
14405 : : }
14406 : : break;
14407 : : default:;
14408 : : }
14409 : : }
14410 : : break;
14411 : : }
14412 : : default:;
14413 : : }
14414 : : }
14415 : : break;
14416 : 26295670 : default:;
14417 : : }
14418 : 26295670 : switch (TREE_CODE (_p1))
14419 : : {
14420 : 9388274 : case SSA_NAME:
14421 : 9388274 : if (gimple *_d1 = get_def (valueize, _p1))
14422 : : {
14423 : 2999229 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14424 : 3225647 : switch (gimple_assign_rhs_code (_a1))
14425 : : {
14426 : 248 : case REALPART_EXPR:
14427 : 248 : {
14428 : 248 : tree _q30 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 0);
14429 : 248 : if ((TREE_CODE (_q30) == SSA_NAME
14430 : 248 : || is_gimple_min_invariant (_q30)))
14431 : : {
14432 : 248 : _q30 = do_valueize (valueize, _q30);
14433 : 248 : switch (TREE_CODE (_q30))
14434 : : {
14435 : 248 : case SSA_NAME:
14436 : 248 : if (gimple *_d2 = get_def (valueize, _q30))
14437 : : {
14438 : 248 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
14439 : 248 : switch (gimple_call_combined_fn (_c2))
14440 : : {
14441 : 62 : case CFN_ADD_OVERFLOW:
14442 : 62 : if (gimple_call_num_args (_c2) == 2)
14443 : : {
14444 : 62 : tree _q40 = gimple_call_arg (_c2, 0);
14445 : 62 : _q40 = do_valueize (valueize, _q40);
14446 : 62 : tree _q41 = gimple_call_arg (_c2, 1);
14447 : 62 : _q41 = do_valueize (valueize, _q41);
14448 : 62 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
14449 : : {
14450 : 11 : {
14451 : 11 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q41 };
14452 : 11 : if (gimple_simplify_368 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR))
14453 : 0 : return true;
14454 : : }
14455 : : }
14456 : 62 : if ((_q41 == _p0 && ! TREE_SIDE_EFFECTS (_q41)) || (operand_equal_p (_q41, _p0, 0) && types_match (_q41, _p0)))
14457 : : {
14458 : 2 : {
14459 : 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q40 };
14460 : 2 : if (gimple_simplify_368 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR))
14461 : 2 : return true;
14462 : : }
14463 : : }
14464 : : }
14465 : : break;
14466 : : default:;
14467 : : }
14468 : : }
14469 : : break;
14470 : : default:;
14471 : : }
14472 : : }
14473 : : break;
14474 : : }
14475 : 9017 : case TRUNC_DIV_EXPR:
14476 : 9017 : {
14477 : 9017 : tree _q30 = gimple_assign_rhs1 (_a1);
14478 : 9017 : _q30 = do_valueize (valueize, _q30);
14479 : 9017 : tree _q31 = gimple_assign_rhs2 (_a1);
14480 : 9017 : _q31 = do_valueize (valueize, _q31);
14481 : 9017 : if (integer_all_onesp (_q30))
14482 : : {
14483 : 929 : {
14484 : 929 : tree captures[3] ATTRIBUTE_UNUSED = { _p1, _q31, _p0 };
14485 : 929 : if (gimple_simplify_369 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR))
14486 : 2 : return true;
14487 : : }
14488 : : }
14489 : : break;
14490 : : }
14491 : : default:;
14492 : : }
14493 : : }
14494 : : break;
14495 : 26295666 : default:;
14496 : : }
14497 : 26295666 : switch (TREE_CODE (_p0))
14498 : : {
14499 : 25599401 : case SSA_NAME:
14500 : 25599401 : if (gimple *_d1 = get_def (valueize, _p0))
14501 : : {
14502 : 8880140 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14503 : 10482400 : switch (gimple_assign_rhs_code (_a1))
14504 : : {
14505 : 104913 : case MULT_EXPR:
14506 : 104913 : {
14507 : 104913 : tree _q20 = gimple_assign_rhs1 (_a1);
14508 : 104913 : _q20 = do_valueize (valueize, _q20);
14509 : 104913 : tree _q21 = gimple_assign_rhs2 (_a1);
14510 : 104913 : _q21 = do_valueize (valueize, _q21);
14511 : 104913 : if (tree_swap_operands_p (_q20, _q21))
14512 : 1880 : std::swap (_q20, _q21);
14513 : 104913 : switch (TREE_CODE (_q21))
14514 : : {
14515 : 6282 : case REAL_CST:
14516 : 6282 : {
14517 : 6282 : switch (TREE_CODE (_p1))
14518 : : {
14519 : 310 : case REAL_CST:
14520 : 310 : {
14521 : 310 : {
14522 : 310 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
14523 : 310 : if (gimple_simplify_359 (res_op, seq, valueize, type, captures, GT_EXPR, LT_EXPR))
14524 : 24 : return true;
14525 : : }
14526 : 286 : break;
14527 : : }
14528 : : default:;
14529 : : }
14530 : : break;
14531 : : }
14532 : : default:;
14533 : : }
14534 : 26515362 : break;
14535 : : }
14536 : 856020 : case PLUS_EXPR:
14537 : 856020 : {
14538 : 856020 : tree _q20 = gimple_assign_rhs1 (_a1);
14539 : 856020 : _q20 = do_valueize (valueize, _q20);
14540 : 856020 : tree _q21 = gimple_assign_rhs2 (_a1);
14541 : 856020 : _q21 = do_valueize (valueize, _q21);
14542 : 856020 : if (tree_swap_operands_p (_q20, _q21))
14543 : 18692 : std::swap (_q20, _q21);
14544 : 856020 : switch (TREE_CODE (_q21))
14545 : : {
14546 : 660526 : case INTEGER_CST:
14547 : 660526 : {
14548 : 660526 : switch (TREE_CODE (_p1))
14549 : : {
14550 : 454253 : case INTEGER_CST:
14551 : 454253 : {
14552 : 454253 : {
14553 : 454253 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
14554 : 454253 : if (gimple_simplify_360 (res_op, seq, valueize, type, captures, PLUS_EXPR, MINUS_EXPR, GT_EXPR))
14555 : 9547 : return true;
14556 : : }
14557 : 444706 : break;
14558 : : }
14559 : : default:;
14560 : : }
14561 : : break;
14562 : : }
14563 : : default:;
14564 : : }
14565 : 26515362 : break;
14566 : : }
14567 : 177540 : case MINUS_EXPR:
14568 : 177540 : {
14569 : 177540 : tree _q20 = gimple_assign_rhs1 (_a1);
14570 : 177540 : _q20 = do_valueize (valueize, _q20);
14571 : 177540 : tree _q21 = gimple_assign_rhs2 (_a1);
14572 : 177540 : _q21 = do_valueize (valueize, _q21);
14573 : 177540 : switch (TREE_CODE (_q21))
14574 : : {
14575 : 411 : case INTEGER_CST:
14576 : 411 : {
14577 : 411 : switch (TREE_CODE (_p1))
14578 : : {
14579 : 265 : case INTEGER_CST:
14580 : 265 : {
14581 : 265 : {
14582 : 265 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
14583 : 265 : if (gimple_simplify_360 (res_op, seq, valueize, type, captures, MINUS_EXPR, PLUS_EXPR, GT_EXPR))
14584 : 9 : return true;
14585 : : }
14586 : 256 : break;
14587 : : }
14588 : : default:;
14589 : : }
14590 : : break;
14591 : : }
14592 : : default:;
14593 : : }
14594 : : break;
14595 : : }
14596 : : default:;
14597 : : }
14598 : 2248380 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
14599 : 312476 : switch (gimple_call_combined_fn (_c1))
14600 : : {
14601 : 8 : case CFN_BUILT_IN_CTZ:
14602 : 8 : if (gimple_call_num_args (_c1) == 1)
14603 : : {
14604 : 8 : tree _q20 = gimple_call_arg (_c1, 0);
14605 : 8 : _q20 = do_valueize (valueize, _q20);
14606 : 8 : switch (TREE_CODE (_p1))
14607 : : {
14608 : 0 : case INTEGER_CST:
14609 : 0 : {
14610 : 0 : {
14611 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14612 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, GT_EXPR, EQ_EXPR, CFN_BUILT_IN_CTZ))
14613 : 0 : return true;
14614 : : }
14615 : 0 : break;
14616 : : }
14617 : : default:;
14618 : : }
14619 : : }
14620 : : break;
14621 : 16 : case CFN_BUILT_IN_FFS:
14622 : 16 : if (gimple_call_num_args (_c1) == 1)
14623 : : {
14624 : 16 : tree _q20 = gimple_call_arg (_c1, 0);
14625 : 16 : _q20 = do_valueize (valueize, _q20);
14626 : 16 : switch (TREE_CODE (_p1))
14627 : : {
14628 : 16 : case INTEGER_CST:
14629 : 16 : {
14630 : 16 : {
14631 : 16 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14632 : 16 : if (gimple_simplify_370 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, EQ_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_FFS))
14633 : 6 : return true;
14634 : : }
14635 : 10 : break;
14636 : : }
14637 : : default:;
14638 : : }
14639 : : }
14640 : : break;
14641 : 0 : case CFN_BUILT_IN_FFSIMAX:
14642 : 0 : if (gimple_call_num_args (_c1) == 1)
14643 : : {
14644 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14645 : 0 : _q20 = do_valueize (valueize, _q20);
14646 : 0 : switch (TREE_CODE (_p1))
14647 : : {
14648 : 0 : case INTEGER_CST:
14649 : 0 : {
14650 : 0 : {
14651 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14652 : 0 : if (gimple_simplify_370 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, EQ_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_FFSIMAX))
14653 : 0 : return true;
14654 : : }
14655 : 0 : break;
14656 : : }
14657 : : default:;
14658 : : }
14659 : : }
14660 : : break;
14661 : 219 : case CFN_BUILT_IN_POPCOUNT:
14662 : 219 : if (gimple_call_num_args (_c1) == 1)
14663 : : {
14664 : 219 : tree _q20 = gimple_call_arg (_c1, 0);
14665 : 219 : _q20 = do_valueize (valueize, _q20);
14666 : 219 : if (integer_zerop (_p1))
14667 : : {
14668 : 0 : {
14669 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
14670 : 0 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, CFN_BUILT_IN_POPCOUNT))
14671 : 0 : return true;
14672 : : }
14673 : : }
14674 : : }
14675 : : break;
14676 : 0 : case CFN_BUILT_IN_CTZL:
14677 : 0 : if (gimple_call_num_args (_c1) == 1)
14678 : : {
14679 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14680 : 0 : _q20 = do_valueize (valueize, _q20);
14681 : 0 : switch (TREE_CODE (_p1))
14682 : : {
14683 : 0 : case INTEGER_CST:
14684 : 0 : {
14685 : 0 : {
14686 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14687 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, GT_EXPR, EQ_EXPR, CFN_BUILT_IN_CTZL))
14688 : 0 : return true;
14689 : : }
14690 : 0 : break;
14691 : : }
14692 : : default:;
14693 : : }
14694 : : }
14695 : : break;
14696 : 12 : case CFN_BUILT_IN_FFSL:
14697 : 12 : if (gimple_call_num_args (_c1) == 1)
14698 : : {
14699 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
14700 : 12 : _q20 = do_valueize (valueize, _q20);
14701 : 12 : switch (TREE_CODE (_p1))
14702 : : {
14703 : 12 : case INTEGER_CST:
14704 : 12 : {
14705 : 12 : {
14706 : 12 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14707 : 12 : if (gimple_simplify_370 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, EQ_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_FFSL))
14708 : 4 : return true;
14709 : : }
14710 : 8 : break;
14711 : : }
14712 : : default:;
14713 : : }
14714 : : }
14715 : : break;
14716 : 11 : case CFN_BUILT_IN_POPCOUNTLL:
14717 : 11 : if (gimple_call_num_args (_c1) == 1)
14718 : : {
14719 : 11 : tree _q20 = gimple_call_arg (_c1, 0);
14720 : 11 : _q20 = do_valueize (valueize, _q20);
14721 : 11 : if (integer_zerop (_p1))
14722 : : {
14723 : 0 : {
14724 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
14725 : 0 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, CFN_BUILT_IN_POPCOUNTLL))
14726 : 0 : return true;
14727 : : }
14728 : : }
14729 : : }
14730 : : break;
14731 : 0 : case CFN_BUILT_IN_CTZIMAX:
14732 : 0 : if (gimple_call_num_args (_c1) == 1)
14733 : : {
14734 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14735 : 0 : _q20 = do_valueize (valueize, _q20);
14736 : 0 : switch (TREE_CODE (_p1))
14737 : : {
14738 : 0 : case INTEGER_CST:
14739 : 0 : {
14740 : 0 : {
14741 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14742 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, GT_EXPR, EQ_EXPR, CFN_BUILT_IN_CTZIMAX))
14743 : 0 : return true;
14744 : : }
14745 : 0 : break;
14746 : : }
14747 : : default:;
14748 : : }
14749 : : }
14750 : : break;
14751 : 0 : case CFN_POPCOUNT:
14752 : 0 : if (gimple_call_num_args (_c1) == 1)
14753 : : {
14754 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14755 : 0 : _q20 = do_valueize (valueize, _q20);
14756 : 0 : if (integer_zerop (_p1))
14757 : : {
14758 : 0 : {
14759 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
14760 : 0 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, CFN_POPCOUNT))
14761 : 0 : return true;
14762 : : }
14763 : : }
14764 : : }
14765 : : break;
14766 : 0 : case CFN_CTZ:
14767 : 0 : if (gimple_call_num_args (_c1) == 2)
14768 : : {
14769 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14770 : 0 : _q20 = do_valueize (valueize, _q20);
14771 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
14772 : 0 : _q21 = do_valueize (valueize, _q21);
14773 : 0 : switch (TREE_CODE (_p1))
14774 : : {
14775 : 0 : case INTEGER_CST:
14776 : 0 : {
14777 : 0 : {
14778 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
14779 : 0 : if (gimple_simplify_362 (res_op, seq, valueize, type, captures, GT_EXPR, EQ_EXPR))
14780 : 0 : return true;
14781 : : }
14782 : 0 : break;
14783 : : }
14784 : : default:;
14785 : : }
14786 : : }
14787 : 0 : if (gimple_call_num_args (_c1) == 1)
14788 : : {
14789 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14790 : 0 : _q20 = do_valueize (valueize, _q20);
14791 : 0 : switch (TREE_CODE (_p1))
14792 : : {
14793 : 0 : case INTEGER_CST:
14794 : 0 : {
14795 : 0 : {
14796 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14797 : 0 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, GT_EXPR, EQ_EXPR, CFN_CTZ))
14798 : 0 : return true;
14799 : : }
14800 : 0 : break;
14801 : : }
14802 : : default:;
14803 : : }
14804 : : }
14805 : : break;
14806 : 0 : case CFN_FFS:
14807 : 0 : if (gimple_call_num_args (_c1) == 1)
14808 : : {
14809 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14810 : 0 : _q20 = do_valueize (valueize, _q20);
14811 : 0 : switch (TREE_CODE (_p1))
14812 : : {
14813 : 0 : case INTEGER_CST:
14814 : 0 : {
14815 : 0 : {
14816 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14817 : 0 : if (gimple_simplify_370 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, EQ_EXPR, BIT_AND_EXPR, CFN_FFS))
14818 : 0 : return true;
14819 : : }
14820 : 0 : break;
14821 : : }
14822 : : default:;
14823 : : }
14824 : : }
14825 : : break;
14826 : 0 : case CFN_BUILT_IN_POPCOUNTIMAX:
14827 : 0 : if (gimple_call_num_args (_c1) == 1)
14828 : : {
14829 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14830 : 0 : _q20 = do_valueize (valueize, _q20);
14831 : 0 : if (integer_zerop (_p1))
14832 : : {
14833 : 0 : {
14834 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
14835 : 0 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, CFN_BUILT_IN_POPCOUNTIMAX))
14836 : 0 : return true;
14837 : : }
14838 : : }
14839 : : }
14840 : : break;
14841 : 20 : case CFN_BUILT_IN_POPCOUNTL:
14842 : 20 : if (gimple_call_num_args (_c1) == 1)
14843 : : {
14844 : 20 : tree _q20 = gimple_call_arg (_c1, 0);
14845 : 20 : _q20 = do_valueize (valueize, _q20);
14846 : 20 : if (integer_zerop (_p1))
14847 : : {
14848 : 0 : {
14849 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
14850 : 0 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, CFN_BUILT_IN_POPCOUNTL))
14851 : 0 : return true;
14852 : : }
14853 : : }
14854 : : }
14855 : : break;
14856 : 13 : case CFN_BUILT_IN_CTZLL:
14857 : 13 : if (gimple_call_num_args (_c1) == 1)
14858 : : {
14859 : 13 : tree _q20 = gimple_call_arg (_c1, 0);
14860 : 13 : _q20 = do_valueize (valueize, _q20);
14861 : 13 : switch (TREE_CODE (_p1))
14862 : : {
14863 : 5 : case INTEGER_CST:
14864 : 5 : {
14865 : 5 : {
14866 : 5 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14867 : 5 : if (gimple_simplify_361 (res_op, seq, valueize, type, captures, GT_EXPR, EQ_EXPR, CFN_BUILT_IN_CTZLL))
14868 : 0 : return true;
14869 : : }
14870 : 5 : break;
14871 : : }
14872 : : default:;
14873 : : }
14874 : : }
14875 : : break;
14876 : 12 : case CFN_BUILT_IN_FFSLL:
14877 : 12 : if (gimple_call_num_args (_c1) == 1)
14878 : : {
14879 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
14880 : 12 : _q20 = do_valueize (valueize, _q20);
14881 : 12 : switch (TREE_CODE (_p1))
14882 : : {
14883 : 12 : case INTEGER_CST:
14884 : 12 : {
14885 : 12 : {
14886 : 12 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
14887 : 12 : if (gimple_simplify_370 (res_op, seq, valueize, type, captures, GT_EXPR, NE_EXPR, EQ_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_FFSLL))
14888 : 4 : return true;
14889 : : }
14890 : 8 : break;
14891 : : }
14892 : : default:;
14893 : : }
14894 : : }
14895 : : break;
14896 : : default:;
14897 : : }
14898 : : }
14899 : : break;
14900 : : default:;
14901 : : }
14902 : : return false;
14903 : : }
14904 : :
14905 : : bool
14906 : 4145 : gimple_simplify_CFN_BUILT_IN_POWI (gimple_match_op *res_op, gimple_seq *seq,
14907 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
14908 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
14909 : : {
14910 : 4145 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
14911 : 4145 : switch (TREE_CODE (_p0))
14912 : : {
14913 : 3130 : case SSA_NAME:
14914 : 3130 : if (gimple *_d1 = get_def (valueize, _p0))
14915 : : {
14916 : 1737 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14917 : 2592 : switch (gimple_assign_rhs_code (_a1))
14918 : : {
14919 : 0 : case NEGATE_EXPR:
14920 : 0 : {
14921 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
14922 : 0 : _q20 = do_valueize (valueize, _q20);
14923 : 0 : switch (TREE_CODE (_p1))
14924 : : {
14925 : 0 : case INTEGER_CST:
14926 : 0 : {
14927 : 0 : {
14928 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
14929 : 0 : if ((wi::to_wide (captures[1]) & 1) == 0
14930 : : )
14931 : : {
14932 : 0 : gimple_seq *lseq = seq;
14933 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2045;
14934 : 0 : {
14935 : 0 : res_op->set_op (CFN_BUILT_IN_POWI, type, 2);
14936 : 0 : res_op->ops[0] = captures[0];
14937 : 0 : res_op->ops[1] = captures[1];
14938 : 0 : res_op->resimplify (lseq, valueize);
14939 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1052, __FILE__, __LINE__, true);
14940 : 0 : return true;
14941 : : }
14942 : 0 : next_after_fail2045:;
14943 : : }
14944 : : }
14945 : 0 : break;
14946 : : }
14947 : : default:;
14948 : : }
14949 : : break;
14950 : : }
14951 : 0 : case ABS_EXPR:
14952 : 0 : {
14953 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
14954 : 0 : _q20 = do_valueize (valueize, _q20);
14955 : 0 : switch (TREE_CODE (_p1))
14956 : : {
14957 : 0 : case INTEGER_CST:
14958 : 0 : {
14959 : 0 : {
14960 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
14961 : 0 : if ((wi::to_wide (captures[1]) & 1) == 0
14962 : : )
14963 : : {
14964 : 0 : gimple_seq *lseq = seq;
14965 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2046;
14966 : 0 : {
14967 : 0 : res_op->set_op (CFN_BUILT_IN_POWI, type, 2);
14968 : 0 : res_op->ops[0] = captures[0];
14969 : 0 : res_op->ops[1] = captures[1];
14970 : 0 : res_op->resimplify (lseq, valueize);
14971 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1052, __FILE__, __LINE__, true);
14972 : 0 : return true;
14973 : : }
14974 : 0 : next_after_fail2046:;
14975 : : }
14976 : : }
14977 : 0 : break;
14978 : : }
14979 : : default:;
14980 : : }
14981 : : break;
14982 : : }
14983 : : default:;
14984 : : }
14985 : 266 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
14986 : 70 : switch (gimple_call_combined_fn (_c1))
14987 : : {
14988 : 0 : case CFN_BUILT_IN_COPYSIGN:
14989 : 0 : if (gimple_call_num_args (_c1) == 2)
14990 : : {
14991 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
14992 : 0 : _q20 = do_valueize (valueize, _q20);
14993 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
14994 : 0 : _q21 = do_valueize (valueize, _q21);
14995 : 0 : switch (TREE_CODE (_p1))
14996 : : {
14997 : 0 : case INTEGER_CST:
14998 : 0 : {
14999 : 0 : {
15000 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15001 : 0 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGN;
15002 : 0 : if ((wi::to_wide (captures[2]) & 1) == 0
15003 : : )
15004 : : {
15005 : 0 : gimple_seq *lseq = seq;
15006 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2047;
15007 : 0 : {
15008 : 0 : res_op->set_op (CFN_BUILT_IN_POWI, type, 2);
15009 : 0 : res_op->ops[0] = captures[0];
15010 : 0 : res_op->ops[1] = captures[2];
15011 : 0 : res_op->resimplify (lseq, valueize);
15012 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1053, __FILE__, __LINE__, true);
15013 : 0 : return true;
15014 : : }
15015 : 0 : next_after_fail2047:;
15016 : : }
15017 : : }
15018 : 0 : break;
15019 : : }
15020 : : default:;
15021 : : }
15022 : : }
15023 : : break;
15024 : 0 : case CFN_BUILT_IN_COPYSIGNF:
15025 : 0 : if (gimple_call_num_args (_c1) == 2)
15026 : : {
15027 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
15028 : 0 : _q20 = do_valueize (valueize, _q20);
15029 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
15030 : 0 : _q21 = do_valueize (valueize, _q21);
15031 : 0 : switch (TREE_CODE (_p1))
15032 : : {
15033 : 0 : case INTEGER_CST:
15034 : 0 : {
15035 : 0 : {
15036 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15037 : 0 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGNF;
15038 : 0 : if ((wi::to_wide (captures[2]) & 1) == 0
15039 : : )
15040 : : {
15041 : 0 : gimple_seq *lseq = seq;
15042 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2048;
15043 : 0 : {
15044 : 0 : res_op->set_op (CFN_BUILT_IN_POWI, type, 2);
15045 : 0 : res_op->ops[0] = captures[0];
15046 : 0 : res_op->ops[1] = captures[2];
15047 : 0 : res_op->resimplify (lseq, valueize);
15048 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1053, __FILE__, __LINE__, true);
15049 : 0 : return true;
15050 : : }
15051 : 0 : next_after_fail2048:;
15052 : : }
15053 : : }
15054 : 0 : break;
15055 : : }
15056 : : default:;
15057 : : }
15058 : : }
15059 : : break;
15060 : 0 : case CFN_BUILT_IN_COPYSIGNL:
15061 : 0 : if (gimple_call_num_args (_c1) == 2)
15062 : : {
15063 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
15064 : 0 : _q20 = do_valueize (valueize, _q20);
15065 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
15066 : 0 : _q21 = do_valueize (valueize, _q21);
15067 : 0 : switch (TREE_CODE (_p1))
15068 : : {
15069 : 0 : case INTEGER_CST:
15070 : 0 : {
15071 : 0 : {
15072 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15073 : 0 : const combined_fn copysigns = CFN_BUILT_IN_COPYSIGNL;
15074 : 0 : if ((wi::to_wide (captures[2]) & 1) == 0
15075 : : )
15076 : : {
15077 : 0 : gimple_seq *lseq = seq;
15078 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2049;
15079 : 0 : {
15080 : 0 : res_op->set_op (CFN_BUILT_IN_POWI, type, 2);
15081 : 0 : res_op->ops[0] = captures[0];
15082 : 0 : res_op->ops[1] = captures[2];
15083 : 0 : res_op->resimplify (lseq, valueize);
15084 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1053, __FILE__, __LINE__, true);
15085 : 0 : return true;
15086 : : }
15087 : 0 : next_after_fail2049:;
15088 : : }
15089 : : }
15090 : 0 : break;
15091 : : }
15092 : : default:;
15093 : : }
15094 : : }
15095 : : break;
15096 : 0 : case CFN_COPYSIGN:
15097 : 0 : if (gimple_call_num_args (_c1) == 2)
15098 : : {
15099 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
15100 : 0 : _q20 = do_valueize (valueize, _q20);
15101 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
15102 : 0 : _q21 = do_valueize (valueize, _q21);
15103 : 0 : switch (TREE_CODE (_p1))
15104 : : {
15105 : 0 : case INTEGER_CST:
15106 : 0 : {
15107 : 0 : {
15108 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15109 : 0 : const combined_fn copysigns = CFN_COPYSIGN;
15110 : 0 : if ((wi::to_wide (captures[2]) & 1) == 0
15111 : : )
15112 : : {
15113 : 0 : gimple_seq *lseq = seq;
15114 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2050;
15115 : 0 : {
15116 : 0 : res_op->set_op (CFN_BUILT_IN_POWI, type, 2);
15117 : 0 : res_op->ops[0] = captures[0];
15118 : 0 : res_op->ops[1] = captures[2];
15119 : 0 : res_op->resimplify (lseq, valueize);
15120 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1053, __FILE__, __LINE__, true);
15121 : 0 : return true;
15122 : : }
15123 : 0 : next_after_fail2050:;
15124 : : }
15125 : : }
15126 : 0 : break;
15127 : : }
15128 : : default:;
15129 : : }
15130 : : }
15131 : : break;
15132 : : default:;
15133 : : }
15134 : : }
15135 : : break;
15136 : 4145 : default:;
15137 : : }
15138 : 4145 : if (real_onep (_p0))
15139 : : {
15140 : 1 : {
15141 : 1 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15142 : 1 : if (gimple_simplify_404 (res_op, seq, valueize, type, captures))
15143 : 1 : return true;
15144 : : }
15145 : : }
15146 : 4144 : switch (TREE_CODE (_p1))
15147 : : {
15148 : 850 : case INTEGER_CST:
15149 : 850 : {
15150 : 850 : {
15151 : 850 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15152 : 850 : if (wi::to_wide (captures[1]) == 0
15153 : : )
15154 : : {
15155 : 140 : gimple_seq *lseq = seq;
15156 : 140 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2051;
15157 : 140 : {
15158 : 140 : tree tem;
15159 : 140 : tem = build_real (type, dconst1);
15160 : 140 : res_op->set_value (tem);
15161 : 140 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1054, __FILE__, __LINE__, true);
15162 : 140 : return true;
15163 : : }
15164 : 0 : next_after_fail2051:;
15165 : : }
15166 : : else
15167 : : {
15168 : 710 : if (wi::to_wide (captures[1]) == 1
15169 : : )
15170 : : {
15171 : 105 : gimple_seq *lseq = seq;
15172 : 105 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2052;
15173 : 105 : {
15174 : 105 : tree tem;
15175 : 105 : tem = captures[0];
15176 : 105 : res_op->set_value (tem);
15177 : 105 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1055, __FILE__, __LINE__, true);
15178 : 105 : return true;
15179 : : }
15180 : 0 : next_after_fail2052:;
15181 : : }
15182 : : else
15183 : : {
15184 : 605 : if (wi::to_wide (captures[1]) == -1
15185 : : )
15186 : : {
15187 : 2 : gimple_seq *lseq = seq;
15188 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2053;
15189 : 2 : {
15190 : 2 : res_op->set_op (RDIV_EXPR, type, 2);
15191 : 2 : res_op->ops[0] = build_real (type, dconst1);
15192 : 2 : res_op->ops[1] = captures[0];
15193 : 2 : res_op->resimplify (lseq, valueize);
15194 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1056, __FILE__, __LINE__, true);
15195 : 2 : return true;
15196 : : }
15197 : 0 : next_after_fail2053:;
15198 : : }
15199 : : }
15200 : : }
15201 : : }
15202 : 603 : break;
15203 : : }
15204 : : default:;
15205 : : }
15206 : : return false;
15207 : : }
15208 : :
15209 : : bool
15210 : 0 : gimple_simplify_CFN_HYPOT (gimple_match_op *res_op, gimple_seq *seq,
15211 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
15212 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
15213 : : {
15214 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
15215 : 0 : switch (TREE_CODE (_p0))
15216 : : {
15217 : 0 : case SSA_NAME:
15218 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
15219 : : {
15220 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
15221 : 0 : switch (gimple_assign_rhs_code (_a1))
15222 : : {
15223 : 0 : case NEGATE_EXPR:
15224 : 0 : {
15225 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
15226 : 0 : _q20 = do_valueize (valueize, _q20);
15227 : 0 : {
15228 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
15229 : 0 : const combined_fn hypots = CFN_HYPOT;
15230 : 0 : gimple_seq *lseq = seq;
15231 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2075;
15232 : 0 : {
15233 : 0 : res_op->set_op (hypots, type, 2);
15234 : 0 : res_op->ops[0] = captures[0];
15235 : 0 : res_op->ops[1] = captures[1];
15236 : 0 : res_op->resimplify (lseq, valueize);
15237 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1057, __FILE__, __LINE__, true);
15238 : 0 : return true;
15239 : : }
15240 : 0 : next_after_fail2075:;
15241 : : }
15242 : 0 : break;
15243 : : }
15244 : 0 : case ABS_EXPR:
15245 : 0 : {
15246 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
15247 : 0 : _q20 = do_valueize (valueize, _q20);
15248 : 0 : {
15249 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
15250 : 0 : const combined_fn hypots = CFN_HYPOT;
15251 : 0 : gimple_seq *lseq = seq;
15252 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2076;
15253 : 0 : {
15254 : 0 : res_op->set_op (hypots, type, 2);
15255 : 0 : res_op->ops[0] = captures[0];
15256 : 0 : res_op->ops[1] = captures[1];
15257 : 0 : res_op->resimplify (lseq, valueize);
15258 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1057, __FILE__, __LINE__, true);
15259 : 0 : return true;
15260 : : }
15261 : 0 : next_after_fail2076:;
15262 : : }
15263 : 0 : break;
15264 : : }
15265 : : default:;
15266 : : }
15267 : : }
15268 : : break;
15269 : 0 : default:;
15270 : : }
15271 : 0 : switch (TREE_CODE (_p1))
15272 : : {
15273 : 0 : case SSA_NAME:
15274 : 0 : if (gimple *_d1 = get_def (valueize, _p1))
15275 : : {
15276 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
15277 : 0 : switch (gimple_assign_rhs_code (_a1))
15278 : : {
15279 : 0 : case NEGATE_EXPR:
15280 : 0 : {
15281 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
15282 : 0 : _q30 = do_valueize (valueize, _q30);
15283 : 0 : {
15284 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
15285 : 0 : const combined_fn hypots = CFN_HYPOT;
15286 : 0 : gimple_seq *lseq = seq;
15287 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2077;
15288 : 0 : {
15289 : 0 : res_op->set_op (hypots, type, 2);
15290 : 0 : res_op->ops[0] = captures[0];
15291 : 0 : res_op->ops[1] = captures[1];
15292 : 0 : res_op->resimplify (lseq, valueize);
15293 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1058, __FILE__, __LINE__, true);
15294 : 0 : return true;
15295 : : }
15296 : 0 : next_after_fail2077:;
15297 : : }
15298 : 0 : break;
15299 : : }
15300 : 0 : case ABS_EXPR:
15301 : 0 : {
15302 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
15303 : 0 : _q30 = do_valueize (valueize, _q30);
15304 : 0 : {
15305 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
15306 : 0 : const combined_fn hypots = CFN_HYPOT;
15307 : 0 : gimple_seq *lseq = seq;
15308 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2078;
15309 : 0 : {
15310 : 0 : res_op->set_op (hypots, type, 2);
15311 : 0 : res_op->ops[0] = captures[0];
15312 : 0 : res_op->ops[1] = captures[1];
15313 : 0 : res_op->resimplify (lseq, valueize);
15314 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1058, __FILE__, __LINE__, true);
15315 : 0 : return true;
15316 : : }
15317 : 0 : next_after_fail2078:;
15318 : : }
15319 : 0 : break;
15320 : : }
15321 : : default:;
15322 : : }
15323 : : }
15324 : : break;
15325 : 0 : default:;
15326 : : }
15327 : 0 : switch (TREE_CODE (_p0))
15328 : : {
15329 : 0 : case SSA_NAME:
15330 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
15331 : : {
15332 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
15333 : 0 : switch (gimple_call_combined_fn (_c1))
15334 : : {
15335 : 0 : case CFN_BUILT_IN_COPYSIGN:
15336 : 0 : if (gimple_call_num_args (_c1) == 2)
15337 : : {
15338 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
15339 : 0 : _q20 = do_valueize (valueize, _q20);
15340 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
15341 : 0 : _q21 = do_valueize (valueize, _q21);
15342 : 0 : {
15343 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15344 : 0 : if (gimple_simplify_405 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGN, CFN_HYPOT))
15345 : 0 : return true;
15346 : : }
15347 : : }
15348 : : break;
15349 : 0 : case CFN_BUILT_IN_COPYSIGNF:
15350 : 0 : if (gimple_call_num_args (_c1) == 2)
15351 : : {
15352 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
15353 : 0 : _q20 = do_valueize (valueize, _q20);
15354 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
15355 : 0 : _q21 = do_valueize (valueize, _q21);
15356 : 0 : {
15357 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15358 : 0 : if (gimple_simplify_405 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF, CFN_HYPOT))
15359 : 0 : return true;
15360 : : }
15361 : : }
15362 : : break;
15363 : 0 : case CFN_BUILT_IN_COPYSIGNL:
15364 : 0 : if (gimple_call_num_args (_c1) == 2)
15365 : : {
15366 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
15367 : 0 : _q20 = do_valueize (valueize, _q20);
15368 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
15369 : 0 : _q21 = do_valueize (valueize, _q21);
15370 : 0 : {
15371 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15372 : 0 : if (gimple_simplify_405 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNL, CFN_HYPOT))
15373 : 0 : return true;
15374 : : }
15375 : : }
15376 : : break;
15377 : 0 : case CFN_COPYSIGN:
15378 : 0 : if (gimple_call_num_args (_c1) == 2)
15379 : : {
15380 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
15381 : 0 : _q20 = do_valueize (valueize, _q20);
15382 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
15383 : 0 : _q21 = do_valueize (valueize, _q21);
15384 : 0 : {
15385 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15386 : 0 : if (gimple_simplify_405 (res_op, seq, valueize, type, captures, CFN_COPYSIGN, CFN_HYPOT))
15387 : 0 : return true;
15388 : : }
15389 : : }
15390 : : break;
15391 : : default:;
15392 : : }
15393 : : }
15394 : : break;
15395 : 0 : default:;
15396 : : }
15397 : 0 : switch (TREE_CODE (_p1))
15398 : : {
15399 : 0 : case SSA_NAME:
15400 : 0 : if (gimple *_d1 = get_def (valueize, _p1))
15401 : : {
15402 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
15403 : 0 : switch (gimple_call_combined_fn (_c1))
15404 : : {
15405 : 0 : case CFN_BUILT_IN_COPYSIGN:
15406 : 0 : if (gimple_call_num_args (_c1) == 2)
15407 : : {
15408 : 0 : tree _q30 = gimple_call_arg (_c1, 0);
15409 : 0 : _q30 = do_valueize (valueize, _q30);
15410 : 0 : tree _q31 = gimple_call_arg (_c1, 1);
15411 : 0 : _q31 = do_valueize (valueize, _q31);
15412 : 0 : {
15413 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q30, _q31 };
15414 : 0 : if (gimple_simplify_406 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGN, CFN_HYPOT))
15415 : 0 : return true;
15416 : : }
15417 : : }
15418 : : break;
15419 : 0 : case CFN_BUILT_IN_COPYSIGNF:
15420 : 0 : if (gimple_call_num_args (_c1) == 2)
15421 : : {
15422 : 0 : tree _q30 = gimple_call_arg (_c1, 0);
15423 : 0 : _q30 = do_valueize (valueize, _q30);
15424 : 0 : tree _q31 = gimple_call_arg (_c1, 1);
15425 : 0 : _q31 = do_valueize (valueize, _q31);
15426 : 0 : {
15427 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q30, _q31 };
15428 : 0 : if (gimple_simplify_406 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF, CFN_HYPOT))
15429 : 0 : return true;
15430 : : }
15431 : : }
15432 : : break;
15433 : 0 : case CFN_BUILT_IN_COPYSIGNL:
15434 : 0 : if (gimple_call_num_args (_c1) == 2)
15435 : : {
15436 : 0 : tree _q30 = gimple_call_arg (_c1, 0);
15437 : 0 : _q30 = do_valueize (valueize, _q30);
15438 : 0 : tree _q31 = gimple_call_arg (_c1, 1);
15439 : 0 : _q31 = do_valueize (valueize, _q31);
15440 : 0 : {
15441 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q30, _q31 };
15442 : 0 : if (gimple_simplify_406 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNL, CFN_HYPOT))
15443 : 0 : return true;
15444 : : }
15445 : : }
15446 : : break;
15447 : 0 : case CFN_COPYSIGN:
15448 : 0 : if (gimple_call_num_args (_c1) == 2)
15449 : : {
15450 : 0 : tree _q30 = gimple_call_arg (_c1, 0);
15451 : 0 : _q30 = do_valueize (valueize, _q30);
15452 : 0 : tree _q31 = gimple_call_arg (_c1, 1);
15453 : 0 : _q31 = do_valueize (valueize, _q31);
15454 : 0 : {
15455 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q30, _q31 };
15456 : 0 : if (gimple_simplify_406 (res_op, seq, valueize, type, captures, CFN_COPYSIGN, CFN_HYPOT))
15457 : 0 : return true;
15458 : : }
15459 : : }
15460 : : break;
15461 : : default:;
15462 : : }
15463 : : }
15464 : : break;
15465 : 0 : default:;
15466 : : }
15467 : 0 : if (real_zerop (_p1))
15468 : : {
15469 : 0 : {
15470 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15471 : 0 : if (gimple_simplify_407 (res_op, seq, valueize, type, captures, CFN_HYPOT))
15472 : 0 : return true;
15473 : : }
15474 : : }
15475 : 0 : if (real_zerop (_p0))
15476 : : {
15477 : 0 : {
15478 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
15479 : 0 : if (gimple_simplify_407 (res_op, seq, valueize, type, captures, CFN_HYPOT))
15480 : 0 : return true;
15481 : : }
15482 : : }
15483 : 0 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
15484 : : {
15485 : 0 : {
15486 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
15487 : 0 : if (gimple_simplify_408 (res_op, seq, valueize, type, captures, CFN_HYPOT))
15488 : 0 : return true;
15489 : : }
15490 : : }
15491 : : return false;
15492 : : }
15493 : :
15494 : : bool
15495 : 1552 : gimple_simplify_CFN_BUILT_IN_FMINL (gimple_match_op *res_op, gimple_seq *seq,
15496 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
15497 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
15498 : : {
15499 : 1552 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
15500 : 1552 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
15501 : : {
15502 : 45 : {
15503 : 45 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
15504 : 45 : if (gimple_simplify_492 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINL))
15505 : 30 : return true;
15506 : : }
15507 : : }
15508 : 1522 : switch (TREE_CODE (_p1))
15509 : : {
15510 : 886 : case REAL_CST:
15511 : 886 : {
15512 : 886 : {
15513 : 886 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15514 : 886 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINL))
15515 : 38 : return true;
15516 : : }
15517 : 848 : break;
15518 : : }
15519 : 1484 : default:;
15520 : : }
15521 : 1484 : switch (TREE_CODE (_p0))
15522 : : {
15523 : 490 : case REAL_CST:
15524 : 490 : {
15525 : 490 : {
15526 : 490 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
15527 : 490 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINL))
15528 : 60 : return true;
15529 : : }
15530 : 430 : break;
15531 : : }
15532 : 1424 : default:;
15533 : : }
15534 : 1424 : {
15535 : 1424 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15536 : 1424 : if (gimple_simplify_494 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINL))
15537 : 23 : return true;
15538 : : }
15539 : 1401 : switch (TREE_CODE (_p0))
15540 : : {
15541 : 831 : case SSA_NAME:
15542 : 831 : if (gimple *_d1 = get_def (valueize, _p0))
15543 : : {
15544 : 488 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
15545 : 295 : switch (gimple_assign_rhs_code (_a1))
15546 : : {
15547 : 40 : case NEGATE_EXPR:
15548 : 40 : {
15549 : 40 : tree _q20 = gimple_assign_rhs1 (_a1);
15550 : 40 : _q20 = do_valueize (valueize, _q20);
15551 : 40 : switch (TREE_CODE (_p1))
15552 : : {
15553 : 0 : case SSA_NAME:
15554 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
15555 : : {
15556 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15557 : 0 : switch (gimple_assign_rhs_code (_a2))
15558 : : {
15559 : 0 : case NEGATE_EXPR:
15560 : 0 : {
15561 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
15562 : 0 : _q40 = do_valueize (valueize, _q40);
15563 : 0 : {
15564 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
15565 : 0 : if (FLOAT_TYPE_P (TREE_TYPE (captures[1]))
15566 : 0 : || (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
15567 : 0 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
15568 : : )
15569 : : {
15570 : 0 : gimple_seq *lseq = seq;
15571 : 0 : if (lseq
15572 : 0 : && (!single_use (captures[0])
15573 : 0 : || !single_use (captures[2])))
15574 : 0 : lseq = NULL;
15575 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2116;
15576 : 0 : {
15577 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
15578 : 0 : {
15579 : 0 : tree _o1[2], _r1;
15580 : 0 : _o1[0] = captures[1];
15581 : 0 : _o1[1] = captures[3];
15582 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_FMAXL, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
15583 : 0 : tem_op.resimplify (lseq, valueize);
15584 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
15585 : 0 : if (!_r1) goto next_after_fail2116;
15586 : 0 : res_op->ops[0] = _r1;
15587 : : }
15588 : 0 : res_op->resimplify (lseq, valueize);
15589 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1073, __FILE__, __LINE__, true);
15590 : 0 : return true;
15591 : : }
15592 : 0 : next_after_fail2116:;
15593 : : }
15594 : : }
15595 : 0 : break;
15596 : : }
15597 : : default:;
15598 : : }
15599 : : }
15600 : : break;
15601 : : default:;
15602 : : }
15603 : : break;
15604 : : }
15605 : : default:;
15606 : : }
15607 : : }
15608 : : break;
15609 : : default:;
15610 : : }
15611 : : return false;
15612 : : }
15613 : :
15614 : : bool
15615 : 0 : gimple_simplify_CFN_BUILT_IN_FMINF64 (gimple_match_op *res_op, gimple_seq *seq,
15616 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
15617 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
15618 : : {
15619 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
15620 : 0 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
15621 : : {
15622 : 0 : {
15623 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
15624 : 0 : if (gimple_simplify_492 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINF64))
15625 : 0 : return true;
15626 : : }
15627 : : }
15628 : 0 : switch (TREE_CODE (_p1))
15629 : : {
15630 : 0 : case REAL_CST:
15631 : 0 : {
15632 : 0 : {
15633 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15634 : 0 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINF64))
15635 : 0 : return true;
15636 : : }
15637 : 0 : break;
15638 : : }
15639 : 0 : default:;
15640 : : }
15641 : 0 : switch (TREE_CODE (_p0))
15642 : : {
15643 : 0 : case REAL_CST:
15644 : 0 : {
15645 : 0 : {
15646 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
15647 : 0 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINF64))
15648 : 0 : return true;
15649 : : }
15650 : 0 : break;
15651 : : }
15652 : 0 : default:;
15653 : : }
15654 : 0 : {
15655 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15656 : 0 : if (gimple_simplify_494 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINF64))
15657 : 0 : return true;
15658 : : }
15659 : 0 : switch (TREE_CODE (_p0))
15660 : : {
15661 : 0 : case SSA_NAME:
15662 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
15663 : : {
15664 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
15665 : 0 : switch (gimple_assign_rhs_code (_a1))
15666 : : {
15667 : 0 : case NEGATE_EXPR:
15668 : 0 : {
15669 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
15670 : 0 : _q20 = do_valueize (valueize, _q20);
15671 : 0 : switch (TREE_CODE (_p1))
15672 : : {
15673 : 0 : case SSA_NAME:
15674 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
15675 : : {
15676 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15677 : 0 : switch (gimple_assign_rhs_code (_a2))
15678 : : {
15679 : 0 : case NEGATE_EXPR:
15680 : 0 : {
15681 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
15682 : 0 : _q40 = do_valueize (valueize, _q40);
15683 : 0 : {
15684 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
15685 : 0 : if (FLOAT_TYPE_P (TREE_TYPE (captures[1]))
15686 : 0 : || (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
15687 : 0 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
15688 : : )
15689 : : {
15690 : 0 : gimple_seq *lseq = seq;
15691 : 0 : if (lseq
15692 : 0 : && (!single_use (captures[0])
15693 : 0 : || !single_use (captures[2])))
15694 : 0 : lseq = NULL;
15695 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2119;
15696 : 0 : {
15697 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
15698 : 0 : {
15699 : 0 : tree _o1[2], _r1;
15700 : 0 : _o1[0] = captures[1];
15701 : 0 : _o1[1] = captures[3];
15702 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_FMAXF64, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
15703 : 0 : tem_op.resimplify (lseq, valueize);
15704 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
15705 : 0 : if (!_r1) goto next_after_fail2119;
15706 : 0 : res_op->ops[0] = _r1;
15707 : : }
15708 : 0 : res_op->resimplify (lseq, valueize);
15709 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1073, __FILE__, __LINE__, true);
15710 : 0 : return true;
15711 : : }
15712 : 0 : next_after_fail2119:;
15713 : : }
15714 : : }
15715 : 0 : break;
15716 : : }
15717 : : default:;
15718 : : }
15719 : : }
15720 : : break;
15721 : : default:;
15722 : : }
15723 : : break;
15724 : : }
15725 : : default:;
15726 : : }
15727 : : }
15728 : : break;
15729 : : default:;
15730 : : }
15731 : : return false;
15732 : : }
15733 : :
15734 : : bool
15735 : 0 : gimple_simplify_CFN_BUILT_IN_FMINF64X (gimple_match_op *res_op, gimple_seq *seq,
15736 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
15737 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
15738 : : {
15739 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
15740 : 0 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
15741 : : {
15742 : 0 : {
15743 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
15744 : 0 : if (gimple_simplify_492 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINF64X))
15745 : 0 : return true;
15746 : : }
15747 : : }
15748 : 0 : switch (TREE_CODE (_p1))
15749 : : {
15750 : 0 : case REAL_CST:
15751 : 0 : {
15752 : 0 : {
15753 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15754 : 0 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINF64X))
15755 : 0 : return true;
15756 : : }
15757 : 0 : break;
15758 : : }
15759 : 0 : default:;
15760 : : }
15761 : 0 : switch (TREE_CODE (_p0))
15762 : : {
15763 : 0 : case REAL_CST:
15764 : 0 : {
15765 : 0 : {
15766 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
15767 : 0 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINF64X))
15768 : 0 : return true;
15769 : : }
15770 : 0 : break;
15771 : : }
15772 : 0 : default:;
15773 : : }
15774 : 0 : {
15775 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15776 : 0 : if (gimple_simplify_494 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMINF64X))
15777 : 0 : return true;
15778 : : }
15779 : 0 : switch (TREE_CODE (_p0))
15780 : : {
15781 : 0 : case SSA_NAME:
15782 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
15783 : : {
15784 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
15785 : 0 : switch (gimple_assign_rhs_code (_a1))
15786 : : {
15787 : 0 : case NEGATE_EXPR:
15788 : 0 : {
15789 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
15790 : 0 : _q20 = do_valueize (valueize, _q20);
15791 : 0 : switch (TREE_CODE (_p1))
15792 : : {
15793 : 0 : case SSA_NAME:
15794 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
15795 : : {
15796 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15797 : 0 : switch (gimple_assign_rhs_code (_a2))
15798 : : {
15799 : 0 : case NEGATE_EXPR:
15800 : 0 : {
15801 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
15802 : 0 : _q40 = do_valueize (valueize, _q40);
15803 : 0 : {
15804 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
15805 : 0 : if (FLOAT_TYPE_P (TREE_TYPE (captures[1]))
15806 : 0 : || (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
15807 : 0 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
15808 : : )
15809 : : {
15810 : 0 : gimple_seq *lseq = seq;
15811 : 0 : if (lseq
15812 : 0 : && (!single_use (captures[0])
15813 : 0 : || !single_use (captures[2])))
15814 : 0 : lseq = NULL;
15815 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2122;
15816 : 0 : {
15817 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
15818 : 0 : {
15819 : 0 : tree _o1[2], _r1;
15820 : 0 : _o1[0] = captures[1];
15821 : 0 : _o1[1] = captures[3];
15822 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_FMAXF64X, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
15823 : 0 : tem_op.resimplify (lseq, valueize);
15824 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
15825 : 0 : if (!_r1) goto next_after_fail2122;
15826 : 0 : res_op->ops[0] = _r1;
15827 : : }
15828 : 0 : res_op->resimplify (lseq, valueize);
15829 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1073, __FILE__, __LINE__, true);
15830 : 0 : return true;
15831 : : }
15832 : 0 : next_after_fail2122:;
15833 : : }
15834 : : }
15835 : 0 : break;
15836 : : }
15837 : : default:;
15838 : : }
15839 : : }
15840 : : break;
15841 : : default:;
15842 : : }
15843 : : break;
15844 : : }
15845 : : default:;
15846 : : }
15847 : : }
15848 : : break;
15849 : : default:;
15850 : : }
15851 : : return false;
15852 : : }
15853 : :
15854 : : bool
15855 : 1824 : gimple_simplify_CFN_BUILT_IN_FMAXF (gimple_match_op *res_op, gimple_seq *seq,
15856 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
15857 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
15858 : : {
15859 : 1824 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
15860 : 1824 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
15861 : : {
15862 : 43 : {
15863 : 43 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
15864 : 43 : if (gimple_simplify_492 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF))
15865 : 28 : return true;
15866 : : }
15867 : : }
15868 : 1796 : switch (TREE_CODE (_p1))
15869 : : {
15870 : 886 : case REAL_CST:
15871 : 886 : {
15872 : 886 : {
15873 : 886 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15874 : 886 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF))
15875 : 38 : return true;
15876 : : }
15877 : 848 : break;
15878 : : }
15879 : 1758 : default:;
15880 : : }
15881 : 1758 : switch (TREE_CODE (_p0))
15882 : : {
15883 : 490 : case REAL_CST:
15884 : 490 : {
15885 : 490 : {
15886 : 490 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
15887 : 490 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF))
15888 : 60 : return true;
15889 : : }
15890 : 430 : break;
15891 : : }
15892 : 1698 : default:;
15893 : : }
15894 : 1698 : {
15895 : 1698 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15896 : 1698 : if (gimple_simplify_495 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF))
15897 : 23 : return true;
15898 : : }
15899 : 1675 : switch (TREE_CODE (_p0))
15900 : : {
15901 : 1100 : case SSA_NAME:
15902 : 1100 : if (gimple *_d1 = get_def (valueize, _p0))
15903 : : {
15904 : 628 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
15905 : 481 : switch (gimple_assign_rhs_code (_a1))
15906 : : {
15907 : 40 : case NEGATE_EXPR:
15908 : 40 : {
15909 : 40 : tree _q20 = gimple_assign_rhs1 (_a1);
15910 : 40 : _q20 = do_valueize (valueize, _q20);
15911 : 40 : switch (TREE_CODE (_p1))
15912 : : {
15913 : 0 : case SSA_NAME:
15914 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
15915 : : {
15916 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15917 : 0 : switch (gimple_assign_rhs_code (_a2))
15918 : : {
15919 : 0 : case NEGATE_EXPR:
15920 : 0 : {
15921 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
15922 : 0 : _q40 = do_valueize (valueize, _q40);
15923 : 0 : {
15924 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
15925 : 0 : if (FLOAT_TYPE_P (TREE_TYPE (captures[1]))
15926 : 0 : || (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
15927 : 0 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
15928 : : )
15929 : : {
15930 : 0 : gimple_seq *lseq = seq;
15931 : 0 : if (lseq
15932 : 0 : && (!single_use (captures[0])
15933 : 0 : || !single_use (captures[2])))
15934 : 0 : lseq = NULL;
15935 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2125;
15936 : 0 : {
15937 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
15938 : 0 : {
15939 : 0 : tree _o1[2], _r1;
15940 : 0 : _o1[0] = captures[1];
15941 : 0 : _o1[1] = captures[3];
15942 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_FMINF, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
15943 : 0 : tem_op.resimplify (lseq, valueize);
15944 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
15945 : 0 : if (!_r1) goto next_after_fail2125;
15946 : 0 : res_op->ops[0] = _r1;
15947 : : }
15948 : 0 : res_op->resimplify (lseq, valueize);
15949 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1073, __FILE__, __LINE__, true);
15950 : 0 : return true;
15951 : : }
15952 : 0 : next_after_fail2125:;
15953 : : }
15954 : : }
15955 : 0 : break;
15956 : : }
15957 : : default:;
15958 : : }
15959 : : }
15960 : : break;
15961 : : default:;
15962 : : }
15963 : : break;
15964 : : }
15965 : : default:;
15966 : : }
15967 : : }
15968 : : break;
15969 : : default:;
15970 : : }
15971 : : return false;
15972 : : }
15973 : :
15974 : : bool
15975 : 11 : gimple_simplify_CFN_BUILT_IN_FMAXF16 (gimple_match_op *res_op, gimple_seq *seq,
15976 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
15977 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
15978 : : {
15979 : 11 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
15980 : 11 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
15981 : : {
15982 : 0 : {
15983 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
15984 : 0 : if (gimple_simplify_492 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF16))
15985 : 0 : return true;
15986 : : }
15987 : : }
15988 : 11 : switch (TREE_CODE (_p1))
15989 : : {
15990 : 0 : case REAL_CST:
15991 : 0 : {
15992 : 0 : {
15993 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15994 : 0 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF16))
15995 : 0 : return true;
15996 : : }
15997 : 0 : break;
15998 : : }
15999 : 11 : default:;
16000 : : }
16001 : 11 : switch (TREE_CODE (_p0))
16002 : : {
16003 : 0 : case REAL_CST:
16004 : 0 : {
16005 : 0 : {
16006 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
16007 : 0 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF16))
16008 : 0 : return true;
16009 : : }
16010 : 0 : break;
16011 : : }
16012 : 11 : default:;
16013 : : }
16014 : 11 : {
16015 : 11 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16016 : 11 : if (gimple_simplify_495 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF16))
16017 : 11 : return true;
16018 : : }
16019 : 0 : switch (TREE_CODE (_p0))
16020 : : {
16021 : 0 : case SSA_NAME:
16022 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
16023 : : {
16024 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16025 : 0 : switch (gimple_assign_rhs_code (_a1))
16026 : : {
16027 : 0 : case NEGATE_EXPR:
16028 : 0 : {
16029 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
16030 : 0 : _q20 = do_valueize (valueize, _q20);
16031 : 0 : switch (TREE_CODE (_p1))
16032 : : {
16033 : 0 : case SSA_NAME:
16034 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
16035 : : {
16036 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16037 : 0 : switch (gimple_assign_rhs_code (_a2))
16038 : : {
16039 : 0 : case NEGATE_EXPR:
16040 : 0 : {
16041 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
16042 : 0 : _q40 = do_valueize (valueize, _q40);
16043 : 0 : {
16044 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
16045 : 0 : if (FLOAT_TYPE_P (TREE_TYPE (captures[1]))
16046 : 0 : || (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
16047 : 0 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
16048 : : )
16049 : : {
16050 : 0 : gimple_seq *lseq = seq;
16051 : 0 : if (lseq
16052 : 0 : && (!single_use (captures[0])
16053 : 0 : || !single_use (captures[2])))
16054 : 0 : lseq = NULL;
16055 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2128;
16056 : 0 : {
16057 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
16058 : 0 : {
16059 : 0 : tree _o1[2], _r1;
16060 : 0 : _o1[0] = captures[1];
16061 : 0 : _o1[1] = captures[3];
16062 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_FMINF16, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
16063 : 0 : tem_op.resimplify (lseq, valueize);
16064 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
16065 : 0 : if (!_r1) goto next_after_fail2128;
16066 : 0 : res_op->ops[0] = _r1;
16067 : : }
16068 : 0 : res_op->resimplify (lseq, valueize);
16069 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1073, __FILE__, __LINE__, true);
16070 : 0 : return true;
16071 : : }
16072 : 0 : next_after_fail2128:;
16073 : : }
16074 : : }
16075 : 0 : break;
16076 : : }
16077 : : default:;
16078 : : }
16079 : : }
16080 : : break;
16081 : : default:;
16082 : : }
16083 : : break;
16084 : : }
16085 : : default:;
16086 : : }
16087 : : }
16088 : : break;
16089 : : default:;
16090 : : }
16091 : : return false;
16092 : : }
16093 : :
16094 : : bool
16095 : 0 : gimple_simplify_CFN_BUILT_IN_FMAXF32X (gimple_match_op *res_op, gimple_seq *seq,
16096 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
16097 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
16098 : : {
16099 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
16100 : 0 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
16101 : : {
16102 : 0 : {
16103 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
16104 : 0 : if (gimple_simplify_492 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF32X))
16105 : 0 : return true;
16106 : : }
16107 : : }
16108 : 0 : switch (TREE_CODE (_p1))
16109 : : {
16110 : 0 : case REAL_CST:
16111 : 0 : {
16112 : 0 : {
16113 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16114 : 0 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF32X))
16115 : 0 : return true;
16116 : : }
16117 : 0 : break;
16118 : : }
16119 : 0 : default:;
16120 : : }
16121 : 0 : switch (TREE_CODE (_p0))
16122 : : {
16123 : 0 : case REAL_CST:
16124 : 0 : {
16125 : 0 : {
16126 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
16127 : 0 : if (gimple_simplify_493 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF32X))
16128 : 0 : return true;
16129 : : }
16130 : 0 : break;
16131 : : }
16132 : 0 : default:;
16133 : : }
16134 : 0 : {
16135 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16136 : 0 : if (gimple_simplify_495 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF32X))
16137 : 0 : return true;
16138 : : }
16139 : 0 : switch (TREE_CODE (_p0))
16140 : : {
16141 : 0 : case SSA_NAME:
16142 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
16143 : : {
16144 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16145 : 0 : switch (gimple_assign_rhs_code (_a1))
16146 : : {
16147 : 0 : case NEGATE_EXPR:
16148 : 0 : {
16149 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
16150 : 0 : _q20 = do_valueize (valueize, _q20);
16151 : 0 : switch (TREE_CODE (_p1))
16152 : : {
16153 : 0 : case SSA_NAME:
16154 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
16155 : : {
16156 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16157 : 0 : switch (gimple_assign_rhs_code (_a2))
16158 : : {
16159 : 0 : case NEGATE_EXPR:
16160 : 0 : {
16161 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
16162 : 0 : _q40 = do_valueize (valueize, _q40);
16163 : 0 : {
16164 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
16165 : 0 : if (FLOAT_TYPE_P (TREE_TYPE (captures[1]))
16166 : 0 : || (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
16167 : 0 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
16168 : : )
16169 : : {
16170 : 0 : gimple_seq *lseq = seq;
16171 : 0 : if (lseq
16172 : 0 : && (!single_use (captures[0])
16173 : 0 : || !single_use (captures[2])))
16174 : 0 : lseq = NULL;
16175 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2132;
16176 : 0 : {
16177 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
16178 : 0 : {
16179 : 0 : tree _o1[2], _r1;
16180 : 0 : _o1[0] = captures[1];
16181 : 0 : _o1[1] = captures[3];
16182 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_FMINF32X, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
16183 : 0 : tem_op.resimplify (lseq, valueize);
16184 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
16185 : 0 : if (!_r1) goto next_after_fail2132;
16186 : 0 : res_op->ops[0] = _r1;
16187 : : }
16188 : 0 : res_op->resimplify (lseq, valueize);
16189 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1073, __FILE__, __LINE__, true);
16190 : 0 : return true;
16191 : : }
16192 : 0 : next_after_fail2132:;
16193 : : }
16194 : : }
16195 : 0 : break;
16196 : : }
16197 : : default:;
16198 : : }
16199 : : }
16200 : : break;
16201 : : default:;
16202 : : }
16203 : : break;
16204 : : }
16205 : : default:;
16206 : : }
16207 : : }
16208 : : break;
16209 : : default:;
16210 : : }
16211 : : return false;
16212 : : }
16213 : :
16214 : : bool
16215 : 26785 : gimple_simplify_LROTATE_EXPR (gimple_match_op *res_op, gimple_seq *seq,
16216 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
16217 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
16218 : : {
16219 : 26785 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
16220 : 26785 : if (integer_all_onesp (_p0))
16221 : : {
16222 : 0 : {
16223 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16224 : 0 : if (gimple_simplify_568 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
16225 : 0 : return true;
16226 : : }
16227 : : }
16228 : 26785 : if (integer_zerop (_p1))
16229 : : {
16230 : 30 : {
16231 : 30 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
16232 : 30 : if (gimple_simplify_375 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
16233 : 30 : return true;
16234 : : }
16235 : : }
16236 : 26755 : if (integer_zerop (_p0))
16237 : : {
16238 : 0 : {
16239 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16240 : 0 : if (gimple_simplify_376 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
16241 : 0 : return true;
16242 : : }
16243 : : }
16244 : 26755 : switch (TREE_CODE (_p1))
16245 : : {
16246 : 23533 : case SSA_NAME:
16247 : 23533 : if (gimple *_d1 = get_def (valueize, _p1))
16248 : : {
16249 : 21920 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16250 : 17497 : switch (gimple_assign_rhs_code (_a1))
16251 : : {
16252 : 0 : case CONSTRUCTOR:
16253 : 0 : {
16254 : 0 : {
16255 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16256 : 0 : if (gimple_simplify_378 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
16257 : 0 : return true;
16258 : : }
16259 : 0 : break;
16260 : : }
16261 : : default:;
16262 : : }
16263 : : }
16264 : : break;
16265 : 0 : case VECTOR_CST:
16266 : 0 : {
16267 : 0 : {
16268 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16269 : 0 : if (gimple_simplify_377 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
16270 : 0 : return true;
16271 : : }
16272 : 0 : break;
16273 : : }
16274 : 2862 : case INTEGER_CST:
16275 : 2862 : {
16276 : 2862 : {
16277 : 2862 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16278 : 2862 : gimple_seq *lseq = seq;
16279 : 2862 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2136;
16280 : 2862 : {
16281 : 2862 : res_op->set_op (RROTATE_EXPR, type, 2);
16282 : 2862 : res_op->ops[0] = captures[0];
16283 : 2862 : res_op->ops[1] = const_binop (MINUS_EXPR, TREE_TYPE (captures[1]),
16284 : 2862 : build_int_cst (TREE_TYPE (captures[1]),
16285 : 2862 : element_precision (type)), captures[1]);
16286 : 2862 : res_op->resimplify (lseq, valueize);
16287 : 2862 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1078, __FILE__, __LINE__, true);
16288 : 2862 : return true;
16289 : : }
16290 : 0 : next_after_fail2136:;
16291 : : }
16292 : 0 : break;
16293 : : }
16294 : 23893 : default:;
16295 : : }
16296 : 23893 : switch (TREE_CODE (_p0))
16297 : : {
16298 : 22336 : case SSA_NAME:
16299 : 22336 : if (gimple *_d1 = get_def (valueize, _p0))
16300 : : {
16301 : 20758 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16302 : 3339 : switch (gimple_assign_rhs_code (_a1))
16303 : : {
16304 : 0 : case LROTATE_EXPR:
16305 : 0 : {
16306 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
16307 : 0 : _q20 = do_valueize (valueize, _q20);
16308 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
16309 : 0 : _q21 = do_valueize (valueize, _q21);
16310 : 0 : switch (TREE_CODE (_q21))
16311 : : {
16312 : 0 : case INTEGER_CST:
16313 : 0 : {
16314 : 0 : switch (TREE_CODE (_p1))
16315 : : {
16316 : 0 : case INTEGER_CST:
16317 : 0 : {
16318 : 0 : {
16319 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
16320 : 0 : if (gimple_simplify_380 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
16321 : 0 : return true;
16322 : : }
16323 : 0 : break;
16324 : : }
16325 : : default:;
16326 : : }
16327 : : break;
16328 : : }
16329 : : default:;
16330 : : }
16331 : : break;
16332 : : }
16333 : : default:;
16334 : : }
16335 : : }
16336 : : break;
16337 : : default:;
16338 : : }
16339 : : return false;
16340 : : }
16341 : :
16342 : : bool
16343 : 32055 : gimple_simplify_UNLT_EXPR (gimple_match_op *res_op, gimple_seq *seq,
16344 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
16345 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
16346 : : {
16347 : 32055 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
16348 : 32055 : switch (TREE_CODE (_p0))
16349 : : {
16350 : 31623 : case SSA_NAME:
16351 : 31623 : if (gimple *_d1 = get_def (valueize, _p0))
16352 : : {
16353 : 16380 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16354 : 20667 : switch (gimple_assign_rhs_code (_a1))
16355 : : {
16356 : 0 : case VEC_COND_EXPR:
16357 : 0 : {
16358 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
16359 : 0 : _q20 = do_valueize (valueize, _q20);
16360 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
16361 : 0 : _q21 = do_valueize (valueize, _q21);
16362 : 0 : tree _q22 = gimple_assign_rhs3 (_a1);
16363 : 0 : _q22 = do_valueize (valueize, _q22);
16364 : 0 : switch (TREE_CODE (_p1))
16365 : : {
16366 : 0 : case SSA_NAME:
16367 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
16368 : : {
16369 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16370 : 0 : switch (gimple_assign_rhs_code (_a2))
16371 : : {
16372 : 0 : case VEC_COND_EXPR:
16373 : 0 : {
16374 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
16375 : 0 : _q60 = do_valueize (valueize, _q60);
16376 : 0 : tree _q61 = gimple_assign_rhs2 (_a2);
16377 : 0 : _q61 = do_valueize (valueize, _q61);
16378 : 0 : tree _q62 = gimple_assign_rhs3 (_a2);
16379 : 0 : _q62 = do_valueize (valueize, _q62);
16380 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
16381 : : {
16382 : 0 : {
16383 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
16384 : 0 : if (TREE_CODE_CLASS (UNLT_EXPR) != tcc_comparison
16385 : 0 : || types_match (type, TREE_TYPE (captures[2]))
16386 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
16387 : : || (optimize_vectors_before_lowering_p ()
16388 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
16389 : 0 : TREE_TYPE (captures[1]), ERROR_MARK))
16390 : : )
16391 : : {
16392 : 0 : gimple_seq *lseq = seq;
16393 : 0 : if (lseq
16394 : 0 : && (!single_use (captures[0])
16395 : 0 : || !single_use (captures[4])))
16396 : 0 : lseq = NULL;
16397 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2148;
16398 : 0 : {
16399 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
16400 : 0 : res_op->ops[0] = captures[1];
16401 : 0 : {
16402 : 0 : tree _o1[2], _r1;
16403 : 0 : _o1[0] = captures[2];
16404 : 0 : _o1[1] = captures[5];
16405 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNLT_EXPR, type, _o1[0], _o1[1]);
16406 : 0 : tem_op.resimplify (NULL, valueize);
16407 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16408 : 0 : if (!_r1) goto next_after_fail2148;
16409 : 0 : res_op->ops[1] = _r1;
16410 : : }
16411 : 0 : {
16412 : 0 : tree _o1[2], _r1;
16413 : 0 : _o1[0] = captures[3];
16414 : 0 : _o1[1] = captures[6];
16415 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNLT_EXPR, type, _o1[0], _o1[1]);
16416 : 0 : tem_op.resimplify (NULL, valueize);
16417 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16418 : 0 : if (!_r1) goto next_after_fail2148;
16419 : 0 : res_op->ops[2] = _r1;
16420 : : }
16421 : 0 : res_op->resimplify (lseq, valueize);
16422 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 925, __FILE__, __LINE__, true);
16423 : 0 : return true;
16424 : : }
16425 : 0 : next_after_fail2148:;
16426 : : }
16427 : : }
16428 : : }
16429 : : break;
16430 : : }
16431 : : default:;
16432 : : }
16433 : : }
16434 : : break;
16435 : 0 : default:;
16436 : : }
16437 : 0 : {
16438 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
16439 : 0 : if (TREE_CODE_CLASS (UNLT_EXPR) != tcc_comparison
16440 : 0 : || types_match (type, TREE_TYPE (captures[2]))
16441 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
16442 : : || (optimize_vectors_before_lowering_p ()
16443 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
16444 : 0 : TREE_TYPE (captures[1]), ERROR_MARK))
16445 : : )
16446 : : {
16447 : 0 : gimple_seq *lseq = seq;
16448 : 0 : if (lseq
16449 : 0 : && (!single_use (captures[0])))
16450 : 0 : lseq = NULL;
16451 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2149;
16452 : 0 : {
16453 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
16454 : 0 : res_op->ops[0] = captures[1];
16455 : 0 : {
16456 : 0 : tree _o1[2], _r1;
16457 : 0 : _o1[0] = captures[2];
16458 : 0 : _o1[1] = captures[4];
16459 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNLT_EXPR, type, _o1[0], _o1[1]);
16460 : 0 : tem_op.resimplify (NULL, valueize);
16461 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16462 : 0 : if (!_r1) goto next_after_fail2149;
16463 : 0 : res_op->ops[1] = _r1;
16464 : : }
16465 : 0 : {
16466 : 0 : tree _o1[2], _r1;
16467 : 0 : _o1[0] = captures[3];
16468 : 0 : _o1[1] = captures[4];
16469 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNLT_EXPR, type, _o1[0], _o1[1]);
16470 : 0 : tem_op.resimplify (NULL, valueize);
16471 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16472 : 0 : if (!_r1) goto next_after_fail2149;
16473 : 0 : res_op->ops[2] = _r1;
16474 : : }
16475 : 0 : res_op->resimplify (lseq, valueize);
16476 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 926, __FILE__, __LINE__, true);
16477 : 0 : return true;
16478 : : }
16479 : 0 : next_after_fail2149:;
16480 : : }
16481 : : }
16482 : 0 : break;
16483 : : }
16484 : : default:;
16485 : : }
16486 : : }
16487 : : break;
16488 : 32055 : default:;
16489 : : }
16490 : 32055 : switch (TREE_CODE (_p1))
16491 : : {
16492 : 13278 : case SSA_NAME:
16493 : 13278 : if (gimple *_d1 = get_def (valueize, _p1))
16494 : : {
16495 : 7570 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16496 : 10702 : switch (gimple_assign_rhs_code (_a1))
16497 : : {
16498 : 0 : case VEC_COND_EXPR:
16499 : 0 : {
16500 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
16501 : 0 : _q30 = do_valueize (valueize, _q30);
16502 : 0 : tree _q31 = gimple_assign_rhs2 (_a1);
16503 : 0 : _q31 = do_valueize (valueize, _q31);
16504 : 0 : tree _q32 = gimple_assign_rhs3 (_a1);
16505 : 0 : _q32 = do_valueize (valueize, _q32);
16506 : 0 : {
16507 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
16508 : 0 : if (TREE_CODE_CLASS (UNLT_EXPR) != tcc_comparison
16509 : 0 : || types_match (type, TREE_TYPE (captures[3]))
16510 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]), ERROR_MARK)
16511 : : || (optimize_vectors_before_lowering_p ()
16512 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]),
16513 : 0 : TREE_TYPE (captures[2]), ERROR_MARK))
16514 : : )
16515 : : {
16516 : 0 : gimple_seq *lseq = seq;
16517 : 0 : if (lseq
16518 : 0 : && (!single_use (captures[1])))
16519 : 0 : lseq = NULL;
16520 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2150;
16521 : 0 : {
16522 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
16523 : 0 : res_op->ops[0] = captures[2];
16524 : 0 : {
16525 : 0 : tree _o1[2], _r1;
16526 : 0 : _o1[0] = captures[0];
16527 : 0 : _o1[1] = captures[3];
16528 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNLT_EXPR, type, _o1[0], _o1[1]);
16529 : 0 : tem_op.resimplify (NULL, valueize);
16530 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16531 : 0 : if (!_r1) goto next_after_fail2150;
16532 : 0 : res_op->ops[1] = _r1;
16533 : : }
16534 : 0 : {
16535 : 0 : tree _o1[2], _r1;
16536 : 0 : _o1[0] = captures[0];
16537 : 0 : _o1[1] = captures[4];
16538 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNLT_EXPR, type, _o1[0], _o1[1]);
16539 : 0 : tem_op.resimplify (NULL, valueize);
16540 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16541 : 0 : if (!_r1) goto next_after_fail2150;
16542 : 0 : res_op->ops[2] = _r1;
16543 : : }
16544 : 0 : res_op->resimplify (lseq, valueize);
16545 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 927, __FILE__, __LINE__, true);
16546 : 0 : return true;
16547 : : }
16548 : 0 : next_after_fail2150:;
16549 : : }
16550 : : }
16551 : 0 : break;
16552 : : }
16553 : : default:;
16554 : : }
16555 : : }
16556 : : break;
16557 : 32055 : default:;
16558 : : }
16559 : 32055 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
16560 : : {
16561 : 5 : {
16562 : 5 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
16563 : 5 : if (gimple_simplify_595 (res_op, seq, valueize, type, captures, UNLT_EXPR))
16564 : 5 : return true;
16565 : : }
16566 : : }
16567 : 32050 : switch (TREE_CODE (_p0))
16568 : : {
16569 : 31618 : case SSA_NAME:
16570 : 31618 : if (gimple *_d1 = get_def (valueize, _p0))
16571 : : {
16572 : 16379 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16573 : 20667 : switch (gimple_assign_rhs_code (_a1))
16574 : : {
16575 : 907 : case FLOAT_EXPR:
16576 : 907 : {
16577 : 907 : tree _q20 = gimple_assign_rhs1 (_a1);
16578 : 907 : _q20 = do_valueize (valueize, _q20);
16579 : 907 : switch (TREE_CODE (_p1))
16580 : : {
16581 : 0 : case SSA_NAME:
16582 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
16583 : : {
16584 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16585 : 0 : switch (gimple_assign_rhs_code (_a2))
16586 : : {
16587 : 0 : case FLOAT_EXPR:
16588 : 0 : {
16589 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
16590 : 0 : _q40 = do_valueize (valueize, _q40);
16591 : 0 : {
16592 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
16593 : 0 : if (gimple_simplify_257 (res_op, seq, valueize, type, captures, UNLT_EXPR, LT_EXPR))
16594 : 0 : return true;
16595 : : }
16596 : 0 : break;
16597 : : }
16598 : : default:;
16599 : : }
16600 : : }
16601 : : break;
16602 : : default:;
16603 : : }
16604 : : break;
16605 : : }
16606 : 30 : case NEGATE_EXPR:
16607 : 30 : {
16608 : 30 : tree _q20 = gimple_assign_rhs1 (_a1);
16609 : 30 : _q20 = do_valueize (valueize, _q20);
16610 : 30 : switch (TREE_CODE (_p1))
16611 : : {
16612 : 30 : case SSA_NAME:
16613 : 30 : if (gimple *_d2 = get_def (valueize, _p1))
16614 : : {
16615 : 30 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16616 : 30 : switch (gimple_assign_rhs_code (_a2))
16617 : : {
16618 : 30 : case NEGATE_EXPR:
16619 : 30 : {
16620 : 30 : tree _q40 = gimple_assign_rhs1 (_a2);
16621 : 30 : _q40 = do_valueize (valueize, _q40);
16622 : 30 : {
16623 : 30 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
16624 : 30 : if (gimple_simplify_260 (res_op, seq, valueize, type, captures, UNLT_EXPR, UNGT_EXPR))
16625 : 30 : return true;
16626 : : }
16627 : 0 : break;
16628 : : }
16629 : : default:;
16630 : : }
16631 : : }
16632 : : break;
16633 : 0 : default:;
16634 : : }
16635 : 0 : if (CONSTANT_CLASS_P (_p1))
16636 : : {
16637 : 0 : {
16638 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
16639 : 0 : if (gimple_simplify_261 (res_op, seq, valueize, type, captures, UNLT_EXPR, UNGT_EXPR))
16640 : 0 : return true;
16641 : : }
16642 : : }
16643 : : break;
16644 : : }
16645 : : default:;
16646 : : }
16647 : : }
16648 : : break;
16649 : 32020 : default:;
16650 : : }
16651 : 32020 : switch (TREE_CODE (_p1))
16652 : : {
16653 : 18469 : case REAL_CST:
16654 : 18469 : {
16655 : 18469 : {
16656 : 18469 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16657 : 18469 : if (gimple_simplify_594 (res_op, seq, valueize, type, captures, UNLT_EXPR))
16658 : 0 : return true;
16659 : : }
16660 : 18469 : break;
16661 : : }
16662 : : default:;
16663 : : }
16664 : : return false;
16665 : : }
16666 : :
16667 : : bool
16668 : 374 : gimple_simplify_LTGT_EXPR (gimple_match_op *res_op, gimple_seq *seq,
16669 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
16670 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
16671 : : {
16672 : 374 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
16673 : 374 : switch (TREE_CODE (_p0))
16674 : : {
16675 : 343 : case SSA_NAME:
16676 : 343 : if (gimple *_d1 = get_def (valueize, _p0))
16677 : : {
16678 : 304 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16679 : 64 : switch (gimple_assign_rhs_code (_a1))
16680 : : {
16681 : 0 : case VEC_COND_EXPR:
16682 : 0 : {
16683 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
16684 : 0 : _q20 = do_valueize (valueize, _q20);
16685 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
16686 : 0 : _q21 = do_valueize (valueize, _q21);
16687 : 0 : tree _q22 = gimple_assign_rhs3 (_a1);
16688 : 0 : _q22 = do_valueize (valueize, _q22);
16689 : 0 : switch (TREE_CODE (_p1))
16690 : : {
16691 : 0 : case SSA_NAME:
16692 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
16693 : : {
16694 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16695 : 0 : switch (gimple_assign_rhs_code (_a2))
16696 : : {
16697 : 0 : case VEC_COND_EXPR:
16698 : 0 : {
16699 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
16700 : 0 : _q60 = do_valueize (valueize, _q60);
16701 : 0 : tree _q61 = gimple_assign_rhs2 (_a2);
16702 : 0 : _q61 = do_valueize (valueize, _q61);
16703 : 0 : tree _q62 = gimple_assign_rhs3 (_a2);
16704 : 0 : _q62 = do_valueize (valueize, _q62);
16705 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
16706 : : {
16707 : 0 : {
16708 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
16709 : 0 : if (TREE_CODE_CLASS (LTGT_EXPR) != tcc_comparison
16710 : 0 : || types_match (type, TREE_TYPE (captures[2]))
16711 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
16712 : : || (optimize_vectors_before_lowering_p ()
16713 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
16714 : 0 : TREE_TYPE (captures[1]), ERROR_MARK))
16715 : : )
16716 : : {
16717 : 0 : gimple_seq *lseq = seq;
16718 : 0 : if (lseq
16719 : 0 : && (!single_use (captures[0])
16720 : 0 : || !single_use (captures[4])))
16721 : 0 : lseq = NULL;
16722 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2163;
16723 : 0 : {
16724 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
16725 : 0 : res_op->ops[0] = captures[1];
16726 : 0 : {
16727 : 0 : tree _o1[2], _r1;
16728 : 0 : _o1[0] = captures[2];
16729 : 0 : _o1[1] = captures[5];
16730 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LTGT_EXPR, type, _o1[0], _o1[1]);
16731 : 0 : tem_op.resimplify (NULL, valueize);
16732 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16733 : 0 : if (!_r1) goto next_after_fail2163;
16734 : 0 : res_op->ops[1] = _r1;
16735 : : }
16736 : 0 : {
16737 : 0 : tree _o1[2], _r1;
16738 : 0 : _o1[0] = captures[3];
16739 : 0 : _o1[1] = captures[6];
16740 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LTGT_EXPR, type, _o1[0], _o1[1]);
16741 : 0 : tem_op.resimplify (NULL, valueize);
16742 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16743 : 0 : if (!_r1) goto next_after_fail2163;
16744 : 0 : res_op->ops[2] = _r1;
16745 : : }
16746 : 0 : res_op->resimplify (lseq, valueize);
16747 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 925, __FILE__, __LINE__, true);
16748 : 0 : return true;
16749 : : }
16750 : 0 : next_after_fail2163:;
16751 : : }
16752 : : }
16753 : : }
16754 : : break;
16755 : : }
16756 : : default:;
16757 : : }
16758 : : }
16759 : : break;
16760 : 0 : default:;
16761 : : }
16762 : 0 : {
16763 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
16764 : 0 : if (TREE_CODE_CLASS (LTGT_EXPR) != tcc_comparison
16765 : 0 : || types_match (type, TREE_TYPE (captures[2]))
16766 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]), ERROR_MARK)
16767 : : || (optimize_vectors_before_lowering_p ()
16768 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]),
16769 : 0 : TREE_TYPE (captures[1]), ERROR_MARK))
16770 : : )
16771 : : {
16772 : 0 : gimple_seq *lseq = seq;
16773 : 0 : if (lseq
16774 : 0 : && (!single_use (captures[0])))
16775 : 0 : lseq = NULL;
16776 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2164;
16777 : 0 : {
16778 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
16779 : 0 : res_op->ops[0] = captures[1];
16780 : 0 : {
16781 : 0 : tree _o1[2], _r1;
16782 : 0 : _o1[0] = captures[2];
16783 : 0 : _o1[1] = captures[4];
16784 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LTGT_EXPR, type, _o1[0], _o1[1]);
16785 : 0 : tem_op.resimplify (NULL, valueize);
16786 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16787 : 0 : if (!_r1) goto next_after_fail2164;
16788 : 0 : res_op->ops[1] = _r1;
16789 : : }
16790 : 0 : {
16791 : 0 : tree _o1[2], _r1;
16792 : 0 : _o1[0] = captures[3];
16793 : 0 : _o1[1] = captures[4];
16794 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LTGT_EXPR, type, _o1[0], _o1[1]);
16795 : 0 : tem_op.resimplify (NULL, valueize);
16796 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16797 : 0 : if (!_r1) goto next_after_fail2164;
16798 : 0 : res_op->ops[2] = _r1;
16799 : : }
16800 : 0 : res_op->resimplify (lseq, valueize);
16801 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 926, __FILE__, __LINE__, true);
16802 : 0 : return true;
16803 : : }
16804 : 0 : next_after_fail2164:;
16805 : : }
16806 : : }
16807 : 0 : break;
16808 : : }
16809 : : default:;
16810 : : }
16811 : : }
16812 : : break;
16813 : 374 : default:;
16814 : : }
16815 : 374 : switch (TREE_CODE (_p1))
16816 : : {
16817 : 343 : case SSA_NAME:
16818 : 343 : if (gimple *_d1 = get_def (valueize, _p1))
16819 : : {
16820 : 301 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16821 : 64 : switch (gimple_assign_rhs_code (_a1))
16822 : : {
16823 : 0 : case VEC_COND_EXPR:
16824 : 0 : {
16825 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
16826 : 0 : _q30 = do_valueize (valueize, _q30);
16827 : 0 : tree _q31 = gimple_assign_rhs2 (_a1);
16828 : 0 : _q31 = do_valueize (valueize, _q31);
16829 : 0 : tree _q32 = gimple_assign_rhs3 (_a1);
16830 : 0 : _q32 = do_valueize (valueize, _q32);
16831 : 0 : {
16832 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
16833 : 0 : if (TREE_CODE_CLASS (LTGT_EXPR) != tcc_comparison
16834 : 0 : || types_match (type, TREE_TYPE (captures[3]))
16835 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]), ERROR_MARK)
16836 : : || (optimize_vectors_before_lowering_p ()
16837 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]),
16838 : 0 : TREE_TYPE (captures[2]), ERROR_MARK))
16839 : : )
16840 : : {
16841 : 0 : gimple_seq *lseq = seq;
16842 : 0 : if (lseq
16843 : 0 : && (!single_use (captures[1])))
16844 : 0 : lseq = NULL;
16845 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2165;
16846 : 0 : {
16847 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
16848 : 0 : res_op->ops[0] = captures[2];
16849 : 0 : {
16850 : 0 : tree _o1[2], _r1;
16851 : 0 : _o1[0] = captures[0];
16852 : 0 : _o1[1] = captures[3];
16853 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LTGT_EXPR, type, _o1[0], _o1[1]);
16854 : 0 : tem_op.resimplify (NULL, valueize);
16855 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16856 : 0 : if (!_r1) goto next_after_fail2165;
16857 : 0 : res_op->ops[1] = _r1;
16858 : : }
16859 : 0 : {
16860 : 0 : tree _o1[2], _r1;
16861 : 0 : _o1[0] = captures[0];
16862 : 0 : _o1[1] = captures[4];
16863 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), LTGT_EXPR, type, _o1[0], _o1[1]);
16864 : 0 : tem_op.resimplify (NULL, valueize);
16865 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16866 : 0 : if (!_r1) goto next_after_fail2165;
16867 : 0 : res_op->ops[2] = _r1;
16868 : : }
16869 : 0 : res_op->resimplify (lseq, valueize);
16870 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 927, __FILE__, __LINE__, true);
16871 : 0 : return true;
16872 : : }
16873 : 0 : next_after_fail2165:;
16874 : : }
16875 : : }
16876 : 0 : break;
16877 : : }
16878 : : default:;
16879 : : }
16880 : : }
16881 : : break;
16882 : 374 : default:;
16883 : : }
16884 : 374 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
16885 : : {
16886 : 0 : {
16887 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
16888 : 0 : if (!flag_trapping_math || !tree_expr_maybe_nan_p (captures[0])
16889 : : )
16890 : : {
16891 : 0 : gimple_seq *lseq = seq;
16892 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2166;
16893 : 0 : {
16894 : 0 : tree tem;
16895 : 0 : tem = constant_boolean_node (false, type);
16896 : 0 : res_op->set_value (tem);
16897 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1084, __FILE__, __LINE__, true);
16898 : 0 : return true;
16899 : : }
16900 : 0 : next_after_fail2166:;
16901 : : }
16902 : : }
16903 : : }
16904 : 374 : switch (TREE_CODE (_p0))
16905 : : {
16906 : 343 : case SSA_NAME:
16907 : 343 : if (gimple *_d1 = get_def (valueize, _p0))
16908 : : {
16909 : 304 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16910 : 64 : switch (gimple_assign_rhs_code (_a1))
16911 : : {
16912 : 0 : case FLOAT_EXPR:
16913 : 0 : {
16914 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
16915 : 0 : _q20 = do_valueize (valueize, _q20);
16916 : 0 : switch (TREE_CODE (_p1))
16917 : : {
16918 : 0 : case SSA_NAME:
16919 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
16920 : : {
16921 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16922 : 0 : switch (gimple_assign_rhs_code (_a2))
16923 : : {
16924 : 0 : case FLOAT_EXPR:
16925 : 0 : {
16926 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
16927 : 0 : _q40 = do_valueize (valueize, _q40);
16928 : 0 : {
16929 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
16930 : 0 : if (gimple_simplify_257 (res_op, seq, valueize, type, captures, LTGT_EXPR, NE_EXPR))
16931 : 0 : return true;
16932 : : }
16933 : 0 : break;
16934 : : }
16935 : : default:;
16936 : : }
16937 : : }
16938 : : break;
16939 : : default:;
16940 : : }
16941 : : break;
16942 : : }
16943 : 0 : case NEGATE_EXPR:
16944 : 0 : {
16945 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
16946 : 0 : _q20 = do_valueize (valueize, _q20);
16947 : 0 : switch (TREE_CODE (_p1))
16948 : : {
16949 : 0 : case SSA_NAME:
16950 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
16951 : : {
16952 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16953 : 0 : switch (gimple_assign_rhs_code (_a2))
16954 : : {
16955 : 0 : case NEGATE_EXPR:
16956 : 0 : {
16957 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
16958 : 0 : _q40 = do_valueize (valueize, _q40);
16959 : 0 : {
16960 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
16961 : 0 : if (gimple_simplify_260 (res_op, seq, valueize, type, captures, LTGT_EXPR, LTGT_EXPR))
16962 : 0 : return true;
16963 : : }
16964 : 0 : break;
16965 : : }
16966 : : default:;
16967 : : }
16968 : : }
16969 : : break;
16970 : 0 : default:;
16971 : : }
16972 : 0 : if (CONSTANT_CLASS_P (_p1))
16973 : : {
16974 : 0 : {
16975 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
16976 : 0 : if (gimple_simplify_261 (res_op, seq, valueize, type, captures, LTGT_EXPR, LTGT_EXPR))
16977 : 0 : return true;
16978 : : }
16979 : : }
16980 : : break;
16981 : : }
16982 : : default:;
16983 : : }
16984 : : }
16985 : : break;
16986 : 374 : default:;
16987 : : }
16988 : 374 : switch (TREE_CODE (_p1))
16989 : : {
16990 : 0 : case REAL_CST:
16991 : 0 : {
16992 : 0 : {
16993 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
16994 : 0 : if (gimple_simplify_594 (res_op, seq, valueize, type, captures, LTGT_EXPR))
16995 : 0 : return true;
16996 : : }
16997 : 0 : break;
16998 : : }
16999 : : default:;
17000 : : }
17001 : : return false;
17002 : : }
17003 : :
17004 : : bool
17005 : 11932 : gimple_simplify_BIT_INSERT_EXPR (gimple_match_op *res_op, gimple_seq *seq,
17006 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
17007 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
17008 : : {
17009 : 11932 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
17010 : 11932 : switch (TREE_CODE (_p1))
17011 : : {
17012 : 7177 : case SSA_NAME:
17013 : 7177 : if (gimple *_d1 = get_def (valueize, _p1))
17014 : : {
17015 : 6572 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17016 : 6492 : switch (gimple_assign_rhs_code (_a1))
17017 : : {
17018 : 169 : case BIT_FIELD_REF:
17019 : 169 : {
17020 : 169 : tree _q30 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 0);
17021 : 169 : if ((TREE_CODE (_q30) == SSA_NAME
17022 : 169 : || is_gimple_min_invariant (_q30)))
17023 : : {
17024 : 168 : _q30 = do_valueize (valueize, _q30);
17025 : 168 : tree _q31 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 1);
17026 : 168 : if ((TREE_CODE (_q31) == SSA_NAME
17027 : 168 : || is_gimple_min_invariant (_q31)))
17028 : : {
17029 : 168 : _q31 = do_valueize (valueize, _q31);
17030 : 168 : tree _q32 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 2);
17031 : 168 : if ((TREE_CODE (_q32) == SSA_NAME
17032 : 168 : || is_gimple_min_invariant (_q32)))
17033 : : {
17034 : 168 : _q32 = do_valueize (valueize, _q32);
17035 : 168 : {
17036 : 168 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32, _p2 };
17037 : 168 : if (VECTOR_TYPE_P (type)
17038 : 76 : && (VECTOR_MODE_P (TYPE_MODE (type))
17039 : : || optimize_vectors_before_lowering_p ())
17040 : 76 : && types_match (captures[0], captures[2])
17041 : 52 : && types_match (TREE_TYPE (TREE_TYPE (captures[0])), TREE_TYPE (captures[1]))
17042 : 52 : && TYPE_VECTOR_SUBPARTS (type).is_constant ()
17043 : 220 : && multiple_p (wi::to_poly_offset (captures[4]),
17044 : 181 : wi::to_poly_offset (TYPE_SIZE (TREE_TYPE (type))))
17045 : : )
17046 : : {
17047 : 39 : {
17048 : 39 : unsigned HOST_WIDE_INT elsz
17049 : 39 : = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (captures[2]))));
17050 : 39 : poly_uint64 relt = exact_div (tree_to_poly_uint64 (captures[4]), elsz);
17051 : 39 : poly_uint64 ielt = exact_div (tree_to_poly_uint64 (captures[5]), elsz);
17052 : 39 : unsigned nunits = TYPE_VECTOR_SUBPARTS (type).to_constant ();
17053 : 39 : vec_perm_builder builder;
17054 : 39 : builder.new_vector (nunits, nunits, 1);
17055 : 1039 : for (unsigned i = 0; i < nunits; ++i)
17056 : 1000 : builder.quick_push (known_eq (ielt, i) ? nunits + relt : i);
17057 : 39 : vec_perm_indices sel (builder, 2, nunits);
17058 : 78 : if (!VECTOR_MODE_P (TYPE_MODE (type))
17059 : 78 : || can_vec_perm_const_p (TYPE_MODE (type), TYPE_MODE (type), sel, false)
17060 : : )
17061 : : {
17062 : 25 : gimple_seq *lseq = seq;
17063 : 25 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2373;
17064 : 25 : {
17065 : 25 : res_op->set_op (VEC_PERM_EXPR, type, 3);
17066 : 25 : res_op->ops[0] = captures[0];
17067 : 25 : res_op->ops[1] = captures[2];
17068 : 25 : res_op->ops[2] = vec_perm_indices_to_tree
17069 : 25 : (build_vector_type (ssizetype, nunits), sel);
17070 : 25 : res_op->resimplify (lseq, valueize);
17071 : 25 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1142, __FILE__, __LINE__, true);
17072 : 25 : return true;
17073 : : }
17074 : 0 : next_after_fail2373:;
17075 : : }
17076 : 39 : }
17077 : : }
17078 : : }
17079 : : }
17080 : : }
17081 : : }
17082 : : break;
17083 : : }
17084 : : default:;
17085 : : }
17086 : : }
17087 : : break;
17088 : : default:;
17089 : : }
17090 : : return false;
17091 : : }
17092 : :
17093 : : bool
17094 : 2629 : gimple_simplify_CFN_BUILT_IN_FMAF (gimple_match_op *res_op, gimple_seq *seq,
17095 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
17096 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
17097 : : {
17098 : 2629 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
17099 : 2629 : switch (TREE_CODE (_p0))
17100 : : {
17101 : 2371 : case SSA_NAME:
17102 : 2371 : if (gimple *_d1 = get_def (valueize, _p0))
17103 : : {
17104 : 1157 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17105 : 1253 : switch (gimple_assign_rhs_code (_a1))
17106 : : {
17107 : 189 : case NEGATE_EXPR:
17108 : 189 : {
17109 : 189 : tree _q20 = gimple_assign_rhs1 (_a1);
17110 : 189 : _q20 = do_valueize (valueize, _q20);
17111 : 189 : {
17112 : 189 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _p2 };
17113 : 189 : if (gimple_simplify_619 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
17114 : 40 : return true;
17115 : : }
17116 : 149 : switch (TREE_CODE (_p2))
17117 : : {
17118 : 149 : case SSA_NAME:
17119 : 149 : if (gimple *_d2 = get_def (valueize, _p2))
17120 : : {
17121 : 149 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17122 : 58 : switch (gimple_assign_rhs_code (_a2))
17123 : : {
17124 : 58 : case NEGATE_EXPR:
17125 : 58 : {
17126 : 58 : tree _q50 = gimple_assign_rhs1 (_a2);
17127 : 58 : _q50 = do_valueize (valueize, _q50);
17128 : 58 : {
17129 : 58 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _q50 };
17130 : 58 : if (gimple_simplify_620 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
17131 : 0 : return true;
17132 : : }
17133 : 58 : break;
17134 : : }
17135 : : default:;
17136 : : }
17137 : : }
17138 : : break;
17139 : : default:;
17140 : : }
17141 : : break;
17142 : : }
17143 : : default:;
17144 : : }
17145 : : }
17146 : : break;
17147 : 2589 : default:;
17148 : : }
17149 : 2589 : switch (TREE_CODE (_p1))
17150 : : {
17151 : 1423 : case SSA_NAME:
17152 : 1423 : if (gimple *_d1 = get_def (valueize, _p1))
17153 : : {
17154 : 769 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17155 : 696 : switch (gimple_assign_rhs_code (_a1))
17156 : : {
17157 : 186 : case NEGATE_EXPR:
17158 : 186 : {
17159 : 186 : tree _q30 = gimple_assign_rhs1 (_a1);
17160 : 186 : _q30 = do_valueize (valueize, _q30);
17161 : 186 : {
17162 : 186 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _p2 };
17163 : 186 : if (gimple_simplify_619 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
17164 : 0 : return true;
17165 : : }
17166 : 186 : break;
17167 : : }
17168 : : default:;
17169 : : }
17170 : : }
17171 : : break;
17172 : 2589 : default:;
17173 : : }
17174 : 2589 : switch (TREE_CODE (_p2))
17175 : : {
17176 : 2359 : case SSA_NAME:
17177 : 2359 : if (gimple *_d1 = get_def (valueize, _p2))
17178 : : {
17179 : 1341 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17180 : 1334 : switch (gimple_assign_rhs_code (_a1))
17181 : : {
17182 : 300 : case NEGATE_EXPR:
17183 : 300 : {
17184 : 300 : tree _q40 = gimple_assign_rhs1 (_a1);
17185 : 300 : _q40 = do_valueize (valueize, _q40);
17186 : 300 : {
17187 : 300 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q40 };
17188 : 300 : if (gimple_simplify_621 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
17189 : 12 : return true;
17190 : : }
17191 : 288 : break;
17192 : : }
17193 : : default:;
17194 : : }
17195 : : }
17196 : : break;
17197 : 2577 : default:;
17198 : : }
17199 : 2577 : switch (TREE_CODE (_p1))
17200 : : {
17201 : 1411 : case SSA_NAME:
17202 : 1411 : if (gimple *_d1 = get_def (valueize, _p1))
17203 : : {
17204 : 757 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17205 : 696 : switch (gimple_assign_rhs_code (_a1))
17206 : : {
17207 : 186 : case NEGATE_EXPR:
17208 : 186 : {
17209 : 186 : tree _q30 = gimple_assign_rhs1 (_a1);
17210 : 186 : _q30 = do_valueize (valueize, _q30);
17211 : 186 : switch (TREE_CODE (_p2))
17212 : : {
17213 : 186 : case SSA_NAME:
17214 : 186 : if (gimple *_d2 = get_def (valueize, _p2))
17215 : : {
17216 : 177 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17217 : 231 : switch (gimple_assign_rhs_code (_a2))
17218 : : {
17219 : 91 : case NEGATE_EXPR:
17220 : 91 : {
17221 : 91 : tree _q50 = gimple_assign_rhs1 (_a2);
17222 : 91 : _q50 = do_valueize (valueize, _q50);
17223 : 91 : {
17224 : 91 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q50 };
17225 : 91 : if (gimple_simplify_620 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
17226 : 0 : return true;
17227 : : }
17228 : 91 : break;
17229 : : }
17230 : : default:;
17231 : : }
17232 : : }
17233 : : break;
17234 : : default:;
17235 : : }
17236 : : break;
17237 : : }
17238 : : default:;
17239 : : }
17240 : : }
17241 : : break;
17242 : : default:;
17243 : : }
17244 : : return false;
17245 : : }
17246 : :
17247 : : bool
17248 : 1082 : gimple_simplify_CFN_BUILT_IN_FMAL (gimple_match_op *res_op, gimple_seq *seq,
17249 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
17250 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
17251 : : {
17252 : 1082 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
17253 : 1082 : switch (TREE_CODE (_p0))
17254 : : {
17255 : 865 : case SSA_NAME:
17256 : 865 : if (gimple *_d1 = get_def (valueize, _p0))
17257 : : {
17258 : 360 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17259 : 247 : switch (gimple_assign_rhs_code (_a1))
17260 : : {
17261 : 2 : case NEGATE_EXPR:
17262 : 2 : {
17263 : 2 : tree _q20 = gimple_assign_rhs1 (_a1);
17264 : 2 : _q20 = do_valueize (valueize, _q20);
17265 : 2 : {
17266 : 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _p2 };
17267 : 2 : if (gimple_simplify_619 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
17268 : 0 : return true;
17269 : : }
17270 : 2 : switch (TREE_CODE (_p2))
17271 : : {
17272 : 2 : case SSA_NAME:
17273 : 2 : if (gimple *_d2 = get_def (valueize, _p2))
17274 : : {
17275 : 2 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17276 : 0 : switch (gimple_assign_rhs_code (_a2))
17277 : : {
17278 : 0 : case NEGATE_EXPR:
17279 : 0 : {
17280 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
17281 : 0 : _q50 = do_valueize (valueize, _q50);
17282 : 0 : {
17283 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _q50 };
17284 : 0 : if (gimple_simplify_620 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
17285 : 0 : return true;
17286 : : }
17287 : 0 : break;
17288 : : }
17289 : : default:;
17290 : : }
17291 : : }
17292 : : break;
17293 : : default:;
17294 : : }
17295 : : break;
17296 : : }
17297 : : default:;
17298 : : }
17299 : : }
17300 : : break;
17301 : 1082 : default:;
17302 : : }
17303 : 1082 : switch (TREE_CODE (_p1))
17304 : : {
17305 : 65 : case SSA_NAME:
17306 : 65 : if (gimple *_d1 = get_def (valueize, _p1))
17307 : : {
17308 : 40 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17309 : 36 : switch (gimple_assign_rhs_code (_a1))
17310 : : {
17311 : 2 : case NEGATE_EXPR:
17312 : 2 : {
17313 : 2 : tree _q30 = gimple_assign_rhs1 (_a1);
17314 : 2 : _q30 = do_valueize (valueize, _q30);
17315 : 2 : {
17316 : 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _p2 };
17317 : 2 : if (gimple_simplify_619 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
17318 : 0 : return true;
17319 : : }
17320 : 2 : break;
17321 : : }
17322 : : default:;
17323 : : }
17324 : : }
17325 : : break;
17326 : 1082 : default:;
17327 : : }
17328 : 1082 : switch (TREE_CODE (_p2))
17329 : : {
17330 : 877 : case SSA_NAME:
17331 : 877 : if (gimple *_d1 = get_def (valueize, _p2))
17332 : : {
17333 : 548 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17334 : 545 : switch (gimple_assign_rhs_code (_a1))
17335 : : {
17336 : 0 : case NEGATE_EXPR:
17337 : 0 : {
17338 : 0 : tree _q40 = gimple_assign_rhs1 (_a1);
17339 : 0 : _q40 = do_valueize (valueize, _q40);
17340 : 0 : {
17341 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q40 };
17342 : 0 : if (gimple_simplify_621 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
17343 : 0 : return true;
17344 : : }
17345 : 0 : break;
17346 : : }
17347 : : default:;
17348 : : }
17349 : : }
17350 : : break;
17351 : 1082 : default:;
17352 : : }
17353 : 1082 : switch (TREE_CODE (_p1))
17354 : : {
17355 : 65 : case SSA_NAME:
17356 : 65 : if (gimple *_d1 = get_def (valueize, _p1))
17357 : : {
17358 : 40 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17359 : 36 : switch (gimple_assign_rhs_code (_a1))
17360 : : {
17361 : 2 : case NEGATE_EXPR:
17362 : 2 : {
17363 : 2 : tree _q30 = gimple_assign_rhs1 (_a1);
17364 : 2 : _q30 = do_valueize (valueize, _q30);
17365 : 2 : switch (TREE_CODE (_p2))
17366 : : {
17367 : 2 : case SSA_NAME:
17368 : 2 : if (gimple *_d2 = get_def (valueize, _p2))
17369 : : {
17370 : 2 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17371 : 0 : switch (gimple_assign_rhs_code (_a2))
17372 : : {
17373 : 0 : case NEGATE_EXPR:
17374 : 0 : {
17375 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
17376 : 0 : _q50 = do_valueize (valueize, _q50);
17377 : 0 : {
17378 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q50 };
17379 : 0 : if (gimple_simplify_620 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
17380 : 0 : return true;
17381 : : }
17382 : 0 : break;
17383 : : }
17384 : : default:;
17385 : : }
17386 : : }
17387 : : break;
17388 : : default:;
17389 : : }
17390 : : break;
17391 : : }
17392 : : default:;
17393 : : }
17394 : : }
17395 : : break;
17396 : : default:;
17397 : : }
17398 : : return false;
17399 : : }
17400 : :
17401 : : bool
17402 : 3895 : gimple_simplify_CFN_FNMA (gimple_match_op *res_op, gimple_seq *seq,
17403 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
17404 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
17405 : : {
17406 : 3895 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
17407 : 3895 : switch (TREE_CODE (_p0))
17408 : : {
17409 : 3895 : case SSA_NAME:
17410 : 3895 : if (gimple *_d1 = get_def (valueize, _p0))
17411 : : {
17412 : 3843 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17413 : 5755 : switch (gimple_assign_rhs_code (_a1))
17414 : : {
17415 : 0 : case NEGATE_EXPR:
17416 : 0 : {
17417 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
17418 : 0 : _q20 = do_valueize (valueize, _q20);
17419 : 0 : {
17420 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _p2 };
17421 : 0 : if (gimple_simplify_624 (res_op, seq, valueize, type, captures))
17422 : 0 : return true;
17423 : : }
17424 : 0 : switch (TREE_CODE (_p2))
17425 : : {
17426 : 0 : case SSA_NAME:
17427 : 0 : if (gimple *_d2 = get_def (valueize, _p2))
17428 : : {
17429 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17430 : 0 : switch (gimple_assign_rhs_code (_a2))
17431 : : {
17432 : 0 : case NEGATE_EXPR:
17433 : 0 : {
17434 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
17435 : 0 : _q50 = do_valueize (valueize, _q50);
17436 : 0 : {
17437 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _q50 };
17438 : 0 : if (gimple_simplify_625 (res_op, seq, valueize, type, captures))
17439 : 0 : return true;
17440 : : }
17441 : 0 : break;
17442 : : }
17443 : : default:;
17444 : : }
17445 : : }
17446 : : break;
17447 : : default:;
17448 : : }
17449 : : break;
17450 : : }
17451 : : default:;
17452 : : }
17453 : : }
17454 : : break;
17455 : 3895 : default:;
17456 : : }
17457 : 3895 : switch (TREE_CODE (_p1))
17458 : : {
17459 : 3875 : case SSA_NAME:
17460 : 3875 : if (gimple *_d1 = get_def (valueize, _p1))
17461 : : {
17462 : 3849 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17463 : 5783 : switch (gimple_assign_rhs_code (_a1))
17464 : : {
17465 : 1 : case NEGATE_EXPR:
17466 : 1 : {
17467 : 1 : tree _q30 = gimple_assign_rhs1 (_a1);
17468 : 1 : _q30 = do_valueize (valueize, _q30);
17469 : 1 : {
17470 : 1 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _p2 };
17471 : 1 : if (gimple_simplify_624 (res_op, seq, valueize, type, captures))
17472 : 1 : return true;
17473 : : }
17474 : 0 : break;
17475 : : }
17476 : : default:;
17477 : : }
17478 : : }
17479 : : break;
17480 : 3894 : default:;
17481 : : }
17482 : 3894 : switch (TREE_CODE (_p2))
17483 : : {
17484 : 3848 : case SSA_NAME:
17485 : 3848 : if (gimple *_d1 = get_def (valueize, _p2))
17486 : : {
17487 : 3835 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17488 : 3014 : switch (gimple_assign_rhs_code (_a1))
17489 : : {
17490 : 791 : case NEGATE_EXPR:
17491 : 791 : {
17492 : 791 : tree _q40 = gimple_assign_rhs1 (_a1);
17493 : 791 : _q40 = do_valueize (valueize, _q40);
17494 : 791 : {
17495 : 791 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q40 };
17496 : 791 : if (canonicalize_math_after_vectorization_p ()
17497 : : )
17498 : : {
17499 : 791 : gimple_seq *lseq = seq;
17500 : 791 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2375;
17501 : 791 : {
17502 : 791 : res_op->set_op (CFN_FNMS, type, 3);
17503 : 791 : res_op->ops[0] = captures[0];
17504 : 791 : res_op->ops[1] = captures[1];
17505 : 791 : res_op->ops[2] = captures[2];
17506 : 791 : res_op->resimplify (lseq, valueize);
17507 : 791 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1144, __FILE__, __LINE__, true);
17508 : 791 : return true;
17509 : : }
17510 : 0 : next_after_fail2375:;
17511 : : }
17512 : : }
17513 : 0 : break;
17514 : : }
17515 : : default:;
17516 : : }
17517 : : }
17518 : : break;
17519 : 3103 : default:;
17520 : : }
17521 : 3103 : switch (TREE_CODE (_p1))
17522 : : {
17523 : 3083 : case SSA_NAME:
17524 : 3083 : if (gimple *_d1 = get_def (valueize, _p1))
17525 : : {
17526 : 3070 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17527 : 4506 : switch (gimple_assign_rhs_code (_a1))
17528 : : {
17529 : 0 : case NEGATE_EXPR:
17530 : 0 : {
17531 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
17532 : 0 : _q30 = do_valueize (valueize, _q30);
17533 : 0 : switch (TREE_CODE (_p2))
17534 : : {
17535 : 0 : case SSA_NAME:
17536 : 0 : if (gimple *_d2 = get_def (valueize, _p2))
17537 : : {
17538 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17539 : 0 : switch (gimple_assign_rhs_code (_a2))
17540 : : {
17541 : 0 : case NEGATE_EXPR:
17542 : 0 : {
17543 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
17544 : 0 : _q50 = do_valueize (valueize, _q50);
17545 : 0 : {
17546 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q50 };
17547 : 0 : if (gimple_simplify_625 (res_op, seq, valueize, type, captures))
17548 : 0 : return true;
17549 : : }
17550 : 0 : break;
17551 : : }
17552 : : default:;
17553 : : }
17554 : : }
17555 : : break;
17556 : : default:;
17557 : : }
17558 : : break;
17559 : : }
17560 : : default:;
17561 : : }
17562 : : }
17563 : : break;
17564 : : default:;
17565 : : }
17566 : : return false;
17567 : : }
17568 : :
17569 : : bool
17570 : 607967 : gimple_simplify_VEC_PERM_EXPR (gimple_match_op *res_op, gimple_seq *seq,
17571 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
17572 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
17573 : : {
17574 : 607967 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
17575 : 607967 : switch (TREE_CODE (_p0))
17576 : : {
17577 : 592505 : case SSA_NAME:
17578 : 592505 : if (gimple *_d1 = get_def (valueize, _p0))
17579 : : {
17580 : 487466 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17581 : 856781 : switch (gimple_assign_rhs_code (_a1))
17582 : : {
17583 : 19716 : case PLUS_EXPR:
17584 : 19716 : {
17585 : 19716 : tree _q20 = gimple_assign_rhs1 (_a1);
17586 : 19716 : _q20 = do_valueize (valueize, _q20);
17587 : 19716 : tree _q21 = gimple_assign_rhs2 (_a1);
17588 : 19716 : _q21 = do_valueize (valueize, _q21);
17589 : 19716 : if (tree_swap_operands_p (_q20, _q21))
17590 : 1178 : std::swap (_q20, _q21);
17591 : 19716 : switch (TREE_CODE (_p1))
17592 : : {
17593 : 16192 : case SSA_NAME:
17594 : 16192 : if (gimple *_d2 = get_def (valueize, _p1))
17595 : : {
17596 : 16192 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17597 : 16278 : switch (gimple_assign_rhs_code (_a2))
17598 : : {
17599 : 2640 : case MINUS_EXPR:
17600 : 2640 : {
17601 : 2640 : tree _q50 = gimple_assign_rhs1 (_a2);
17602 : 2640 : _q50 = do_valueize (valueize, _q50);
17603 : 2640 : tree _q51 = gimple_assign_rhs2 (_a2);
17604 : 2640 : _q51 = do_valueize (valueize, _q51);
17605 : 2640 : switch (TREE_CODE (_p2))
17606 : : {
17607 : 2640 : case VECTOR_CST:
17608 : 2640 : {
17609 : 2640 : {
17610 : 2640 : tree captures[5] ATTRIBUTE_UNUSED = { _q20, _q21, _q50, _q51, _p2 };
17611 : 2640 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, PLUS_EXPR, MINUS_EXPR))
17612 : 0 : return true;
17613 : : }
17614 : 2640 : break;
17615 : : }
17616 : : default:;
17617 : : }
17618 : : break;
17619 : : }
17620 : : default:;
17621 : : }
17622 : : }
17623 : : break;
17624 : : default:;
17625 : : }
17626 : 607967 : break;
17627 : : }
17628 : 4913 : case MINUS_EXPR:
17629 : 4913 : {
17630 : 4913 : tree _q20 = gimple_assign_rhs1 (_a1);
17631 : 4913 : _q20 = do_valueize (valueize, _q20);
17632 : 4913 : tree _q21 = gimple_assign_rhs2 (_a1);
17633 : 4913 : _q21 = do_valueize (valueize, _q21);
17634 : 4913 : switch (TREE_CODE (_p1))
17635 : : {
17636 : 4382 : case SSA_NAME:
17637 : 4382 : if (gimple *_d2 = get_def (valueize, _p1))
17638 : : {
17639 : 4382 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17640 : 4382 : switch (gimple_assign_rhs_code (_a2))
17641 : : {
17642 : 3594 : case PLUS_EXPR:
17643 : 3594 : {
17644 : 3594 : tree _q50 = gimple_assign_rhs1 (_a2);
17645 : 3594 : _q50 = do_valueize (valueize, _q50);
17646 : 3594 : tree _q51 = gimple_assign_rhs2 (_a2);
17647 : 3594 : _q51 = do_valueize (valueize, _q51);
17648 : 3594 : if (tree_swap_operands_p (_q50, _q51))
17649 : 454 : std::swap (_q50, _q51);
17650 : 3594 : switch (TREE_CODE (_p2))
17651 : : {
17652 : 3594 : case VECTOR_CST:
17653 : 3594 : {
17654 : 3594 : {
17655 : 3594 : tree captures[5] ATTRIBUTE_UNUSED = { _q20, _q21, _q50, _q51, _p2 };
17656 : 3594 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, MINUS_EXPR, PLUS_EXPR))
17657 : 0 : return true;
17658 : : }
17659 : 3594 : break;
17660 : : }
17661 : : default:;
17662 : : }
17663 : 607967 : break;
17664 : : }
17665 : : default:;
17666 : : }
17667 : : }
17668 : : break;
17669 : : default:;
17670 : : }
17671 : : break;
17672 : : }
17673 : : default:;
17674 : : }
17675 : : }
17676 : : break;
17677 : 607967 : default:;
17678 : : }
17679 : 607967 : switch (TREE_CODE (_p2))
17680 : : {
17681 : 596010 : case VECTOR_CST:
17682 : 596010 : {
17683 : 596010 : {
17684 : 596010 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _p2 };
17685 : 596010 : {
17686 : 596010 : tree op0 = captures[0], op1 = captures[1], op2 = captures[2];
17687 : 596010 : machine_mode result_mode = TYPE_MODE (type);
17688 : 596010 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (op0));
17689 : 596010 : vec_perm_builder builder;
17690 : 596010 : if (tree_to_vec_perm_builder (&builder, op2)
17691 : : )
17692 : : {
17693 : 595998 : {
17694 : 595998 : poly_uint64 nelts = TYPE_VECTOR_SUBPARTS (type);
17695 : 595998 : bool single_arg = (op0 == op1);
17696 : 1027979 : vec_perm_indices sel (builder, single_arg ? 1 : 2, nelts);
17697 : 595998 : if (sel.series_p (0, 1, 0, 1)
17698 : : )
17699 : : {
17700 : 350 : gimple_seq *lseq = seq;
17701 : 350 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2377;
17702 : 350 : {
17703 : 350 : tree tem;
17704 : 350 : tem = op0;
17705 : 350 : res_op->set_value (tem);
17706 : 350 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1146, __FILE__, __LINE__, true);
17707 : 350 : return true;
17708 : : }
17709 : 0 : next_after_fail2377:;
17710 : : }
17711 : : else
17712 : : {
17713 : 595648 : if (sel.series_p (0, 1, nelts, 1)
17714 : : )
17715 : : {
17716 : 16 : gimple_seq *lseq = seq;
17717 : 16 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2378;
17718 : 16 : {
17719 : 16 : tree tem;
17720 : 16 : tem = op1;
17721 : 16 : res_op->set_value (tem);
17722 : 16 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1147, __FILE__, __LINE__, true);
17723 : 16 : return true;
17724 : : }
17725 : 0 : next_after_fail2378:;
17726 : : }
17727 : : else
17728 : : {
17729 : 595632 : {
17730 : 595632 : if (!single_arg)
17731 : : {
17732 : 431798 : if (sel.all_from_input_p (0))
17733 : : op1 = op0;
17734 : 427437 : else if (sel.all_from_input_p (1))
17735 : : {
17736 : 1849 : op0 = op1;
17737 : 1849 : sel.rotate_inputs (1);
17738 : : }
17739 : 425588 : else if (known_ge (poly_uint64 (sel[0]), nelts))
17740 : : {
17741 : 13644 : std::swap (op0, op1);
17742 : 13644 : sel.rotate_inputs (1);
17743 : : }
17744 : : }
17745 : 595632 : gassign *def;
17746 : 595632 : tree cop0 = op0, cop1 = op1;
17747 : 595632 : if (TREE_CODE (op0) == SSA_NAME
17748 : 581076 : && (def = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (op0)))
17749 : 1139849 : && gimple_assign_rhs_code (def) == CONSTRUCTOR)
17750 : 5073 : cop0 = gimple_assign_rhs1 (def);
17751 : 595632 : if (TREE_CODE (op1) == SSA_NAME
17752 : 577887 : && (def = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (op1)))
17753 : 1139045 : && gimple_assign_rhs_code (def) == CONSTRUCTOR)
17754 : 5359 : cop1 = gimple_assign_rhs1 (def);
17755 : 595632 : tree t;
17756 : 595632 : if ((TREE_CODE (cop0) == VECTOR_CST
17757 : 583711 : || TREE_CODE (cop0) == CONSTRUCTOR)
17758 : 16994 : && (TREE_CODE (cop1) == VECTOR_CST
17759 : 15532 : || TREE_CODE (cop1) == CONSTRUCTOR)
17760 : 600598 : && (t = fold_vec_perm (type, cop0, cop1, sel))
17761 : : )
17762 : : {
17763 : 1692 : gimple_seq *lseq = seq;
17764 : 1692 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2379;
17765 : 1692 : {
17766 : 1692 : tree tem;
17767 : 1692 : tem = t;
17768 : 1692 : res_op->set_value (tem);
17769 : 1692 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1148, __FILE__, __LINE__, true);
17770 : 1692 : return true;
17771 : : }
17772 : 0 : next_after_fail2379:;
17773 : : }
17774 : : else
17775 : : {
17776 : 593940 : {
17777 : 593940 : bool changed = (op0 == op1 && !single_arg);
17778 : 593940 : tree ins = NULL_TREE;
17779 : 593940 : unsigned at = 0;
17780 : 593940 : if (op_mode != BLKmode
17781 : 586369 : && (TREE_CODE (cop0) == VECTOR_CST
17782 : 574499 : || TREE_CODE (cop0) == CONSTRUCTOR
17783 : 571735 : || TREE_CODE (cop1) == VECTOR_CST
17784 : 558087 : || TREE_CODE (cop1) == CONSTRUCTOR))
17785 : : {
17786 : 29753 : bool insert_first_p = sel.series_p (1, 1, nelts + 1, 1);
17787 : 29753 : if (insert_first_p)
17788 : : {
17789 : 941 : at = 0;
17790 : 941 : if ((ins = fold_read_from_vector (cop0, sel[0])))
17791 : 29753 : op0 = op1;
17792 : : }
17793 : 29753 : if (!insert_first_p || (!ins && maybe_eq (nelts, 2u)))
17794 : : {
17795 : 29407 : unsigned int encoded_nelts = sel.encoding ().encoded_nelts ();
17796 : 64184 : for (at = 0; at < encoded_nelts; ++at)
17797 : 64144 : if (maybe_ne (sel[at], at))
17798 : : break;
17799 : 29407 : if (at < encoded_nelts
17800 : 29407 : && (known_eq (at + 1, nelts)
17801 : 28010 : || sel.series_p (at + 1, 1, at + 1, 1)))
17802 : : {
17803 : 1434 : if (known_lt (poly_uint64 (sel[at]), nelts))
17804 : 0 : ins = fold_read_from_vector (cop0, sel[at]);
17805 : : else
17806 : 1434 : ins = fold_read_from_vector (cop1, sel[at] - nelts);
17807 : : }
17808 : : }
17809 : : }
17810 : 593940 : if (!ins && sel.encoding () != builder)
17811 : : {
17812 : 17916 : tree oldop2 = op2;
17813 : 17916 : if (sel.ninputs () == 2
17814 : 17916 : || can_vec_perm_const_p (result_mode, op_mode, sel, false))
17815 : 17206 : op2 = vec_perm_indices_to_tree (TREE_TYPE (op2), sel);
17816 : : else
17817 : : {
17818 : 710 : vec_perm_indices sel2 (builder, 2, nelts);
17819 : 710 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false))
17820 : 164 : op2 = vec_perm_indices_to_tree (TREE_TYPE (op2), sel2);
17821 : : else
17822 : 546 : op2 = vec_perm_indices_to_tree (TREE_TYPE (op2), sel);
17823 : 710 : }
17824 : 17916 : if (!operand_equal_p (op2, oldop2, 0))
17825 : 17752 : changed = true;
17826 : : }
17827 : 593940 : if (ins
17828 : : )
17829 : : {
17830 : 1049 : gimple_seq *lseq = seq;
17831 : 1049 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2380;
17832 : 1049 : {
17833 : 1049 : res_op->set_op (BIT_INSERT_EXPR, type, 3);
17834 : 1049 : res_op->ops[0] = op0;
17835 : 1049 : res_op->ops[1] = ins;
17836 : 1049 : res_op->ops[2] = bitsize_int (at * vector_element_bits (type));
17837 : 1049 : res_op->resimplify (lseq, valueize);
17838 : 1049 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1149, __FILE__, __LINE__, true);
17839 : 25207 : return true;
17840 : : }
17841 : 0 : next_after_fail2380:;
17842 : : }
17843 : : else
17844 : : {
17845 : 592891 : if (changed
17846 : : )
17847 : : {
17848 : 22100 : gimple_seq *lseq = seq;
17849 : 22100 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2381;
17850 : 22100 : {
17851 : 22100 : res_op->set_op (VEC_PERM_EXPR, type, 3);
17852 : 22100 : res_op->ops[0] = op0;
17853 : 22100 : res_op->ops[1] = op1;
17854 : 22100 : res_op->ops[2] = op2;
17855 : 22100 : res_op->resimplify (lseq, valueize);
17856 : 22100 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1150, __FILE__, __LINE__, true);
17857 : 22100 : return true;
17858 : : }
17859 : 0 : next_after_fail2381:;
17860 : : }
17861 : : }
17862 : : }
17863 : : }
17864 : : }
17865 : : }
17866 : : }
17867 : 595998 : }
17868 : : }
17869 : 25207 : }
17870 : : }
17871 : 570803 : break;
17872 : : }
17873 : 582760 : default:;
17874 : : }
17875 : 582760 : switch (TREE_CODE (_p0))
17876 : : {
17877 : 567542 : case SSA_NAME:
17878 : 567542 : if (gimple *_d1 = get_def (valueize, _p0))
17879 : : {
17880 : 482128 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17881 : 847678 : switch (gimple_assign_rhs_code (_a1))
17882 : : {
17883 : 21001 : case VEC_PERM_EXPR:
17884 : 21001 : {
17885 : 21001 : tree _q20 = gimple_assign_rhs1 (_a1);
17886 : 21001 : _q20 = do_valueize (valueize, _q20);
17887 : 21001 : tree _q21 = gimple_assign_rhs2 (_a1);
17888 : 21001 : _q21 = do_valueize (valueize, _q21);
17889 : 21001 : tree _q22 = gimple_assign_rhs3 (_a1);
17890 : 21001 : _q22 = do_valueize (valueize, _q22);
17891 : 21001 : switch (TREE_CODE (_q22))
17892 : : {
17893 : 20975 : case VECTOR_CST:
17894 : 20975 : {
17895 : 20975 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
17896 : : {
17897 : 891 : switch (TREE_CODE (_p2))
17898 : : {
17899 : 891 : case VECTOR_CST:
17900 : 891 : {
17901 : 891 : {
17902 : 891 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p2 };
17903 : 891 : if (TYPE_VECTOR_SUBPARTS (type).is_constant ()
17904 : : )
17905 : : {
17906 : 891 : {
17907 : 891 : machine_mode result_mode = TYPE_MODE (type);
17908 : 891 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (captures[1]));
17909 : 891 : int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
17910 : 891 : vec_perm_builder builder0;
17911 : 891 : vec_perm_builder builder1;
17912 : 891 : vec_perm_builder builder2 (nelts, nelts, 1);
17913 : 891 : if (tree_to_vec_perm_builder (&builder0, captures[3])
17914 : 891 : && tree_to_vec_perm_builder (&builder1, captures[4])
17915 : : )
17916 : : {
17917 : 891 : {
17918 : 891 : vec_perm_indices sel0 (builder0, 2, nelts);
17919 : 891 : vec_perm_indices sel1 (builder1, 1, nelts);
17920 : 7423 : for (int i = 0; i < nelts; i++)
17921 : 6532 : builder2.quick_push (sel0[sel1[i].to_constant ()]);
17922 : 891 : vec_perm_indices sel2 (builder2, 2, nelts);
17923 : 891 : tree op0 = NULL_TREE;
17924 : 891 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
17925 : 891 : || (single_use (captures[0])
17926 : 394 : ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, false)
17927 : 0 : || !can_vec_perm_const_p (result_mode, op_mode, sel1, false))
17928 : 394 : : !can_vec_perm_const_p (result_mode, op_mode, sel1, false)))
17929 : 497 : op0 = vec_perm_indices_to_tree (TREE_TYPE (captures[4]), sel2);
17930 : 497 : if (op0
17931 : : )
17932 : : {
17933 : 497 : gimple_seq *lseq = seq;
17934 : 497 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2382;
17935 : 497 : {
17936 : 497 : res_op->set_op (VEC_PERM_EXPR, type, 3);
17937 : 497 : res_op->ops[0] = captures[1];
17938 : 497 : res_op->ops[1] = captures[2];
17939 : 497 : res_op->ops[2] = op0;
17940 : 497 : res_op->resimplify (lseq, valueize);
17941 : 497 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1151, __FILE__, __LINE__, true);
17942 : 497 : return true;
17943 : : }
17944 : 0 : next_after_fail2382:;
17945 : : }
17946 : 891 : }
17947 : : }
17948 : 891 : }
17949 : : }
17950 : : }
17951 : 394 : break;
17952 : : }
17953 : : default:;
17954 : : }
17955 : : }
17956 : : break;
17957 : : }
17958 : : default:;
17959 : : }
17960 : : break;
17961 : : }
17962 : : default:;
17963 : : }
17964 : : }
17965 : : break;
17966 : 582263 : default:;
17967 : : }
17968 : 582263 : if (gimple_vec_same_elem_p (_p0, valueize))
17969 : : {
17970 : 11745 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
17971 : : {
17972 : 0 : {
17973 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p2 };
17974 : 0 : if (types_match (type, TREE_TYPE (captures[0]))
17975 : : )
17976 : : {
17977 : 0 : gimple_seq *lseq = seq;
17978 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2383;
17979 : 0 : {
17980 : 0 : tree tem;
17981 : 0 : tem = captures[0];
17982 : 0 : res_op->set_value (tem);
17983 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1152, __FILE__, __LINE__, true);
17984 : 0 : return true;
17985 : : }
17986 : 0 : next_after_fail2383:;
17987 : : }
17988 : : else
17989 : : {
17990 : 0 : {
17991 : 0 : tree elem = uniform_vector_p (captures[0]);
17992 : 0 : if (elem
17993 : : )
17994 : : {
17995 : 0 : gimple_seq *lseq = seq;
17996 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2384;
17997 : 0 : {
17998 : 0 : tree tem;
17999 : 0 : tem = build_vector_from_val (type, elem);
18000 : 0 : res_op->set_value (tem);
18001 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1153, __FILE__, __LINE__, true);
18002 : 0 : return true;
18003 : : }
18004 : 0 : next_after_fail2384:;
18005 : : }
18006 : : }
18007 : : }
18008 : : }
18009 : : }
18010 : : }
18011 : 582263 : switch (TREE_CODE (_p1))
18012 : : {
18013 : 562872 : case SSA_NAME:
18014 : 562872 : if (gimple *_d1 = get_def (valueize, _p1))
18015 : : {
18016 : 480173 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
18017 : 848524 : switch (gimple_assign_rhs_code (_a1))
18018 : : {
18019 : 19810 : case VEC_PERM_EXPR:
18020 : 19810 : {
18021 : 19810 : tree _q30 = gimple_assign_rhs1 (_a1);
18022 : 19810 : _q30 = do_valueize (valueize, _q30);
18023 : 19810 : tree _q31 = gimple_assign_rhs2 (_a1);
18024 : 19810 : _q31 = do_valueize (valueize, _q31);
18025 : 19810 : tree _q32 = gimple_assign_rhs3 (_a1);
18026 : 19810 : _q32 = do_valueize (valueize, _q32);
18027 : 19810 : switch (TREE_CODE (_q32))
18028 : : {
18029 : 19810 : case VECTOR_CST:
18030 : 19810 : {
18031 : 19810 : switch (TREE_CODE (_p2))
18032 : : {
18033 : 19810 : case VECTOR_CST:
18034 : 19810 : {
18035 : 19810 : {
18036 : 19810 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32, _p2 };
18037 : 19810 : if (TYPE_VECTOR_SUBPARTS (type).is_constant ()
18038 : : )
18039 : : {
18040 : 19810 : {
18041 : 19810 : machine_mode result_mode = TYPE_MODE (type);
18042 : 19810 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (captures[2]));
18043 : 19810 : int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
18044 : 19810 : vec_perm_builder builder0;
18045 : 19810 : vec_perm_builder builder1;
18046 : 19810 : vec_perm_builder builder2 (nelts, nelts, 2);
18047 : 19810 : if (tree_to_vec_perm_builder (&builder0, captures[4])
18048 : 19810 : && tree_to_vec_perm_builder (&builder1, captures[5])
18049 : : )
18050 : : {
18051 : 19810 : {
18052 : 19810 : vec_perm_indices sel0 (builder0, 2, nelts);
18053 : 19810 : vec_perm_indices sel1 (builder1, 2, nelts);
18054 : 19810 : bool use_1 = false, use_2 = false;
18055 : 208304 : for (int i = 0; i < nelts; i++)
18056 : : {
18057 : 188494 : if (known_lt ((poly_uint64)sel1[i], sel1.nelts_per_input ()))
18058 : 91766 : builder2.quick_push (sel1[i]);
18059 : : else
18060 : : {
18061 : 96728 : poly_uint64 j = sel0[(sel1[i] - sel1.nelts_per_input ())
18062 : 96728 : .to_constant ()];
18063 : 96728 : if (known_lt (j, sel0.nelts_per_input ()))
18064 : : use_1 = true;
18065 : : else
18066 : : {
18067 : 50659 : use_2 = true;
18068 : 50659 : j -= sel0.nelts_per_input ();
18069 : : }
18070 : 96728 : builder2.quick_push (j + sel1.nelts_per_input ());
18071 : : }
18072 : : }
18073 : 19810 : if (use_1 ^ use_2
18074 : : )
18075 : : {
18076 : 2137 : {
18077 : 2137 : vec_perm_indices sel2 (builder2, 2, nelts);
18078 : 2137 : tree op0 = NULL_TREE;
18079 : 2137 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
18080 : 2142 : || (single_use (captures[1])
18081 : 1002 : ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, false)
18082 : 5 : || !can_vec_perm_const_p (result_mode, op_mode, sel1, false))
18083 : 997 : : !can_vec_perm_const_p (result_mode, op_mode, sel1, false)))
18084 : 1135 : op0 = vec_perm_indices_to_tree (TREE_TYPE (captures[5]), sel2);
18085 : 1135 : if (op0
18086 : : )
18087 : : {
18088 : 1135 : if (use_1
18089 : : )
18090 : : {
18091 : 701 : gimple_seq *lseq = seq;
18092 : 701 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2385;
18093 : 701 : {
18094 : 701 : res_op->set_op (VEC_PERM_EXPR, type, 3);
18095 : 701 : res_op->ops[0] = captures[0];
18096 : 701 : res_op->ops[1] = captures[2];
18097 : 701 : res_op->ops[2] = op0;
18098 : 701 : res_op->resimplify (lseq, valueize);
18099 : 701 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1154, __FILE__, __LINE__, true);
18100 : 701 : return true;
18101 : : }
18102 : 0 : next_after_fail2385:;
18103 : : }
18104 : : else
18105 : : {
18106 : 434 : if (use_2
18107 : : )
18108 : : {
18109 : 434 : gimple_seq *lseq = seq;
18110 : 434 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2386;
18111 : 434 : {
18112 : 434 : res_op->set_op (VEC_PERM_EXPR, type, 3);
18113 : 434 : res_op->ops[0] = captures[0];
18114 : 434 : res_op->ops[1] = captures[3];
18115 : 434 : res_op->ops[2] = op0;
18116 : 434 : res_op->resimplify (lseq, valueize);
18117 : 434 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1155, __FILE__, __LINE__, true);
18118 : 434 : return true;
18119 : : }
18120 : 0 : next_after_fail2386:;
18121 : : }
18122 : : }
18123 : : }
18124 : 2137 : }
18125 : : }
18126 : 19810 : }
18127 : : }
18128 : 19810 : }
18129 : : }
18130 : : }
18131 : 18675 : break;
18132 : : }
18133 : : default:;
18134 : : }
18135 : : break;
18136 : : }
18137 : : default:;
18138 : : }
18139 : : break;
18140 : : }
18141 : : default:;
18142 : : }
18143 : : }
18144 : : break;
18145 : 581128 : default:;
18146 : : }
18147 : 581128 : switch (TREE_CODE (_p0))
18148 : : {
18149 : 565914 : case SSA_NAME:
18150 : 565914 : if (gimple *_d1 = get_def (valueize, _p0))
18151 : : {
18152 : 480500 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
18153 : 845995 : switch (gimple_assign_rhs_code (_a1))
18154 : : {
18155 : 19448 : case VEC_PERM_EXPR:
18156 : 19448 : {
18157 : 19448 : tree _q20 = gimple_assign_rhs1 (_a1);
18158 : 19448 : _q20 = do_valueize (valueize, _q20);
18159 : 19448 : tree _q21 = gimple_assign_rhs2 (_a1);
18160 : 19448 : _q21 = do_valueize (valueize, _q21);
18161 : 19448 : tree _q22 = gimple_assign_rhs3 (_a1);
18162 : 19448 : _q22 = do_valueize (valueize, _q22);
18163 : 19448 : switch (TREE_CODE (_q22))
18164 : : {
18165 : 19422 : case VECTOR_CST:
18166 : 19422 : {
18167 : 19422 : switch (TREE_CODE (_p2))
18168 : : {
18169 : 19422 : case VECTOR_CST:
18170 : 19422 : {
18171 : 19422 : {
18172 : 19422 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _p2 };
18173 : 19422 : if (TYPE_VECTOR_SUBPARTS (type).is_constant ()
18174 : : )
18175 : : {
18176 : 19422 : {
18177 : 19422 : machine_mode result_mode = TYPE_MODE (type);
18178 : 19422 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (captures[1]));
18179 : 19422 : int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
18180 : 19422 : vec_perm_builder builder0;
18181 : 19422 : vec_perm_builder builder1;
18182 : 19422 : vec_perm_builder builder2 (nelts, nelts, 2);
18183 : 19422 : if (tree_to_vec_perm_builder (&builder0, captures[3])
18184 : 19422 : && tree_to_vec_perm_builder (&builder1, captures[5])
18185 : : )
18186 : : {
18187 : 19422 : {
18188 : 19422 : vec_perm_indices sel0 (builder0, 2, nelts);
18189 : 19422 : vec_perm_indices sel1 (builder1, 2, nelts);
18190 : 19422 : bool use_1 = false, use_2 = false;
18191 : 201776 : for (int i = 0; i < nelts; i++)
18192 : : {
18193 : 182354 : if (known_ge ((poly_uint64)sel1[i], sel1.nelts_per_input ()))
18194 : 88740 : builder2.quick_push (sel1[i]);
18195 : : else
18196 : : {
18197 : 93614 : poly_uint64 j = sel0[sel1[i].to_constant ()];
18198 : 93614 : if (known_lt (j, sel0.nelts_per_input ()))
18199 : : use_1 = true;
18200 : : else
18201 : : {
18202 : 45404 : use_2 = true;
18203 : 45404 : j -= sel0.nelts_per_input ();
18204 : : }
18205 : 93614 : builder2.quick_push (j);
18206 : : }
18207 : : }
18208 : 19422 : if (use_1 ^ use_2
18209 : : )
18210 : : {
18211 : 2982 : {
18212 : 2982 : vec_perm_indices sel2 (builder2, 2, nelts);
18213 : 2982 : tree op0 = NULL_TREE;
18214 : 2982 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
18215 : 2990 : || (single_use (captures[0])
18216 : 1018 : ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, false)
18217 : 8 : || !can_vec_perm_const_p (result_mode, op_mode, sel1, false))
18218 : 1010 : : !can_vec_perm_const_p (result_mode, op_mode, sel1, false)))
18219 : 1964 : op0 = vec_perm_indices_to_tree (TREE_TYPE (captures[5]), sel2);
18220 : 1964 : if (op0
18221 : : )
18222 : : {
18223 : 1964 : if (use_1
18224 : : )
18225 : : {
18226 : 1328 : gimple_seq *lseq = seq;
18227 : 1328 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2387;
18228 : 1328 : {
18229 : 1328 : res_op->set_op (VEC_PERM_EXPR, type, 3);
18230 : 1328 : res_op->ops[0] = captures[1];
18231 : 1328 : res_op->ops[1] = captures[4];
18232 : 1328 : res_op->ops[2] = op0;
18233 : 1328 : res_op->resimplify (lseq, valueize);
18234 : 1328 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1156, __FILE__, __LINE__, true);
18235 : 1328 : return true;
18236 : : }
18237 : 0 : next_after_fail2387:;
18238 : : }
18239 : : else
18240 : : {
18241 : 636 : if (use_2
18242 : : )
18243 : : {
18244 : 636 : gimple_seq *lseq = seq;
18245 : 636 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2388;
18246 : 636 : {
18247 : 636 : res_op->set_op (VEC_PERM_EXPR, type, 3);
18248 : 636 : res_op->ops[0] = captures[2];
18249 : 636 : res_op->ops[1] = captures[4];
18250 : 636 : res_op->ops[2] = op0;
18251 : 636 : res_op->resimplify (lseq, valueize);
18252 : 636 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1157, __FILE__, __LINE__, true);
18253 : 636 : return true;
18254 : : }
18255 : 0 : next_after_fail2388:;
18256 : : }
18257 : : }
18258 : : }
18259 : 2982 : }
18260 : : }
18261 : 19422 : }
18262 : : }
18263 : 19422 : }
18264 : : }
18265 : : }
18266 : 17458 : break;
18267 : : }
18268 : : default:;
18269 : : }
18270 : : break;
18271 : : }
18272 : : default:;
18273 : : }
18274 : : break;
18275 : : }
18276 : : default:;
18277 : : }
18278 : : }
18279 : : break;
18280 : : default:;
18281 : : }
18282 : : return false;
18283 : : }
18284 : : #pragma GCC diagnostic pop
|