re PR tree-optimization/67381 (genmatch does not honor the order of patterns)
authorRichard Biener <rguenther@suse.de>
Mon, 31 Aug 2015 14:00:16 +0000 (14:00 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 31 Aug 2015 14:00:16 +0000 (14:00 +0000)
2015-08-31  Richard Biener  <rguenther@suse.de>

PR middle-end/67381
* genmatch.c (dt_node::gen_kids): Also treat matches as barrier.

From-SVN: r227344

gcc/ChangeLog
gcc/genmatch.c

index 0e97a190a20a405b70b841a9cee1c9db5e414f6c..adc85fe964af83ce4a8978cca291faeb60dc013e 100644 (file)
@@ -1,3 +1,8 @@
+2015-08-31  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/67381
+       * genmatch.c (dt_node::gen_kids): Also treat matches as barrier.
+
 2015-08-31  Marc Glisse  <marc.glisse@inria.fr>
 
        * match.pd (SIN, COS, TAN, COSH): Reorder for consistency.
index d92d8080dd011111a5b4dd5902781d72e7f945e6..72666373740c9d68bfd2bedddba6d3427279cf5c 100644 (file)
@@ -2529,12 +2529,15 @@ dt_node::gen_kids (FILE *f, int indent, bool gimple)
          else
            gcc_unreachable ();
        }
-      else if (kids[i]->type == dt_node::DT_MATCH
-              || kids[i]->type == dt_node::DT_SIMPLIFY)
+      else if (kids[i]->type == dt_node::DT_SIMPLIFY)
        others.safe_push (kids[i]);
-      else if (kids[i]->type == dt_node::DT_TRUE)
+      else if (kids[i]->type == dt_node::DT_MATCH
+              || kids[i]->type == dt_node::DT_TRUE)
        {
          /* A DT_TRUE operand serves as a barrier - generate code now
+            for what we have collected sofar.
+            Like DT_TRUE, DT_MATCH serves as a barrier as it can cause
+            dependent matches to get out-of-order.  Generate code now
             for what we have collected sofar.  */
          gen_kids_1 (f, indent, gimple, gimple_exprs, generic_exprs,
                      fns, generic_fns, preds, others);