aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-05-07 13:03:19 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-05-07 13:03:19 +0000
commit530ec1acebc6c7808b013ab1d7b0d8b30edeab18 (patch)
tree4c84a9339a42c4ba577a1ea199054932d2cacb82 /gcc
parentd7b6aee8cd346328b6f22fc415ffc28b9cf8a285 (diff)
downloadgcc-530ec1acebc6c7808b013ab1d7b0d8b30edeab18.zip
gcc-530ec1acebc6c7808b013ab1d7b0d8b30edeab18.tar.gz
gcc-530ec1acebc6c7808b013ab1d7b0d8b30edeab18.tar.bz2
re PR tree-optimization/90316 (large compile time increase in opt / alias stmt walking for Go example)
2019-05-07 Richard Biener <rguenther@suse.de> PR tree-optimization/90316 * tree-ssa-pre.c (translate_vuse_through_block): When same_valid is NULL do not bother to search for a virtual PHI continuation. (phi_translate_1): When operands changed we cannot keep the same value-number so do not bother to ask whether that's possible from translate_vuse_through_block. From-SVN: r270944
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/tree-ssa-pre.c18
2 files changed, 18 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9f3e6f8..cd4eb09 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2019-05-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/90316
+ * tree-ssa-pre.c (translate_vuse_through_block): When
+ same_valid is NULL do not bother to search for a virtual
+ PHI continuation.
+ (phi_translate_1): When operands changed we cannot keep
+ the same value-number so do not bother to ask whether
+ that's possible from translate_vuse_through_block.
+
2019-05-07 Martin Liska <mliska@suse.cz>
* bitmap.c (bitmap_register): Come up with
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 8022723..09335fa 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -1146,7 +1146,8 @@ translate_vuse_through_block (vec<vn_reference_op_s> operands,
edge e = NULL;
bool use_oracle;
- *same_valid = true;
+ if (same_valid)
+ *same_valid = true;
if (gimple_bb (phi) != phiblock)
return vuse;
@@ -1179,7 +1180,7 @@ translate_vuse_through_block (vec<vn_reference_op_s> operands,
if (e)
{
- if (use_oracle)
+ if (use_oracle && same_valid)
{
bitmap visited = NULL;
/* Try to find a vuse that dominates this phi node by skipping
@@ -1191,13 +1192,9 @@ translate_vuse_through_block (vec<vn_reference_op_s> operands,
}
else
vuse = NULL_TREE;
- if (!vuse)
- {
- /* If we didn't find any, the value ID can't stay the same,
- but return the translated vuse. */
- *same_valid = false;
- vuse = PHI_ARG_DEF (phi, e->dest_idx);
- }
+ /* If we didn't find any, the value ID can't stay the same. */
+ if (!vuse && same_valid)
+ *same_valid = false;
/* ??? We would like to return vuse here as this is the canonical
upmost vdef that this reference is associated with. But during
insertion of the references into the hash tables we only ever
@@ -1535,7 +1532,8 @@ phi_translate_1 (bitmap_set_t dest,
? newoperands : operands,
ref->set, ref->type,
vuse, phiblock, pred,
- &same_valid);
+ changed
+ ? NULL : &same_valid);
if (newvuse == NULL_TREE)
{
newoperands.release ();