Do not register edges for statements not understood.
Previously, all gimple_cond types were undserstoof, with float values, this is no longer true. We should gracefully do nothing if the gcond type is not supported. PR tree-optimization/106510 gcc/ * gimple-range-fold.cc (fur_source::register_outgoing_edges): Check for unsupported statements early. gcc/testsuite * gcc.dg/pr106510.c: New.
This commit is contained in:
parent
502605a277
commit
70daecc032
2 changed files with 14 additions and 2 deletions
|
@ -1496,6 +1496,10 @@ fur_source::register_outgoing_edges (gcond *s, irange &lhs_range, edge e0, edge
|
|||
tree name;
|
||||
basic_block bb = gimple_bb (s);
|
||||
|
||||
range_op_handler handler (s);
|
||||
if (!handler)
|
||||
return;
|
||||
|
||||
if (e0)
|
||||
{
|
||||
// If this edge is never taken, ignore it.
|
||||
|
@ -1524,8 +1528,6 @@ fur_source::register_outgoing_edges (gcond *s, irange &lhs_range, edge e0, edge
|
|||
tree ssa2 = gimple_range_ssa_p (gimple_range_operand2 (s));
|
||||
if (ssa1 && ssa2)
|
||||
{
|
||||
range_op_handler handler (s);
|
||||
gcc_checking_assert (handler);
|
||||
if (e0)
|
||||
{
|
||||
relation_kind relation = handler.op1_op2_relation (e0_range);
|
||||
|
|
10
gcc/testsuite/gcc.dg/pr106510.c
Normal file
10
gcc/testsuite/gcc.dg/pr106510.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
void foo ();
|
||||
void ine_ok() {
|
||||
float y, x;
|
||||
if (x < y || x > y || y)
|
||||
foo ();
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue