diff options
author | Jeff Law <law@redhat.com> | 2013-04-03 13:18:09 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2013-04-03 13:18:09 -0600 |
commit | be672e08bbe0d9f210285ec6f3eccf4ff0469d0e (patch) | |
tree | 0a355e4712ab8548abe7e365aa96c85ecd240ec6 /gcc/tree-ssa-dom.c | |
parent | 9eb85f272426b21e010a3ca433348fc7efc88eaa (diff) | |
download | gcc-be672e08bbe0d9f210285ec6f3eccf4ff0469d0e.zip gcc-be672e08bbe0d9f210285ec6f3eccf4ff0469d0e.tar.gz gcc-be672e08bbe0d9f210285ec6f3eccf4ff0469d0e.tar.bz2 |
re PR tree-optimization/56799 (Runfail after r197060+r197082.)
PR tree-optimization/56799
* tree-ssa-dom.c (record_equivalences_from_incoming_edge): Bring
back test for widening conversion erroneously dropped in prior
change.
PR tree-optimization/56799
* gcc.c-torture/execute/pr56799.c: New test.
From-SVN: r197453
Diffstat (limited to 'gcc/tree-ssa-dom.c')
-rw-r--r-- | gcc/tree-ssa-dom.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 29d2bb4..d98a646 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -1151,9 +1151,15 @@ record_equivalences_from_incoming_edge (basic_block bb) { tree old_rhs = gimple_assign_rhs1 (defstmt); - /* If the constant is in the range of the type of OLD_RHS, - then convert the constant and record the equivalence. */ + /* If the conversion widens the original value and + the constant is in the range of the type of OLD_RHS, + then convert the constant and record the equivalence. + + Note that int_fits_type_p does not check the precision + if the upper and lower bounds are OK. */ if (INTEGRAL_TYPE_P (TREE_TYPE (old_rhs)) + && (TYPE_PRECISION (TREE_TYPE (lhs)) + > TYPE_PRECISION (TREE_TYPE (old_rhs))) && int_fits_type_p (rhs, TREE_TYPE (old_rhs))) { tree newval = fold_convert (TREE_TYPE (old_rhs), rhs); |