r10-2587-gcc19f80ceb27cc added a loop over the current statment if there was
a change. Except in some cases it turns out changed will turn from true to false
because instead of doing |= after the fold_stmt, there was an just an `=`.
This fixes that and now we loop even if fold_stmt changed the statement and
there was a local fold that happened.
gcc/ChangeLog:
* tree-ssa-forwprop.cc (pass_forwprop::execute): Use `|=` for
changed on the local folding.
Signed-off-by: Andrew Pinski <[email protected]>
---
gcc/tree-ssa-forwprop.cc | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
index fafc4d6b77a..bcdec1aadc3 100644
--- a/gcc/tree-ssa-forwprop.cc
+++ b/gcc/tree-ssa-forwprop.cc
@@ -4564,7 +4564,7 @@ pass_forwprop::execute (function *fun)
bitmap_set_bit (to_purge, bb->index);
if (did_something == 2)
cfg_changed = true;
- changed = did_something != 0;
+ changed |= did_something != 0;
}
else if ((code == PLUS_EXPR
|| code == BIT_IOR_EXPR
@@ -4580,15 +4580,15 @@ pass_forwprop::execute (function *fun)
}
else if (code == CONSTRUCTOR
&& TREE_CODE (TREE_TYPE (rhs1)) == VECTOR_TYPE)
- changed = simplify_vector_constructor (&gsi);
+ changed |= simplify_vector_constructor (&gsi);
else if (code == ARRAY_REF)
- changed = simplify_count_trailing_zeroes (&gsi);
+ changed |= simplify_count_trailing_zeroes (&gsi);
break;
}
case GIMPLE_SWITCH:
- changed = simplify_gimple_switch (as_a <gswitch *> (stmt),
- edges_to_remove);
+ changed |= simplify_gimple_switch (as_a <gswitch *> (stmt),
+ edges_to_remove);
break;
case GIMPLE_COND:
@@ -4597,7 +4597,7 @@ pass_forwprop::execute (function *fun)
(as_a <gcond *> (stmt));
if (did_something == 2)
cfg_changed = true;
- changed = did_something != 0;
+ changed |= did_something != 0;
break;
}
@@ -4606,7 +4606,7 @@ pass_forwprop::execute (function *fun)
tree callee = gimple_call_fndecl (stmt);
if (callee != NULL_TREE
&& fndecl_built_in_p (callee, BUILT_IN_NORMAL))
- changed = simplify_builtin_call (&gsi, callee);
+ changed |= simplify_builtin_call (&gsi, callee);
break;
}
--
2.43.0