diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2020-06-16 13:43:57 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2020-06-16 20:46:42 +0200 |
commit | 8fb4d1d58362b77da78c09740c6b5562124a369e (patch) | |
tree | d470227eac24ec1358fa296e331d673a9c706ae9 /gcc/tree-ssa-propagate.c | |
parent | 12df77ab6df4b91d4770240bcc4ab443e4bb18b9 (diff) | |
download | gcc-8fb4d1d58362b77da78c09740c6b5562124a369e.zip gcc-8fb4d1d58362b77da78c09740c6b5562124a369e.tar.gz gcc-8fb4d1d58362b77da78c09740c6b5562124a369e.tar.bz2 |
Fix pasto in the substitute_and_fold_engine merge with evrp.
The original code only propagated into PHI arguments if the value was
a constant. This behavior was lost in the conversion, allowing
any value (SSAs for instance) to be propagated into PHIs.
gcc/ChangeLog:
PR tree-optimization/95649
* tree-ssa-propagate.c (propagate_into_phi_args): Do not propagate unless
value is a constant.
gcc/testsuite/ChangeLog:
* g++.dg/tree-ssa/pr95649.C: New test.
* gcc.dg/tree-ssa/pr95649.c: New test.
Diffstat (limited to 'gcc/tree-ssa-propagate.c')
-rw-r--r-- | gcc/tree-ssa-propagate.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c index 4fda296..01ee7fd 100644 --- a/gcc/tree-ssa-propagate.c +++ b/gcc/tree-ssa-propagate.c @@ -1035,7 +1035,8 @@ substitute_and_fold_engine::propagate_into_phi_args (basic_block bb) || virtual_operand_p (arg)) continue; tree val = get_value (arg, phi); - if (val && may_propagate_copy (arg, val)) + if (val && is_gimple_min_invariant (val) + && may_propagate_copy (arg, val)) propagate_value (use_p, val); } } |