Commit 3f8b69de by Torbjorn Granlund

(expand_return): In code for doing scc with jumps,

stick to default handling if we have corresponding scc pattern.

From-SVN: r12641
parent 3aba034b
...@@ -2734,29 +2734,51 @@ expand_return (retval) ...@@ -2734,29 +2734,51 @@ expand_return (retval)
{ {
/* If this is return x == y; then generate /* If this is return x == y; then generate
if (x == y) return 1; else return 0; if (x == y) return 1; else return 0;
if we can do it with explicit return insns and if we can do it with explicit return insns and branches are cheap,
branches are cheap. */ but not if we have the corresponding scc insn. */
int has_scc = 0;
if (retval_rhs) if (retval_rhs)
switch (TREE_CODE (retval_rhs)) switch (TREE_CODE (retval_rhs))
{ {
case EQ_EXPR: case EQ_EXPR:
#ifdef HAVE_seq
has_scc = HAVE_seq;
#endif
case NE_EXPR: case NE_EXPR:
#ifdef HAVE_sne
has_scc = HAVE_sne;
#endif
case GT_EXPR: case GT_EXPR:
#ifdef HAVE_sgt
has_scc = HAVE_sgt;
#endif
case GE_EXPR: case GE_EXPR:
#ifdef HAVE_sge
has_scc = HAVE_sge;
#endif
case LT_EXPR: case LT_EXPR:
#ifdef HAVE_slt
has_scc = HAVE_slt;
#endif
case LE_EXPR: case LE_EXPR:
#ifdef HAVE_sle
has_scc = HAVE_sle;
#endif
case TRUTH_ANDIF_EXPR: case TRUTH_ANDIF_EXPR:
case TRUTH_ORIF_EXPR: case TRUTH_ORIF_EXPR:
case TRUTH_AND_EXPR: case TRUTH_AND_EXPR:
case TRUTH_OR_EXPR: case TRUTH_OR_EXPR:
case TRUTH_NOT_EXPR: case TRUTH_NOT_EXPR:
case TRUTH_XOR_EXPR: case TRUTH_XOR_EXPR:
op0 = gen_label_rtx (); if (! has_scc)
jumpifnot (retval_rhs, op0); {
expand_value_return (const1_rtx); op0 = gen_label_rtx ();
emit_label (op0); jumpifnot (retval_rhs, op0);
expand_value_return (const0_rtx); expand_value_return (const1_rtx);
return; emit_label (op0);
expand_value_return (const0_rtx);
return;
}
} }
} }
#endif /* HAVE_return */ #endif /* HAVE_return */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment