fold-const.c (fold_build1, [...]): New.
authorKazu Hirata <kazu@cs.umass.edu>
Tue, 22 Mar 2005 17:36:37 +0000 (17:36 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Tue, 22 Mar 2005 17:36:37 +0000 (17:36 +0000)
* fold-const.c (fold_build1, fold_build2, fold_build3): New.
* tree.h: Add corresponding prototypes.

From-SVN: r96881

gcc/ChangeLog
gcc/fold-const.c
gcc/tree.h

index ca33ce1..a22363f 100644 (file)
@@ -4,6 +4,9 @@
        CALL_EXPR.
        (fold): Update a call to fold_ternary.
 
+       * fold-const.c (fold_build1, fold_build2, fold_build3): New.
+       * tree.h: Add corresponding prototypes.
+
 2005-03-22  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/20561
index 603deef..5937963 100644 (file)
@@ -10168,6 +10168,51 @@ fold_checksum_tree (tree expr, struct md5_ctx *ctx, htab_t ht)
 
 #endif
 
+/* Fold a unary tree expression with code CODE of type TYPE with an
+   operand OP0.  Return a folded expresion if successful.  Otherwise,
+   return a tree expression with code CODE of type TYPE with an
+   operand OP0.  */
+
+tree
+fold_build1 (enum tree_code code, tree type, tree op0)
+{
+  tree tem = fold_unary (code, type, op0);
+  if (tem)
+    return tem;
+
+  return build1 (code, type, op0);
+}
+
+/* Fold a binary tree expression with code CODE of type TYPE with
+   operands OP0 and OP1.  Return a folded expresion if successful.
+   Otherwise, return a tree expression with code CODE of type TYPE
+   with operands OP0 and OP1.  */
+
+tree
+fold_build2 (enum tree_code code, tree type, tree op0, tree op1)
+{
+  tree tem = fold_binary (code, type, op0, op1);
+  if (tem)
+    return tem;
+
+  return build2 (code, type, op0, op1);
+}
+
+/* Fold a ternary tree expression with code CODE of type TYPE with
+   operands OP0, OP1, and OP2.  Return a folded expresion if
+   successful.  Otherwise, return a tree expression with code CODE of
+   type TYPE with operands OP0, OP1, and OP2.  */
+
+tree
+fold_build3 (enum tree_code code, tree type, tree op0, tree op1, tree op2)
+{
+  tree tem = fold_ternary (code, type, op0, op1, op2);
+  if (tem)
+    return tem;
+
+  return build3 (code, type, op0, op1, op2);
+}
+
 /* Perform constant folding and related simplification of initializer
    expression EXPR.  This behaves identically to "fold" but ignores
    potential run-time traps and exceptions that fold must preserve.  */
index 96d0405..6010a47 100644 (file)
@@ -3495,6 +3495,9 @@ extern void using_eh_for_cleanups (void);
    subexpressions are not changed.  */
 
 extern tree fold (tree);
+extern tree fold_build1 (enum tree_code, tree, tree);
+extern tree fold_build2 (enum tree_code, tree, tree, tree);
+extern tree fold_build3 (enum tree_code, tree, tree, tree, tree);
 extern tree fold_initializer (tree);
 extern tree fold_convert (tree, tree);
 extern tree fold_single_bit_test (enum tree_code, tree, tree, tree);