aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-propagate.c
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2020-06-16 13:43:57 +0200
committerAldy Hernandez <aldyh@redhat.com>2020-06-16 20:46:42 +0200
commit8fb4d1d58362b77da78c09740c6b5562124a369e (patch)
treed470227eac24ec1358fa296e331d673a9c706ae9 /gcc/tree-ssa-propagate.c
parent12df77ab6df4b91d4770240bcc4ab443e4bb18b9 (diff)
downloadgcc-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.c3
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);
}
}