diff options
author | Richard Biener <rguenther@suse.de> | 2015-12-02 14:50:32 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-12-02 14:50:32 +0000 |
commit | 7b2eca00295325f4029b71bee8263df7a1275091 (patch) | |
tree | 586bfb9ddbef4ac08f6963d13fa8e8c76959d631 /gcc | |
parent | 694e5e4baebff76320ecbb0c119bc086126c4095 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/genmatch.c | 4 | ||||
-rw-r--r-- | gcc/tree.c | 4 | ||||
-rw-r--r-- | gcc/tree.h | 4 |
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) { @@ -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); @@ -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. */ |