re PR tree-optimization/90090 (ICE in mark_reachable_handlers, at tree-eh.c:3938 since r219202)
PR tree-optimization/90090 * tree-ssa-math-opts.c (is_division_by): Ignore divisions that can throw internally. (is_division_by_square): Likewise. Formatting fix. * g++.dg/opt/pr90090.C: New test. From-SVN: r270379
This commit is contained in:
parent
8c996ec644
commit
41b5808d56
@ -1,3 +1,10 @@
|
||||
2019-04-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/90090
|
||||
* tree-ssa-math-opts.c (is_division_by): Ignore divisions that can
|
||||
throw internally.
|
||||
(is_division_by_square): Likewise. Formatting fix.
|
||||
|
||||
2019-04-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56049
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-04-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/90090
|
||||
* g++.dg/opt/pr90090.C: New test.
|
||||
|
||||
2019-04-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56049
|
||||
|
19
gcc/testsuite/g++.dg/opt/pr90090.C
Normal file
19
gcc/testsuite/g++.dg/opt/pr90090.C
Normal file
@ -0,0 +1,19 @@
|
||||
// PR tree-optimization/90090
|
||||
// { dg-do compile }
|
||||
// { dg-options "-Ofast -fno-associative-math -fsignaling-nans -fno-tree-dce -fnon-call-exceptions" }
|
||||
|
||||
double bar (double, double, double, double, double);
|
||||
double baz ();
|
||||
|
||||
double
|
||||
foo (double a)
|
||||
{
|
||||
try
|
||||
{
|
||||
return bar (1.0/a, 2.0/a, 4.0/a, 8.0/a, 16.0/a);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return baz ();
|
||||
}
|
||||
}
|
@ -334,7 +334,8 @@ is_division_by (gimple *use_stmt, tree def)
|
||||
/* Do not recognize x / x as valid division, as we are getting
|
||||
confused later by replacing all immediate uses x in such
|
||||
a stmt. */
|
||||
&& gimple_assign_rhs1 (use_stmt) != def;
|
||||
&& gimple_assign_rhs1 (use_stmt) != def
|
||||
&& !stmt_can_throw_internal (cfun, use_stmt);
|
||||
}
|
||||
|
||||
/* Return TRUE if USE_STMT is a multiplication of DEF by A. */
|
||||
@ -367,13 +368,12 @@ is_division_by_square (gimple *use_stmt, tree def)
|
||||
{
|
||||
if (gimple_code (use_stmt) == GIMPLE_ASSIGN
|
||||
&& gimple_assign_rhs_code (use_stmt) == RDIV_EXPR
|
||||
&& gimple_assign_rhs1 (use_stmt) != gimple_assign_rhs2 (use_stmt))
|
||||
&& gimple_assign_rhs1 (use_stmt) != gimple_assign_rhs2 (use_stmt)
|
||||
&& !stmt_can_throw_internal (cfun, use_stmt))
|
||||
{
|
||||
tree denominator = gimple_assign_rhs2 (use_stmt);
|
||||
if (TREE_CODE (denominator) == SSA_NAME)
|
||||
{
|
||||
return is_square_of (SSA_NAME_DEF_STMT (denominator), def);
|
||||
}
|
||||
return is_square_of (SSA_NAME_DEF_STMT (denominator), def);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user