aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2005-03-22 17:32:22 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2005-03-22 17:32:22 +0000
commit7cf572596f5c190e40fe851a86ef182ed5190783 (patch)
treefe92d085b133b02bee492ead26918022684d188e /gcc
parent4c8fa2e5ee9a69d122f1629b0a8f1f758b6d9b8a (diff)
downloadgcc-7cf572596f5c190e40fe851a86ef182ed5190783.zip
gcc-7cf572596f5c190e40fe851a86ef182ed5190783.tar.gz
gcc-7cf572596f5c190e40fe851a86ef182ed5190783.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c27
2 files changed, 17 insertions, 16 deletions
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 <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
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;