aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-12-02 14:50:32 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-12-02 14:50:32 +0000
commit7b2eca00295325f4029b71bee8263df7a1275091 (patch)
tree586bfb9ddbef4ac08f6963d13fa8e8c76959d631 /gcc
parent694e5e4baebff76320ecbb0c119bc086126c4095 (diff)
downloadgcc-7b2eca00295325f4029b71bee8263df7a1275091.zip
gcc-7b2eca00295325f4029b71bee8263df7a1275091.tar.gz
gcc-7b2eca00295325f4029b71bee8263df7a1275091.tar.bz2
tree.h (tree_invariant_p): Declare.
2015-12-02 Richard Biener <rguenther@suse.de> * tree.h (tree_invariant_p): Declare. * tree.c (tree_invariant_p): Export. * genmatch.c (dt_simplify::gen_1): For GENERIC code-gen never create SAVE_EXPRs but reject patterns if we would need to. From-SVN: r231178
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/genmatch.c4
-rw-r--r--gcc/tree.c4
-rw-r--r--gcc/tree.h4
4 files changed, 14 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2c30b30..68e4f81 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2015-12-02 Richard Biener <rguenther@suse.de>
+
+ * tree.h (tree_invariant_p): Declare.
+ * tree.c (tree_invariant_p): Export.
+ * genmatch.c (dt_simplify::gen_1): For GENERIC code-gen never
+ create SAVE_EXPRs but reject patterns if we would need to.
+
2015-12-02 Tom de Vries <tom@codesourcery.com>
* tree-ssa-structalias.c (find_func_aliases_for_builtin_call)
diff --git a/gcc/genmatch.c b/gcc/genmatch.c
index 16a4f35..ef39cb0 100644
--- a/gcc/genmatch.c
+++ b/gcc/genmatch.c
@@ -3119,8 +3119,8 @@ dt_simplify::gen_1 (FILE *f, int indent, bool gimple, operand *result)
if (cinfo.info[i].result_use_count
> cinfo.info[i].match_use_count)
fprintf_indent (f, indent,
- "captures[%d] = save_expr (captures[%d]);\n",
- i, i);
+ "if (! tree_invariant_p (captures[%d])) "
+ "return NULL_TREE;\n", i);
}
for (unsigned j = 0; j < e->ops.length (); ++j)
{
diff --git a/gcc/tree.c b/gcc/tree.c
index 4f7ce7e..587bd74 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -3231,8 +3231,6 @@ decl_address_ip_invariant_p (const_tree op)
not handle arithmetic; that's handled in skip_simple_arithmetic and
tree_invariant_p). */
-static bool tree_invariant_p (tree t);
-
static bool
tree_invariant_p_1 (tree t)
{
@@ -3282,7 +3280,7 @@ tree_invariant_p_1 (tree t)
/* Return true if T is function-invariant. */
-static bool
+bool
tree_invariant_p (tree t)
{
tree inner = skip_simple_arithmetic (t);
diff --git a/gcc/tree.h b/gcc/tree.h
index 0c1602e..a60e9dd 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -4320,6 +4320,10 @@ extern tree staticp (tree);
extern tree save_expr (tree);
+/* Return true if T is function-invariant. */
+
+extern bool tree_invariant_p (tree);
+
/* Look inside EXPR into any simple arithmetic operations. Return the
outermost non-arithmetic or non-invariant node. */