]> gcc.gnu.org Git - gcc.git/commitdiff
tree-optimization/110204 - second level redundancy and simplification
authorRichard Biener <rguenther@suse.de>
Mon, 17 Jul 2023 10:15:29 +0000 (12:15 +0200)
committerRichard Biener <rguenther@suse.de>
Thu, 20 Jul 2023 12:45:46 +0000 (14:45 +0200)
When PRE discovers a full redundancy during insertion it cannot unite
the two value sets.  Instead it inserts a copy old-val = new-val where
new-val can also be a constant.  The following looks through such
copies during elimination, providing one extra level of constant and
copy propagation.  For the PR this helps avoiding a bogus diagnostic
that's emitted on unreachable code during loop optimization.

PR tree-optimization/110204
* tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_avail):
Look through copies generated by PRE.

gcc/tree-ssa-sccvn.cc

index 11061a374a27e9c29f30949ea3806e23e6749052..a0b98c18ac8af48fd86b976f26f703122eb566af 100644 (file)
@@ -6594,7 +6594,22 @@ eliminate_dom_walker::eliminate_avail (basic_block, tree op)
       if (SSA_NAME_IS_DEFAULT_DEF (valnum))
        return valnum;
       if (avail.length () > SSA_NAME_VERSION (valnum))
-       return avail[SSA_NAME_VERSION (valnum)];
+       {
+         tree av = avail[SSA_NAME_VERSION (valnum)];
+         /* When PRE discovers a new redundancy there's no way to unite
+            the value classes so it instead inserts a copy old-val = new-val.
+            Look through such copies here, providing one more level of
+            simplification at elimination time.  */
+         gassign *ass;
+         if (av && (ass = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (av))))
+           if (gimple_assign_rhs_class (ass) == GIMPLE_SINGLE_RHS)
+             {
+               tree rhs1 = gimple_assign_rhs1 (ass);
+               if (CONSTANT_CLASS_P (rhs1) || TREE_CODE (rhs1) == SSA_NAME)
+                 av = rhs1;
+             }
+         return av;
+       }
     }
   else if (is_gimple_min_invariant (valnum))
     return valnum;
This page took 0.072447 seconds and 5 git commands to generate.