aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-pre.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-03-30 07:15:39 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-03-30 07:15:39 +0000
commit28c024077899ff4bad1fbce2d38fa8b5709272ef (patch)
tree38df20abe28191bb91f3ec3d687054afe48af750 /gcc/tree-ssa-pre.c
parente0aa80e05e24176051ef644856dd25784344308a (diff)
downloadgcc-28c024077899ff4bad1fbce2d38fa8b5709272ef.zip
gcc-28c024077899ff4bad1fbce2d38fa8b5709272ef.tar.gz
gcc-28c024077899ff4bad1fbce2d38fa8b5709272ef.tar.bz2
re PR tree-optimization/77498 (Performance drop after r239414 on spec2000/172mgrid)
2017-03-30 Richard Biener <rguenther@suse.de> PR tree-optimization/77498 * tree-ssa-pre.c (phi_translate_1): Do not allow simplifications to non-constants over backedges. * gfortran.dg/pr77498.f: New testcase. From-SVN: r246583
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r--gcc/tree-ssa-pre.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index ff59d53..c6aa587 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -1468,10 +1468,20 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2,
leader for it. */
if (constant->kind != CONSTANT)
{
- unsigned value_id = get_expr_value_id (constant);
- constant = find_leader_in_sets (value_id, set1, set2);
- if (constant)
- return constant;
+ /* Do not allow simplifications to non-constants over
+ backedges as this will likely result in a loop PHI node
+ to be inserted and increased register pressure.
+ See PR77498 - this avoids doing predcoms work in
+ a less efficient way. */
+ if (find_edge (pred, phiblock)->flags & EDGE_DFS_BACK)
+ ;
+ else
+ {
+ unsigned value_id = get_expr_value_id (constant);
+ constant = find_leader_in_sets (value_id, set1, set2);
+ if (constant)
+ return constant;
+ }
}
else
return constant;