Commit c09a3914 by Richard Biener Committed by Richard Biener

re PR middle-end/65519 (unable to coalesce ssa_names 2 and 87 which are marked as MUST COALESCE)

2015-03-25  Richard Biener  <rguenther@suse.de>

	PR middle-end/65519
	* genmatch.c (expr::gen_transform): Re-write to avoid
	using gimple_build.

	* gnat.dg/specs/opt2.ads: New testcase.

From-SVN: r221654
parent 0341335e
2015-03-25 Richard Biener <rguenther@suse.de>
PR middle-end/65519
* genmatch.c (expr::gen_transform): Re-write to avoid
using gimple_build.
2015-03-25 Bin Cheng <bin.cheng@arm.com> 2015-03-25 Bin Cheng <bin.cheng@arm.com>
* doc/sourcebuild.texi (arm_tune_string_ops_prefer_neon): New. * doc/sourcebuild.texi (arm_tune_string_ops_prefer_neon): New.
......
...@@ -1742,22 +1742,18 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth, ...@@ -1742,22 +1742,18 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
if (gimple) if (gimple)
{ {
/* ??? Have another helper that is like gimple_build but may /* ??? Building a stmt can fail for various reasons here, seq being
fail if seq == NULL. */ NULL or the stmt referencing SSA names occuring in abnormal PHIs.
fprintf (f, " if (!seq)\n" So if we fail here we should continue matching other patterns. */
" {\n" fprintf (f, " code_helper tem_code = %s;\n"
" res = gimple_simplify (%s, %s", opr, type); " tree tem_ops[3] = { ", opr);
for (unsigned i = 0; i < ops.length (); ++i) for (unsigned i = 0; i < ops.length (); ++i)
fprintf (f, ", ops%d[%u]", depth, i); fprintf (f, "ops%d[%u]%s", depth, i,
fprintf (f, ", seq, valueize);\n"); i == ops.length () - 1 ? " };\n" : ", ");
fprintf (f, " if (!res) return false;\n"); fprintf (f, " gimple_resimplify%d (seq, &tem_code, %s, tem_ops, valueize);\n",
fprintf (f, " }\n"); ops.length (), type);
fprintf (f, " else\n"); fprintf (f, " res = maybe_push_res_to_seq (tem_code, %s, tem_ops, seq);\n"
fprintf (f, " res = gimple_build (seq, UNKNOWN_LOCATION, %s, %s", " if (!res) return false;\n", type);
opr, type);
for (unsigned i = 0; i < ops.length (); ++i)
fprintf (f, ", ops%d[%u]", depth, i);
fprintf (f, ", valueize);\n");
} }
else else
{ {
...@@ -1771,7 +1767,7 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth, ...@@ -1771,7 +1767,7 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
fprintf (f, ", ops%d[%u]", depth, i); fprintf (f, ", ops%d[%u]", depth, i);
fprintf (f, ");\n"); fprintf (f, ");\n");
} }
fprintf (f, " %s = res;\n", dest); fprintf (f, "%s = res;\n", dest);
fprintf (f, "}\n"); fprintf (f, "}\n");
} }
......
2015-03-25 Richard Biener <rguenther@suse.de>
PR middle-end/65519
* gnat.dg/specs/opt2.ads: New testcase.
2015-03-25 Bin Cheng <bin.cheng@arm.com> 2015-03-25 Bin Cheng <bin.cheng@arm.com>
* lib/target-supports.exp (arm_tune_string_ops_prefer_neon): New. * lib/target-supports.exp (arm_tune_string_ops_prefer_neon): New.
......
-- { dg-do compile }
-- { dg-options "-O2" }
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Interfaces; use Interfaces;
package Opt2 is
type Arr is array (Unsigned_32 range <>) of Unbounded_String;
end P;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment