mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-20 08:18:56 +08:00
re PR rtl-optimization/6822 (GCC 3.1.1 - Internal compiler error in extract_insn, at recog.c:2132)
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: r54076
This commit is contained in:
parent
ce60bf25b2
commit
261376e723
@ -1,3 +1,10 @@
|
||||
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 Eric Botcazou <ebotcazou@multimania.com>
|
||||
|
||||
* expmed.c (const_mult_add_overflow_p): New.
|
||||
|
@ -8677,11 +8677,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)
|
||||
{
|
||||
@ -8689,9 +8690,8 @@ ix86_expand_int_movcc (operands)
|
||||
code = LTU;
|
||||
else
|
||||
code = GEU;
|
||||
ix86_compare_op1
|
||||
= gen_int_mode (INTVAL (ix86_compare_op1) + 1,
|
||||
GET_MODE (ix86_compare_op0));
|
||||
ix86_compare_op1 = gen_int_mode (INTVAL (ix86_compare_op1) + 1,
|
||||
GET_MODE (ix86_compare_op0));
|
||||
}
|
||||
|
||||
start_sequence ();
|
||||
|
16
gcc/testsuite/gcc.c-torture/compile/20020530-1.c
Normal file
16
gcc/testsuite/gcc.c-torture/compile/20020530-1.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* PR optimization/6822 */
|
||||
|
||||
extern unsigned char foo1 (void);
|
||||
extern unsigned short foo2 (void);
|
||||
|
||||
int bar1 (void)
|
||||
{
|
||||
unsigned char q = foo1 ();
|
||||
return (q < 0x80) ? 64 : 0;
|
||||
}
|
||||
|
||||
int bar2 (void)
|
||||
{
|
||||
unsigned short h = foo2 ();
|
||||
return (h < 0x8000) ? 64 : 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user