jcf-write.c (generate_bytecode_insns): Add MIN_EXPR and MAX_EXPR.
authorAndrew Haley <aph@redhat.com>
Thu, 18 Sep 2003 10:09:17 +0000 (10:09 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Thu, 18 Sep 2003 10:09:17 +0000 (10:09 +0000)
2003-09-16  Andrew Haley  <aph@redhat.com>

        * jcf-write.c (generate_bytecode_insns): Add MIN_EXPR and MAX_EXPR.

From-SVN: r71514

gcc/java/ChangeLog
gcc/java/jcf-write.c

index a3cee9517485909d793d3e12f93494fd40972cc5..a171aa1bd98e3f91d1b3fcfc4942280d50d3f9f9 100644 (file)
@@ -1,3 +1,7 @@
+2003-09-16  Andrew Haley  <aph@redhat.com>
+
+       * jcf-write.c (generate_bytecode_insns): Add MIN_EXPR and MAX_EXPR.
+
 2003-09-17  Ranjit Mathew  <rmathew@hotmail.com>
 
        Fixes PR java/9577
index 3609807a4100d7e00bc796ca39909a64209fe833..febd04fbcaa761507597a4e7d9354eebcb89d1ae 100644 (file)
@@ -2413,6 +2413,23 @@ generate_bytecode_insns (tree exp, int target, struct jcf_partial *state)
     case JAVA_EXC_OBJ_EXPR:
       NOTE_PUSH (1);  /* Pushed by exception system. */
       break;
+    case MIN_EXPR:
+    case MAX_EXPR:
+      {
+       /* This copes with cases where fold() has created MIN or MAX
+          from a conditional expression.  */
+       enum tree_code code = TREE_CODE (exp) == MIN_EXPR ? LT_EXPR : GT_EXPR;
+       tree op0 = TREE_OPERAND (exp, 0);
+       tree op1 = TREE_OPERAND (exp, 1);
+       tree x;
+       if (TREE_SIDE_EFFECTS (op0) || TREE_SIDE_EFFECTS (op1))
+         abort ();
+       x = build (COND_EXPR, TREE_TYPE (exp), 
+                  build (code, boolean_type_node, op0, op1), 
+                  op0, op1);     
+       generate_bytecode_insns (x, target, state);
+       break;
+      }                                             
     case NEW_CLASS_EXPR:
       {
        tree class = TREE_TYPE (TREE_TYPE (exp));