aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-07-26 11:35:45 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-07-26 11:35:45 +0000
commit4f450a2b1022124194097e39b3b1caca1d5dc2bc (patch)
tree952eff26eae11dd5471be7d46169494d5b16a908 /gcc
parente17114487df7f90d8e015efad697a3cc93845b90 (diff)
downloadgcc-4f450a2b1022124194097e39b3b1caca1d5dc2bc.zip
gcc-4f450a2b1022124194097e39b3b1caca1d5dc2bc.tar.gz
gcc-4f450a2b1022124194097e39b3b1caca1d5dc2bc.tar.bz2
gimple-match-head.c (do_valueize): Return OP if valueize returns NULL_TREE.
2017-07-26 Richard Biener <rguenther@suse.de> * gimple-match-head.c (do_valueize): Return OP if valueize returns NULL_TREE. (get_def): New helper to get at the def stmt of a SSA name if valueize allows. * genmatch.c (dt_node::gen_kids_1): Use get_def instead of do_valueize to get at the def stmt. (dt_operand::gen_gimple_expr): Simplify do_valueize calls. * gcc/testsuite/gcc.dg/pr70920-2.c: Adjust for transform already happening in ccp1. * gcc/testsuite/gcc.dg/pr70920-4.c: Likewise. From-SVN: r250565
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/genmatch.c22
-rw-r--r--gcc/gimple-match-head.c17
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/pr70920-2.c4
-rw-r--r--gcc/testsuite/gcc.dg/pr70920-4.c4
6 files changed, 45 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9bd8736..ff746ff 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2017-07-26 Richard Biener <rguenther@suse.de>
+
+ * gimple-match-head.c (do_valueize): Return OP if valueize
+ returns NULL_TREE.
+ (get_def): New helper to get at the def stmt of a SSA name
+ if valueize allows.
+ * genmatch.c (dt_node::gen_kids_1): Use get_def instead of
+ do_valueize to get at the def stmt.
+ (dt_operand::gen_gimple_expr): Simplify do_valueize calls.
+
2017-07-26 Wilco Dijkstra <wdijkstr@arm.com>
PR middle-end/46932
diff --git a/gcc/genmatch.c b/gcc/genmatch.c
index 43f8372..6564a1a 100644
--- a/gcc/genmatch.c
+++ b/gcc/genmatch.c
@@ -2646,6 +2646,7 @@ dt_operand::gen_gimple_expr (FILE *f, int indent)
expr *e = static_cast<expr *> (op);
id_base *id = e->operation;
unsigned n_ops = e->ops.length ();
+ unsigned n_braces = 0;
for (unsigned i = 0; i < n_ops; ++i)
{
@@ -2678,14 +2679,15 @@ dt_operand::gen_gimple_expr (FILE *f, int indent)
"if ((TREE_CODE (%s) == SSA_NAME\n",
child_opname);
fprintf_indent (f, indent,
- " || is_gimple_min_invariant (%s))\n",
+ " || is_gimple_min_invariant (%s)))\n",
child_opname);
fprintf_indent (f, indent,
- " && (%s = do_valueize (valueize, %s)))\n",
- child_opname, child_opname);
- fprintf_indent (f, indent,
" {\n");
indent += 4;
+ n_braces++;
+ fprintf_indent (f, indent,
+ "%s = do_valueize (valueize, %s);\n",
+ child_opname, child_opname);
continue;
}
else
@@ -2698,10 +2700,8 @@ dt_operand::gen_gimple_expr (FILE *f, int indent)
"tree %s = gimple_call_arg (def, %u);\n",
child_opname, i);
fprintf_indent (f, indent,
- "if ((%s = do_valueize (valueize, %s)))\n",
+ "%s = do_valueize (valueize, %s);\n",
child_opname, child_opname);
- fprintf_indent (f, indent, " {\n");
- indent += 4;
}
/* While the toplevel operands are canonicalized by the caller
after valueizing operands of sub-expressions we have to
@@ -2726,7 +2726,7 @@ dt_operand::gen_gimple_expr (FILE *f, int indent)
}
}
- return n_ops;
+ return n_braces;
}
/* Generate GENERIC matching code for the decision tree operand. */
@@ -2867,14 +2867,10 @@ dt_node::gen_kids_1 (FILE *f, int indent, bool gimple,
fprintf_indent (f, indent,
"case SSA_NAME:\n");
fprintf_indent (f, indent,
- " if (do_valueize (valueize, %s) != NULL_TREE)\n",
+ " if (gimple *def_stmt = get_def (valueize, %s))\n",
kid_opname);
fprintf_indent (f, indent,
" {\n");
- fprintf_indent (f, indent,
- " gimple *def_stmt = SSA_NAME_DEF_STMT (%s);\n",
- kid_opname);
-
indent += 6;
if (exprs_len)
{
diff --git a/gcc/gimple-match-head.c b/gcc/gimple-match-head.c
index 5f6aa273..8ad1f8c 100644
--- a/gcc/gimple-match-head.c
+++ b/gcc/gimple-match-head.c
@@ -779,10 +779,25 @@ inline tree
do_valueize (tree (*valueize)(tree), tree op)
{
if (valueize && TREE_CODE (op) == SSA_NAME)
- return valueize (op);
+ {
+ tree tem = valueize (op);
+ if (tem)
+ return tem;
+ }
return op;
}
+/* Helper for the autogenerated code, get at the definition of NAME when
+ VALUEIZE allows that. */
+
+inline gimple *
+get_def (tree (*valueize)(tree), tree name)
+{
+ if (valueize && ! valueize (name))
+ return NULL;
+ return SSA_NAME_DEF_STMT (name);
+}
+
/* Routine to determine if the types T1 and T2 are effectively
the same for GIMPLE. If T1 or T2 is not a type, the test
applies to their TREE_TYPE. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e7991a6..aaec07c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2017-07-26 Richard Biener <rguenther@suse.de>
+
+ * gcc/testsuite/gcc.dg/pr70920-2.c: Adjust for transform already
+ happening in ccp1.
+ * gcc/testsuite/gcc.dg/pr70920-4.c: Likewise.
+
2017-07-26 Wilco Dijkstra <wdijkstr@arm.com>
PR middle-end/46932
diff --git a/gcc/testsuite/gcc.dg/pr70920-2.c b/gcc/testsuite/gcc.dg/pr70920-2.c
index 2db9897..9807224 100644
--- a/gcc/testsuite/gcc.dg/pr70920-2.c
+++ b/gcc/testsuite/gcc.dg/pr70920-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-forwprop-details" } */
+/* { dg-options "-O2 -fdump-tree-ccp1-details" } */
#include <stdint.h>
@@ -18,4 +18,4 @@ foo (int *a)
}
}
-/* { dg-final { scan-tree-dump "gimple_simplified to if \\(a_\[0-9\]*\\(D\\) == 0B\\)" "forwprop1" } } */
+/* { dg-final { scan-tree-dump "gimple_simplified to if \\(a_\[0-9\]*\\(D\\) == 0B\\)" "ccp1" } } */
diff --git a/gcc/testsuite/gcc.dg/pr70920-4.c b/gcc/testsuite/gcc.dg/pr70920-4.c
index e9c2b95..70973cb 100644
--- a/gcc/testsuite/gcc.dg/pr70920-4.c
+++ b/gcc/testsuite/gcc.dg/pr70920-4.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-require-effective-target lp64 } */
-/* { dg-options "-O2 -fdump-tree-forwprop-details -Wno-int-to-pointer-cast" } */
+/* { dg-options "-O2 -fdump-tree-ccp1 -Wno-int-to-pointer-cast" } */
#include <stdint.h>
@@ -19,4 +19,4 @@ foo (int a)
}
}
-/* { dg-final { scan-tree-dump "if \\(_\[0-9\]* == 0\\)" "forwprop1" } } */
+/* { dg-final { scan-tree-dump "if \\(a_\[0-9\]*\\(D\\) == 0\\)" "ccp1" } } */