From: kazu Date: Tue, 22 Mar 2005 17:32:22 +0000 (+0000) Subject: * fold-const.c (fold_ternary): Take decomposed arguments of X-Git-Tag: upstream/4.9.2~62788 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6a4a1704a0d796f2a2e4e05a01ac86adba6e698d;p=platform%2Fupstream%2Flinaro-gcc.git * fold-const.c (fold_ternary): Take decomposed arguments of CALL_EXPR. (fold): Update a call to fold_ternary. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96880 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5e1820..ca33ce1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-03-22 Kazu Hirata + + * fold-const.c (fold_ternary): Take decomposed arguments of + CALL_EXPR. + (fold): Update a call to fold_ternary. + 2005-03-22 Jakub Jelinek PR target/20561 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 2342400..603deef 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -9693,28 +9693,20 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) } /* switch (code) */ } -/* Fold a ternary expression EXPR. Return the folded expression if - folding is successful. Otherwise, return the original - expression. */ +/* Fold a ternary expression of code CODE and type TYPE with operands + OP0, OP1, and OP2. Return the folded expression if folding is + successful. Otherwise, return NULL_TREE. */ static tree -fold_ternary (tree expr) +fold_ternary (enum tree_code code, tree type, tree op0, tree op1, tree op2) { - const tree t = expr; - const tree type = TREE_TYPE (expr); tree tem; - tree op0, op1, op2; tree arg0 = NULL_TREE, arg1 = NULL_TREE; - enum tree_code code = TREE_CODE (t); enum tree_code_class kind = TREE_CODE_CLASS (code); gcc_assert (IS_EXPR_CODE_CLASS (kind) && TREE_CODE_LENGTH (code) == 3); - op0 = TREE_OPERAND (t, 0); - op1 = TREE_OPERAND (t, 1); - op2 = TREE_OPERAND (t, 2); - /* Strip any conversions that don't change the mode. This is safe for every expression, except for a comparison expression because its signedness is derived from its operands. So, in the latter @@ -9909,8 +9901,8 @@ fold_ternary (tree expr) && TREE_CODE (TREE_OPERAND (op0, 0)) == FUNCTION_DECL && DECL_BUILT_IN (TREE_OPERAND (op0, 0))) { - tree fndecl = get_callee_fndecl (t); - tree arglist = TREE_OPERAND (t, 1); + tree fndecl = TREE_OPERAND (op0, 0); + tree arglist = op1; tree tmp = fold_builtin (fndecl, arglist, false); if (tmp) return tmp; @@ -9950,7 +9942,7 @@ fold (tree expr) if (IS_EXPR_CODE_CLASS (kind)) { tree type = TREE_TYPE (t); - tree op0, op1; + tree op0, op1, op2; switch (TREE_CODE_LENGTH (code)) { @@ -9964,7 +9956,10 @@ fold (tree expr) tem = fold_binary (code, type, op0, op1); return tem ? tem : expr; case 3: - tem = fold_ternary (expr); + op0 = TREE_OPERAND (t, 0); + op1 = TREE_OPERAND (t, 1); + op2 = TREE_OPERAND (t, 2); + tem = fold_ternary (code, type, op0, op1, op2); return tem ? tem : expr; default: break;