re PR tree-optimization/90316 (large compile time increase in opt / alias stmt walkin...
authorRichard Biener <rguenther@suse.de>
Tue, 7 May 2019 13:03:19 +0000 (13:03 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 7 May 2019 13:03:19 +0000 (13:03 +0000)
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

gcc/ChangeLog
gcc/tree-ssa-pre.c

index 9f3e6f833211214024de6633f31344d971b861f4..cd4eb091d2abe2c352db5406dd0520e9bfeacc8c 100644 (file)
@@ -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
index 802272397889e80266411ca3b33e3d48a487aa51..09335faa6a965858925cfd163bdc07be15fd60ac 100644 (file)
@@ -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 ();