Commit 32dfd2e0 by Richard Biener Committed by Richard Biener

genmatch.c (expr::gen_transform): Use NOP_EXPRs instead of CONVERT_EXPRs in generated code.

2014-10-31  Richard Biener  <rguenther@suse.de>

	* genmatch.c (expr::gen_transform): Use NOP_EXPRs instead of
	CONVERT_EXPRs in generated code.
	(dt_simplify::gen): Likewise.

From-SVN: r216977
parent 9a2db199
2014-10-31 Richard Biener <rguenther@suse.de>
* genmatch.c (expr::gen_transform): Use NOP_EXPRs instead of
CONVERT_EXPRs in generated code.
(dt_simplify::gen): Likewise.
2014-10-31 Evgeny Stupachenko <evstupac@gmail.com> 2014-10-31 Evgeny Stupachenko <evstupac@gmail.com>
PR target/63534 PR target/63534
...@@ -1384,14 +1384,19 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth, ...@@ -1384,14 +1384,19 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
ops[i]->gen_transform (f, dest, gimple, depth + 1, optype, indexes); ops[i]->gen_transform (f, dest, gimple, depth + 1, optype, indexes);
} }
const char *opr;
if (*operation == CONVERT_EXPR)
opr = "NOP_EXPR";
else
opr = operation->id;
if (gimple) if (gimple)
{ {
/* ??? Have another helper that is like gimple_build but may /* ??? Have another helper that is like gimple_build but may
fail if seq == NULL. */ fail if seq == NULL. */
fprintf (f, " if (!seq)\n" fprintf (f, " if (!seq)\n"
" {\n" " {\n"
" res = gimple_simplify (%s, %s", " res = gimple_simplify (%s, %s", opr, type);
operation->id, type);
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]", depth, i);
fprintf (f, ", seq, valueize);\n"); fprintf (f, ", seq, valueize);\n");
...@@ -1399,7 +1404,7 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth, ...@@ -1399,7 +1404,7 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
fprintf (f, " }\n"); fprintf (f, " }\n");
fprintf (f, " else\n"); fprintf (f, " else\n");
fprintf (f, " res = gimple_build (seq, UNKNOWN_LOCATION, %s, %s", fprintf (f, " res = gimple_build (seq, UNKNOWN_LOCATION, %s, %s",
operation->id, type); opr, type);
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]", depth, i);
fprintf (f, ", valueize);\n"); fprintf (f, ", valueize);\n");
...@@ -1408,11 +1413,10 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth, ...@@ -1408,11 +1413,10 @@ expr::gen_transform (FILE *f, const char *dest, bool gimple, int depth,
{ {
if (operation->kind == id_base::CODE) if (operation->kind == id_base::CODE)
fprintf (f, " res = fold_build%d_loc (loc, %s, %s", fprintf (f, " res = fold_build%d_loc (loc, %s, %s",
ops.length(), operation->id, type); ops.length(), opr, type);
else else
fprintf (f, " res = build_call_expr_loc (loc, " fprintf (f, " res = build_call_expr_loc (loc, "
"builtin_decl_implicit (%s), %d", "builtin_decl_implicit (%s), %d", opr, ops.length());
operation->id, ops.length());
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]", depth, i);
fprintf (f, ");\n"); fprintf (f, ");\n");
...@@ -2186,7 +2190,9 @@ dt_simplify::gen (FILE *f, bool gimple) ...@@ -2186,7 +2190,9 @@ dt_simplify::gen (FILE *f, bool gimple)
expr *e = as_a <expr *> (result); expr *e = as_a <expr *> (result);
bool is_predicate = is_a <predicate_id *> (e->operation); bool is_predicate = is_a <predicate_id *> (e->operation);
if (!is_predicate) if (!is_predicate)
fprintf (f, "*res_code = %s;\n", e->operation->id); fprintf (f, "*res_code = %s;\n",
*e->operation == CONVERT_EXPR
? "NOP_EXPR" : e->operation->id);
for (unsigned j = 0; j < e->ops.length (); ++j) for (unsigned j = 0; j < e->ops.length (); ++j)
{ {
char dest[32]; char dest[32];
...@@ -2264,7 +2270,9 @@ dt_simplify::gen (FILE *f, bool gimple) ...@@ -2264,7 +2270,9 @@ dt_simplify::gen (FILE *f, bool gimple)
{ {
if (e->operation->kind == id_base::CODE) if (e->operation->kind == id_base::CODE)
fprintf (f, " res = fold_build%d_loc (loc, %s, type", fprintf (f, " res = fold_build%d_loc (loc, %s, type",
e->ops.length (), e->operation->id); e->ops.length (),
*e->operation == CONVERT_EXPR
? "NOP_EXPR" : e->operation->id);
else else
fprintf (f, " res = build_call_expr_loc " fprintf (f, " res = build_call_expr_loc "
"(loc, builtin_decl_implicit (%s), %d", "(loc, builtin_decl_implicit (%s), %d",
......
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