]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/6822 (GCC 3.1.1 - Internal compiler error in extract_insn...
authorRichard Henderson <rth@redhat.com>
Thu, 30 May 2002 23:13:20 +0000 (16:13 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 30 May 2002 23:13:20 +0000 (16:13 -0700)
        PR optimization/6822
        * config/i386/i386.c (ix86_expand_int_movcc): Don't cast INTVAL
        to unsigned int for op1 comparisons.  Use gen_int_mode.

* gcc.c-torture/compile/20020530-1.c: New.

Co-Authored-By: Eric Botcazou <ebotcazou@multimania.com>
From-SVN: r54078

gcc/ChangeLog
gcc/config/i386/i386.c

index c02fa62304c8f3a1806efccc203d08089fa59d3f..048f65e266a329910dc6ce5aca24552be2d62e27 100644 (file)
@@ -1,4 +1,12 @@
+2002-05-30  Richard Henderson  <rth@redhat.com>
+           Eric Botcazou  <ebotcazou@multimania.com>
+
+       PR optimization/6822
+       * config/i386/i386.c (ix86_expand_int_movcc): Don't cast INTVAL
+       to unsigned int for op1 comparisons.  Use gen_int_mode.
+
 2002-05-30     Marc Espie <espie@openbsd.org>
+
        * config.gcc (sparc64-*-openbsd*):  New.
        * config/sparc/openbsd1-64.h:  New.
        * config/sparc/openbsd64.h:  New.
index 48f646a14942fe1c1da35cb320825653341030d1..337f9f4bf133965c782a4f07970c2164953d7e05 100644 (file)
@@ -7963,11 +7963,12 @@ ix86_expand_int_movcc (operands)
   if ((code == LEU || code == GTU)
       && GET_CODE (ix86_compare_op1) == CONST_INT
       && mode != HImode
-      && (unsigned int) INTVAL (ix86_compare_op1) != 0xffffffff
-      /* The operand still must be representable as sign extended value.  */
+      && INTVAL (ix86_compare_op1) != -1
+      /* For x86-64, the immediate field in the instruction is 32-bit
+        signed, so we can't increment a DImode value above 0x7fffffff.  */
       && (!TARGET_64BIT
          || GET_MODE (ix86_compare_op0) != DImode
-         || (unsigned int) INTVAL (ix86_compare_op1) != 0x7fffffff)
+         || INTVAL (ix86_compare_op1) != 0x7fffffff)
       && GET_CODE (operands[2]) == CONST_INT
       && GET_CODE (operands[3]) == CONST_INT)
     {
@@ -7975,7 +7976,8 @@ ix86_expand_int_movcc (operands)
        code = LTU;
       else
        code = GEU;
-      ix86_compare_op1 = GEN_INT (INTVAL (ix86_compare_op1) + 1);
+      ix86_compare_op1 = gen_int_mode (INTVAL (ix86_compare_op1) + 1,
+                                      GET_MODE (ix86_compare_op0));
     }
 
   start_sequence ();