OSDN Git Service

* expmed.c (emit_store_flag): Extract updated comparison code
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 Dec 2001 21:20:03 +0000 (21:20 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 Dec 2001 21:20:03 +0000 (21:20 +0000)
        from the return value of compare_from_rtx.
        * expr.c (do_store_flag): Similarly.

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

gcc/ChangeLog
gcc/expmed.c
gcc/expr.c

index 315c934..4ae0ce0 100644 (file)
@@ -1,3 +1,9 @@
+Mon Dec 17 14:21:21 2001  Jeffrey A Law  (law@redhat.com)
+
+       * expmed.c (emit_store_flag): Extract updated comparison code
+       from the return value of compare_from_rtx.
+       * expr.c (do_store_flag): Similarly.
+
 2001-12-17  Nick Clifton  <nickc@cambridge.redhat.com>
 
        * caller-save.c (init_caller_save): Use MODE_BASE_REG_CLASS in
index 8eecca3..f2c4aa2 100644 (file)
@@ -4350,12 +4350,13 @@ emit_store_flag (target, code, op0, op1, mode, unsignedp, normalizep)
                : normalizep == -1 ? constm1_rtx
                : const_true_rtx);
 
-      /* If the code of COMPARISON doesn't match CODE, something is
-        wrong; we can no longer be sure that we have the operation.  
-        We could handle this case, but it should not happen.  */
+      /* The code of COMPARISON may not match CODE if compare_from_rtx
+        decided to swap its operands and reverse the original code.
 
-      if (GET_CODE (comparison) != code)
-       abort ();
+        We know that compare_from_rtx returns either a CONST_INT or
+        a new comparison code, so it is safe to just extract the
+        code from COMPARISON.  */
+      code = GET_CODE (comparison);
 
       /* Get a reference to the target in the proper mode for this insn.  */
       compare_mode = insn_data[(int) icode].operand[0].mode;
index a36ce7b..74c8b44 100644 (file)
@@ -10235,6 +10235,14 @@ do_store_flag (exp, target, mode, only_cheap)
             || (result != const0_rtx && invert))
            ? const0_rtx : const1_rtx);
 
+  /* The code of RESULT may not match CODE if compare_from_rtx
+     decided to swap its operands and reverse the original code.
+
+     We know that compare_from_rtx returns either a CONST_INT or
+     a new comparison code, so it is safe to just extract the
+     code from RESULT.  */
+  code = GET_CODE (result);
+
   label = gen_label_rtx ();
   if (bcc_gen_fctn[(int) code] == 0)
     abort ();