From 7b2eca00295325f4029b71bee8263df7a1275091 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 2 Dec 2015 14:50:32 +0000 Subject: [PATCH] tree.h (tree_invariant_p): Declare. 2015-12-02 Richard Biener * 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 --- gcc/ChangeLog | 7 +++++++ gcc/genmatch.c | 4 ++-- gcc/tree.c | 4 +--- gcc/tree.h | 4 ++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2c30b300006..68e4f81fc40 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-12-02 Richard Biener + + * 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 * tree-ssa-structalias.c (find_func_aliases_for_builtin_call) diff --git a/gcc/genmatch.c b/gcc/genmatch.c index 16a4f35a1c3..ef39cb0f32b 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 4f7ce7e5070..587bd7457df 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 0c1602ee7de..a60e9dd31cb 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. */ -- 2.30.2