Patchwork Remove unused java/expr.c:force_evaluation_order

login
register
mail settings
Submitter Steven Bosscher
Date July 11, 2012, 9:44 a.m.
Message ID <CABu31nNN0cVxWovi23OBaECeoN9jUywjAizLMaBF7gMa8BG1tA@mail.gmail.com>
Download mbox | patch
Permalink /patch/170406/
State New
Headers show

Comments

Steven Bosscher - July 11, 2012, 9:44 a.m.
Hello,

Remove force_evaluation_order because the only caller is
force_evaluation_order itself.
Will commit after a few days, if no-one objects.

Ciao!
Steven

java/
        * java-tree.h (force_evaluation_order): Remove prototype.
        * expr.c (force_evaluation_order): Remove unused function.
Andrew Haley - July 11, 2012, 10:10 a.m.
On 07/11/2012 10:44 AM, Steven Bosscher wrote:
> Remove force_evaluation_order because the only caller is
> force_evaluation_order itself.
> Will commit after a few days, if no-one objects.

No problem.  I presume that its caller was removed because it wasn't
needed, but I don't quite know why it wasn't needed.  Perhaps it's a
side-effect of the Tree-SSA conversion.

Andrew.

Patch

Index: java-tree.h
===================================================================
--- java-tree.h (revision 189423)
+++ java-tree.h (working copy)
@@ -1094,7 +1094,6 @@  extern int merge_type_state (tree);
 extern int push_type_0 (tree);
 extern void push_type (tree);
 extern void add_interface (tree, tree);
-extern tree force_evaluation_order (tree);
 extern tree java_create_object (tree);
 extern int verify_constant_pool (struct JCF *);
 extern void start_java_method (tree);
Index: expr.c
===================================================================
--- expr.c      (revision 189423)
+++ expr.c      (working copy)
@@ -3689,82 +3689,6 @@  maybe_adjust_start_pc (struct JCF *jcf,
   return start_pc;
 }

-/* Force the (direct) sub-operands of NODE to be evaluated in left-to-right
-   order, as specified by Java Language Specification.
-
-   The problem is that while expand_expr will evaluate its sub-operands in
-   left-to-right order, for variables it will just return an rtx (i.e.
-   an lvalue) for the variable (rather than an rvalue).  So it is possible
-   that a later sub-operand will change the register, and when the
-   actual operation is done, it will use the new value, when it should
-   have used the original value.
-
-   We fix this by using save_expr.  This forces the sub-operand to be
-   copied into a fresh virtual register,
-
-   For method invocation, we modify the arguments so that a
-   left-to-right order evaluation is performed. Saved expressions
-   will, in CALL_EXPR order, be reused when the call will be expanded.
-
-   We also promote outgoing args if needed.  */
-
-tree
-force_evaluation_order (tree node)
-{
-  if (flag_syntax_only)
-    return node;
-  if (TREE_CODE (node) == CALL_EXPR
-      || (TREE_CODE (node) == COMPOUND_EXPR
-         && TREE_CODE (TREE_OPERAND (node, 0)) == CALL_EXPR
-         && TREE_CODE (TREE_OPERAND (node, 1)) == SAVE_EXPR))
-    {
-      tree call, cmp;
-      int i, nargs;
-
-      /* Account for wrapped around ctors.  */
-      if (TREE_CODE (node) == COMPOUND_EXPR)
-        call = TREE_OPERAND (node, 0);
-      else
-       call = node;
-
-      nargs = call_expr_nargs (call);
-
-      /* This reverses the evaluation order. This is a desired effect. */
-      for (i = 0, cmp = NULL_TREE; i < nargs; i++)
-       {
-         tree arg = CALL_EXPR_ARG (call, i);
-         /* Promote types smaller than integer.  This is required by
-            some ABIs.  */
-         tree type = TREE_TYPE (arg);
-         tree saved;
-         if (targetm.calls.promote_prototypes (type)
-             && INTEGRAL_TYPE_P (type)
-             && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
-                                     TYPE_SIZE (integer_type_node)))
-           arg = fold_convert (integer_type_node, arg);
-
-         saved = save_expr (force_evaluation_order (arg));
-         cmp = (cmp == NULL_TREE ? saved :
-                build2 (COMPOUND_EXPR, void_type_node, cmp, saved));
-
-         CALL_EXPR_ARG (call, i) = saved;
-       }
-
-      if (cmp && TREE_CODE (cmp) == COMPOUND_EXPR)
-       TREE_SIDE_EFFECTS (cmp) = 1;
-
-      if (cmp)
-       {
-         cmp = build2 (COMPOUND_EXPR, TREE_TYPE (node), cmp, node);
-         if (TREE_TYPE (cmp) != void_type_node)
-           cmp = save_expr (cmp);
-         TREE_SIDE_EFFECTS (cmp) = 1;
-         node = cmp;
-       }
-    }
-  return node;
-}
-
 /* Build a node to represent empty statements and blocks. */

 tree