fold-const.c (fold_ternary): Take decomposed arguments of CALL_EXPR.

* fold-const.c (fold_ternary): Take decomposed arguments of
	CALL_EXPR.
	(fold): Update a call to fold_ternary.

From-SVN: r96880
This commit is contained in:
Kazu Hirata 2005-03-22 17:32:22 +00:00 committed by Kazu Hirata
parent 4c8fa2e5ee
commit 7cf572596f
2 changed files with 17 additions and 16 deletions

View File

@ -1,3 +1,9 @@
2005-03-22 Kazu Hirata <kazu@cs.umass.edu>
* fold-const.c (fold_ternary): Take decomposed arguments of
CALL_EXPR.
(fold): Update a call to fold_ternary.
2005-03-22 Jakub Jelinek <jakub@redhat.com>
PR target/20561

View File

@ -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;