OSDN Git Service

2005-10-18 Paolo Bonzini <bonzini@gnu.org>
authorbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Oct 2005 10:37:31 +0000 (10:37 +0000)
committerbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Oct 2005 10:37:31 +0000 (10:37 +0000)
PR #19672
* dojump.c (do_jump): Handle TRUTH_AND_EXPR and TRUTH_OR_EXPR here.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105606 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/dojump.c

index 38edb12..c032c98 100644 (file)
@@ -1,3 +1,8 @@
+2005-10-18  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR #19672
+       * dojump.c (do_jump): Handle TRUTH_AND_EXPR and TRUTH_OR_EXPR here.
+
 2005-10-18  Daniel Berlin <dberlin@dberlin.org>
 
        Fix PR tree-optimization/24231
@@ -5,7 +10,7 @@
        * tree-ssa-pre.c (try_look_through_load): Skip abnormal phi names
        (compute_avail): Ditto.
 
-2006-10-18  Richard Henderson  <rth@redhat.com>
+2005-10-18  Richard Henderson  <rth@redhat.com>
 
        PR target/24428
        * config/i386/i386.c (legitimate_constant_p): Check
index 741c30a..6dca9d3 100644 (file)
@@ -510,6 +510,42 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
       }
       break;
 
+    case TRUTH_AND_EXPR:
+      /* High branch cost, expand as the bitwise AND of the conditions.  */
+      if (BRANCH_COST >= 4)
+       goto normal;
+
+      if (if_false_label == NULL_RTX)
+        {
+         drop_through_label = gen_label_rtx ();
+          do_jump (TREE_OPERAND (exp, 0), drop_through_label, NULL_RTX);
+          do_jump (TREE_OPERAND (exp, 1), NULL_RTX, if_true_label);
+       }
+      else
+       {
+         do_jump (TREE_OPERAND (exp, 0), if_false_label, NULL_RTX);
+          do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
+       }
+      break;
+
+    case TRUTH_OR_EXPR:
+      /* High branch cost, expand as the bitwise OR of the conditions.  */
+      if (BRANCH_COST >= 4)
+       goto normal;
+
+      if (if_true_label == NULL_RTX)
+       {
+          drop_through_label = gen_label_rtx ();
+          do_jump (TREE_OPERAND (exp, 0), NULL_RTX, drop_through_label);
+          do_jump (TREE_OPERAND (exp, 1), if_false_label, NULL_RTX);
+       }
+      else
+       {
+          do_jump (TREE_OPERAND (exp, 0), NULL_RTX, if_true_label);
+          do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
+       }
+      break;
+
       /* Special case:
           __builtin_expect (<test>, 0) and
           __builtin_expect (<test>, 1)
@@ -540,8 +576,8 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
              }
          }
       }
       /* Fall through and generate the normal code.  */
-
     default:
     normal:
       temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);