OSDN Git Service

(expand_return): In code for doing scc with jumps,
authortege <tege@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 Aug 1996 23:46:53 +0000 (23:46 +0000)
committertege <tege@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 Aug 1996 23:46:53 +0000 (23:46 +0000)
stick to default handling if we have corresponding scc pattern.

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

gcc/stmt.c

index 080b1e4..5ebadb5 100644 (file)
@@ -2734,29 +2734,51 @@ expand_return (retval)
     {
       /* If this is  return x == y;  then generate
         if (x == y) return 1; else return 0;
-        if we can do it with explicit return insns and
-        branches are cheap.  */
+        if we can do it with explicit return insns and branches are cheap,
+        but not if we have the corresponding scc insn.  */
+      int has_scc = 0;
       if (retval_rhs)
        switch (TREE_CODE (retval_rhs))
          {
          case EQ_EXPR:
+#ifdef HAVE_seq
+           has_scc = HAVE_seq;
+#endif
          case NE_EXPR:
+#ifdef HAVE_sne
+           has_scc = HAVE_sne;
+#endif
          case GT_EXPR:
+#ifdef HAVE_sgt
+           has_scc = HAVE_sgt;
+#endif
          case GE_EXPR:
+#ifdef HAVE_sge
+           has_scc = HAVE_sge;
+#endif
          case LT_EXPR:
+#ifdef HAVE_slt
+           has_scc = HAVE_slt;
+#endif
          case LE_EXPR:
+#ifdef HAVE_sle
+           has_scc = HAVE_sle;
+#endif
          case TRUTH_ANDIF_EXPR:
          case TRUTH_ORIF_EXPR:
          case TRUTH_AND_EXPR:
          case TRUTH_OR_EXPR:
          case TRUTH_NOT_EXPR:
          case TRUTH_XOR_EXPR:
-           op0 = gen_label_rtx ();
-           jumpifnot (retval_rhs, op0);
-           expand_value_return (const1_rtx);
-           emit_label (op0);
-           expand_value_return (const0_rtx);
-           return;
+           if (! has_scc)
+             {
+               op0 = gen_label_rtx ();
+               jumpifnot (retval_rhs, op0);
+               expand_value_return (const1_rtx);
+               emit_label (op0);
+               expand_value_return (const0_rtx);
+               return;
+             }
          }
     }
 #endif /* HAVE_return */