From 856274754fb3210b86a8f937e82cd5caf653b3b4 Mon Sep 17 00:00:00 2001 From: rguenth Date: Mon, 20 Apr 2015 13:23:59 +0000 Subject: [PATCH] 2015-04-20 Richard Biener * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222231 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/gimple-fold.c | 61 ++++++++++++++++++++++++++++--------------------------- gcc/gimple-fold.h | 18 ++++++---------- 3 files changed, 43 insertions(+), 42 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3628a438b0f..09d11ff4f01 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-04-20 Richard Biener + + * 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. + 2015-04-20 Alan Lawrence PR target/64134 diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 9458f965452..d607e8fe0ba 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); diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index 5eb54460737..1204c8a8242 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -57,8 +57,7 @@ extern gimple_seq rewrite_to_defined_overflow (gimple); int the provided sequence, matching and simplifying them on-the-fly. Supposed to replace force_gimple_operand (fold_buildN (...), ...). */ extern tree gimple_build (gimple_seq *, location_t, - enum tree_code, tree, tree, - tree (*valueize) (tree) = NULL); + enum tree_code, tree, tree); inline tree gimple_build (gimple_seq *seq, enum tree_code code, tree type, tree op0) @@ -66,8 +65,7 @@ gimple_build (gimple_seq *seq, return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0); } extern tree gimple_build (gimple_seq *, location_t, - enum tree_code, tree, tree, tree, - tree (*valueize) (tree) = NULL); + enum tree_code, tree, tree, tree); inline tree gimple_build (gimple_seq *seq, enum tree_code code, tree type, tree op0, tree op1) @@ -75,8 +73,7 @@ gimple_build (gimple_seq *seq, return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0, op1); } extern tree gimple_build (gimple_seq *, location_t, - enum tree_code, tree, tree, tree, tree, - tree (*valueize) (tree) = NULL); + enum tree_code, tree, tree, tree, tree); inline tree gimple_build (gimple_seq *seq, enum tree_code code, tree type, tree op0, tree op1, tree op2) @@ -84,8 +81,7 @@ gimple_build (gimple_seq *seq, return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0, op1, op2); } extern tree gimple_build (gimple_seq *, location_t, - enum built_in_function, tree, tree, - tree (*valueize) (tree) = NULL); + enum built_in_function, tree, tree); inline tree gimple_build (gimple_seq *seq, enum built_in_function fn, tree type, tree arg0) @@ -93,8 +89,7 @@ gimple_build (gimple_seq *seq, return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0); } extern tree gimple_build (gimple_seq *, location_t, - enum built_in_function, tree, tree, tree, - tree (*valueize) (tree) = NULL); + enum built_in_function, tree, tree, tree); inline tree gimple_build (gimple_seq *seq, enum built_in_function fn, tree type, tree arg0, tree arg1) @@ -102,8 +97,7 @@ gimple_build (gimple_seq *seq, return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0, arg1); } extern tree gimple_build (gimple_seq *, location_t, - enum built_in_function, tree, tree, tree, tree, - tree (*valueize) (tree) = NULL); + enum built_in_function, tree, tree, tree, tree); inline tree gimple_build (gimple_seq *seq, enum built_in_function fn, tree type, -- 2.11.4.GIT