diff options
author | Richard Biener <rguenther@suse.de> | 2015-04-20 13:23:59 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-04-20 13:23:59 +0000 |
commit | c26de36ddce5d421c441cbf408142d094cb2b422 (patch) | |
tree | 0d2d43c701ab128b5cc039da87819d90ef62d257 /gcc/gimple-fold.c | |
parent | 9adc2d48acdadae96a52dc2ffc58c881fc4af6dc (diff) | |
download | gcc-c26de36ddce5d421c441cbf408142d094cb2b422.zip gcc-c26de36ddce5d421c441cbf408142d094cb2b422.tar.gz gcc-c26de36ddce5d421c441cbf408142d094cb2b422.tar.bz2 |
gimple-fold.h (gimple_build): Remove optional valueize arguments.
2015-04-20 Richard Biener <rguenther@suse.de>
* gimple-fold.h (gimple_build): Remove optional valueize arguments.
* gimple-fold.c (gimple_build_valueize): New function.
(gimple_build): Always use gimple_build_valueize as valueize hook.
From-SVN: r222231
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r-- | gcc/gimple-fold.c | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 9458f96..d607e8f 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -6078,18 +6078,28 @@ rewrite_to_defined_overflow (gimple stmt) } +/* The valueization hook we use for the gimple_build API simplification. + This makes us match fold_buildN behavior by only combining with + statements in the sequence(s) we are currently building. */ + +static tree +gimple_build_valueize (tree op) +{ + if (gimple_bb (SSA_NAME_DEF_STMT (op)) == NULL) + return op; + return NULL_TREE; +} + /* Build the expression CODE OP0 of type TYPE with location LOC, - simplifying it first if possible using VALUEIZE if not NULL. - OP0 is expected to be valueized already. Returns the built + simplifying it first if possible. Returns the built expression value and appends statements possibly defining it to SEQ. */ tree gimple_build (gimple_seq *seq, location_t loc, - enum tree_code code, tree type, tree op0, - tree (*valueize)(tree)) + enum tree_code code, tree type, tree op0) { - tree res = gimple_simplify (code, type, op0, seq, valueize); + tree res = gimple_simplify (code, type, op0, seq, gimple_build_valueize); if (!res) { if (gimple_in_ssa_p (cfun)) @@ -6110,17 +6120,15 @@ gimple_build (gimple_seq *seq, location_t loc, } /* Build the expression OP0 CODE OP1 of type TYPE with location LOC, - simplifying it first if possible using VALUEIZE if not NULL. - OP0 and OP1 are expected to be valueized already. Returns the built + simplifying it first if possible. Returns the built expression value and appends statements possibly defining it to SEQ. */ tree gimple_build (gimple_seq *seq, location_t loc, - enum tree_code code, tree type, tree op0, tree op1, - tree (*valueize)(tree)) + enum tree_code code, tree type, tree op0, tree op1) { - tree res = gimple_simplify (code, type, op0, op1, seq, valueize); + tree res = gimple_simplify (code, type, op0, op1, seq, gimple_build_valueize); if (!res) { if (gimple_in_ssa_p (cfun)) @@ -6135,18 +6143,16 @@ gimple_build (gimple_seq *seq, location_t loc, } /* Build the expression (CODE OP0 OP1 OP2) of type TYPE with location LOC, - simplifying it first if possible using VALUEIZE if not NULL. - OP0, OP1 and OP2 are expected to be valueized already. Returns the built + simplifying it first if possible. Returns the built expression value and appends statements possibly defining it to SEQ. */ tree gimple_build (gimple_seq *seq, location_t loc, - enum tree_code code, tree type, tree op0, tree op1, tree op2, - tree (*valueize)(tree)) + enum tree_code code, tree type, tree op0, tree op1, tree op2) { tree res = gimple_simplify (code, type, op0, op1, op2, - seq, valueize); + seq, gimple_build_valueize); if (!res) { if (gimple_in_ssa_p (cfun)) @@ -6167,17 +6173,15 @@ gimple_build (gimple_seq *seq, location_t loc, /* Build the call FN (ARG0) with a result of type TYPE (or no result if TYPE is void) with location LOC, - simplifying it first if possible using VALUEIZE if not NULL. - ARG0 is expected to be valueized already. Returns the built + simplifying it first if possible. Returns the built expression value (or NULL_TREE if TYPE is void) and appends statements possibly defining it to SEQ. */ tree gimple_build (gimple_seq *seq, location_t loc, - enum built_in_function fn, tree type, tree arg0, - tree (*valueize)(tree)) + enum built_in_function fn, tree type, tree arg0) { - tree res = gimple_simplify (fn, type, arg0, seq, valueize); + tree res = gimple_simplify (fn, type, arg0, seq, gimple_build_valueize); if (!res) { tree decl = builtin_decl_implicit (fn); @@ -6198,17 +6202,15 @@ gimple_build (gimple_seq *seq, location_t loc, /* Build the call FN (ARG0, ARG1) with a result of type TYPE (or no result if TYPE is void) with location LOC, - simplifying it first if possible using VALUEIZE if not NULL. - ARG0 is expected to be valueized already. Returns the built + simplifying it first if possible. Returns the built expression value (or NULL_TREE if TYPE is void) and appends statements possibly defining it to SEQ. */ tree gimple_build (gimple_seq *seq, location_t loc, - enum built_in_function fn, tree type, tree arg0, tree arg1, - tree (*valueize)(tree)) + enum built_in_function fn, tree type, tree arg0, tree arg1) { - tree res = gimple_simplify (fn, type, arg0, arg1, seq, valueize); + tree res = gimple_simplify (fn, type, arg0, arg1, seq, gimple_build_valueize); if (!res) { tree decl = builtin_decl_implicit (fn); @@ -6229,18 +6231,17 @@ gimple_build (gimple_seq *seq, location_t loc, /* Build the call FN (ARG0, ARG1, ARG2) with a result of type TYPE (or no result if TYPE is void) with location LOC, - simplifying it first if possible using VALUEIZE if not NULL. - ARG0 is expected to be valueized already. Returns the built + simplifying it first if possible. Returns the built expression value (or NULL_TREE if TYPE is void) and appends statements possibly defining it to SEQ. */ tree gimple_build (gimple_seq *seq, location_t loc, enum built_in_function fn, tree type, - tree arg0, tree arg1, tree arg2, - tree (*valueize)(tree)) + tree arg0, tree arg1, tree arg2) { - tree res = gimple_simplify (fn, type, arg0, arg1, arg2, seq, valueize); + tree res = gimple_simplify (fn, type, arg0, arg1, arg2, + seq, gimple_build_valueize); if (!res) { tree decl = builtin_decl_implicit (fn); |