Fri Jan 10 22:05:35 CET 2003 Jan Hubicka <jh@suse.cz>
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Jan 2003 21:28:24 +0000 (21:28 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Jan 2003 21:28:24 +0000 (21:28 +0000)
* ifcvt.c (noce_try_addcc): Do not call emit_conditional_add
with weird operands.

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

gcc/ChangeLog
gcc/ifcvt.c

index 9111be5..e1c5d64 100644 (file)
@@ -1,3 +1,8 @@
+Fri Jan 10 22:05:35 CET 2003  Jan Hubicka  <jh@suse.cz>
+
+       * ifcvt.c (noce_try_addcc): Do not call emit_conditional_add
+       with weird operands.
+
 2003-01-10  Dale Johannesen <dalej@apple.com>
  
         * calls.c (load_register_parameters):  Add is_sibcall, sibcall_failure
index 3cf0194..21a7e64 100644 (file)
@@ -882,26 +882,30 @@ noce_try_addcc (if_info)
       enum rtx_code code = reversed_comparison_code (cond, if_info->jump);
 
       /* First try to use addcc pattern.  */
-      start_sequence ();
-      target = emit_conditional_add (if_info->x, code,
-                                    XEXP (cond, 0), XEXP (cond, 1),
-                                    VOIDmode,
-                                    if_info->b, XEXP (if_info->a, 1),
-                                    GET_MODE (if_info->x),
-                                    (code == LTU || code == GEU
-                                     || code == LEU || code == GTU));
-      if (target)
+      if (general_operand (XEXP (cond, 0), VOIDmode)
+         && general_operand (XEXP (cond, 1), VOIDmode))
        {
-         if (target != if_info->x)
-           noce_emit_move_insn (if_info->x, target);
+         start_sequence ();
+         target = emit_conditional_add (if_info->x, code,
+                                        XEXP (cond, 0), XEXP (cond, 1),
+                                        VOIDmode,
+                                        if_info->b, XEXP (if_info->a, 1),
+                                        GET_MODE (if_info->x),
+                                        (code == LTU || code == GEU
+                                         || code == LEU || code == GTU));
+         if (target)
+           {
+             if (target != if_info->x)
+               noce_emit_move_insn (if_info->x, target);
 
-         seq = get_insns ();
+             seq = get_insns ();
+             end_sequence ();
+             emit_insn_before_scope (seq, if_info->jump,
+                                     INSN_SCOPE (if_info->insn_a));
+             return TRUE;
+           }
          end_sequence ();
-         emit_insn_before_scope (seq, if_info->jump,
-                                 INSN_SCOPE (if_info->insn_a));
-         return TRUE;
        }
-      end_sequence ();
        
       /* If that fails, construct conditional increment or decrement using
         setcc.  */