summaryrefslogtreecommitdiffstats
path: root/gcc/dojump.c
diff options
context:
space:
mode:
authorbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-19 10:37:31 +0000
committerbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-19 10:37:31 +0000
commit0ff2061223a79ab60894db8561021f2eea33e8ed (patch)
treeb8428a9212e5f6527a8b3d2f126a792184341e6e /gcc/dojump.c
parentd55715ee2cc10a4338add9a442a8656213767cee (diff)
downloadppe42-gcc-0ff2061223a79ab60894db8561021f2eea33e8ed.tar.gz
ppe42-gcc-0ff2061223a79ab60894db8561021f2eea33e8ed.zip
2005-10-18 Paolo Bonzini <bonzini@gnu.org>
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
Diffstat (limited to 'gcc/dojump.c')
-rw-r--r--gcc/dojump.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/gcc/dojump.c b/gcc/dojump.c
index 741c30a8dca..6dca9d32b57 100644
--- a/gcc/dojump.c
+++ b/gcc/dojump.c
@@ -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);
OpenPOWER on IntegriCloud