genmatch.c (expr::gen_transform): Shortcut re-simplifying of converts to avoid uninte...
authorRichard Biener <rguenther@suse.de>
Wed, 1 Jul 2015 07:36:25 +0000 (07:36 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 1 Jul 2015 07:36:25 +0000 (07:36 +0000)
2015-07-01  Richard Biener <rguenther@suse.de>

* genmatch.c (expr::gen_transform): Shortcut re-simplifying
of converts to avoid uninteresting noise from the conversion
simplifying patterns.

From-SVN: r225223

gcc/ChangeLog
gcc/genmatch.c

index bedeee19ff6ac9c4371dea5364673c7f7e0c77a7..af2c5d808438368e531d60e5d9fbd0742fe03661 100644 (file)
@@ -1,3 +1,9 @@
+2015-07-01  Richard Biener <rguenther@suse.de>
+
+       * genmatch.c (expr::gen_transform): Shortcut re-simplifying
+       of converts to avoid uninteresting noise from the conversion
+       simplifying patterns.
+
 2015-06-30  Sandra Loosemore <sandra@codesourcery.com>
 
        * config/c6x/c6x.c (try_rename_operands): Do not depend on
index 2bd61d3f06be028898b4772e58e5d9f5d1d44642..6f8cea9318a5a401f141b6f6b4bdd0ca945e82bc 100644 (file)
@@ -1740,6 +1740,10 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
 
   if (gimple)
     {
+      if (*operation == CONVERT_EXPR)
+       fprintf (f, "  if (%s != TREE_TYPE (ops%d[0])\n"
+           "      && !useless_type_conversion_p (%s, TREE_TYPE (ops%d[0])))\n"
+           "  {\n", type, depth, type, depth);
       /* ???  Building a stmt can fail for various reasons here, seq being
          NULL or the stmt referencing SSA names occuring in abnormal PHIs.
         So if we fail here we should continue matching other patterns.  */
@@ -1752,9 +1756,15 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
               ops.length (), type);
       fprintf (f, "  res = maybe_push_res_to_seq (tem_code, %s, tem_ops, seq);\n"
               "  if (!res) return false;\n", type);
+      if (*operation == CONVERT_EXPR)
+        fprintf (f, "  }\n"
+                "  else\n"
+                "    res = ops%d[0];\n", depth);
     }
   else
     {
+      if (*operation == CONVERT_EXPR)
+       fprintf (f, "  if (TREE_TYPE (ops%d[0]) != %s)\n", depth, type);
       if (operation->kind == id_base::CODE)
        fprintf (f, "  res = fold_build%d_loc (loc, %s, %s",
                 ops.length(), opr, type);
@@ -1764,6 +1774,9 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
       for (unsigned i = 0; i < ops.length (); ++i)
        fprintf (f, ", ops%d[%u]", depth, i);
       fprintf (f, ");\n");
+      if (*operation == CONVERT_EXPR)
+       fprintf (f, "  else\n"
+                "    res = ops%d[0];\n", depth);
     }
   fprintf (f, "%s = res;\n", dest);
   fprintf (f, "}\n");