From: Richard Biener Date: Tue, 7 May 2019 13:03:19 +0000 (+0000) Subject: re PR tree-optimization/90316 (large compile time increase in opt / alias stmt walkin... X-Git-Tag: misc/cutover-git~5712 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=530ec1acebc6c7808b013ab1d7b0d8b30edeab18;p=thirdparty%2Fgcc.git re PR tree-optimization/90316 (large compile time increase in opt / alias stmt walking for Go example) 2019-05-07 Richard Biener 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9f3e6f833211..cd4eb091d2ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2019-05-07 Richard Biener + + 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 * bitmap.c (bitmap_register): Come up with diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 802272397889..09335faa6a96 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -1146,7 +1146,8 @@ translate_vuse_through_block (vec 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 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 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 ();