re PR middle-end/7245 (ICE in find_reloads)
PR middle-end/7245 * config/i386/i386.c (const_int_1_31_operand): New. * config/i386/i386.h (PREDICATE_CODES): Add it. * config/i386/i386.md (ashlsi3_cmp, ashlsi3_cmp_zext, ashlhi3_cmp, ashlqi3_cmp, ashrsi3_cmp, ashrsi3_cmp_zext, ashrhi3_cmp, ashrqi3_cmp, lshrsi3_cmp, lshrsi3_cmp_zext, lshrhi3_cmp, lshrqi3_cmp): Use it. * gcc.c-torture/compile/20020710-1.c: New test. From-SVN: r55451
This commit is contained in:
parent
df815141ef
commit
794a292d1c
|
@ -1,3 +1,12 @@
|
||||||
|
2002-07-15 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR middle-end/7245
|
||||||
|
* config/i386/i386.c (const_int_1_31_operand): New.
|
||||||
|
* config/i386/i386.h (PREDICATE_CODES): Add it.
|
||||||
|
* config/i386/i386.md (ashlsi3_cmp, ashlsi3_cmp_zext, ashlhi3_cmp,
|
||||||
|
ashlqi3_cmp, ashrsi3_cmp, ashrsi3_cmp_zext, ashrhi3_cmp, ashrqi3_cmp,
|
||||||
|
lshrsi3_cmp, lshrsi3_cmp_zext, lshrhi3_cmp, lshrqi3_cmp): Use it.
|
||||||
|
|
||||||
2002-07-14 Alan Modra <amodra@bigpond.net.au>
|
2002-07-14 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
PR target/7282
|
PR target/7282
|
||||||
|
|
|
@ -2838,6 +2838,18 @@ const_int_1_operand (op, mode)
|
||||||
return (GET_CODE (op) == CONST_INT && INTVAL (op) == 1);
|
return (GET_CODE (op) == CONST_INT && INTVAL (op) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return nonzero if OP is CONST_INT >= 1 and <= 31 (a valid operand
|
||||||
|
for shift & compare patterns, as shifting by 0 does not change flags),
|
||||||
|
else return zero. */
|
||||||
|
|
||||||
|
int
|
||||||
|
const_int_1_31_operand (op, mode)
|
||||||
|
rtx op;
|
||||||
|
enum machine_mode mode ATTRIBUTE_UNUSED;
|
||||||
|
{
|
||||||
|
return (GET_CODE (op) == CONST_INT && INTVAL (op) >= 1 && INTVAL (op) <= 31);
|
||||||
|
}
|
||||||
|
|
||||||
/* Returns 1 if OP is either a symbol reference or a sum of a symbol
|
/* Returns 1 if OP is either a symbol reference or a sum of a symbol
|
||||||
reference and a constant. */
|
reference and a constant. */
|
||||||
|
|
||||||
|
|
|
@ -3142,6 +3142,7 @@ do { \
|
||||||
SYMBOL_REF, LABEL_REF}}, \
|
SYMBOL_REF, LABEL_REF}}, \
|
||||||
{"shiftdi_operand", {SUBREG, REG, MEM}}, \
|
{"shiftdi_operand", {SUBREG, REG, MEM}}, \
|
||||||
{"const_int_1_operand", {CONST_INT}}, \
|
{"const_int_1_operand", {CONST_INT}}, \
|
||||||
|
{"const_int_1_31_operand", {CONST_INT}}, \
|
||||||
{"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}}, \
|
{"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}}, \
|
||||||
{"aligned_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \
|
{"aligned_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \
|
||||||
LABEL_REF, SUBREG, REG, MEM}}, \
|
LABEL_REF, SUBREG, REG, MEM}}, \
|
||||||
|
|
|
@ -10687,7 +10687,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0")
|
(ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
|
(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
|
||||||
(ashift:SI (match_dup 1) (match_dup 2)))]
|
(ashift:SI (match_dup 1) (match_dup 2)))]
|
||||||
|
@ -10726,7 +10726,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(ashift:SI (match_operand:SI 1 "register_operand" "0")
|
(ashift:SI (match_operand:SI 1 "register_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:DI 0 "register_operand" "=r")
|
(set (match_operand:DI 0 "register_operand" "=r")
|
||||||
(zero_extend:DI (ashift:SI (match_dup 1) (match_dup 2))))]
|
(zero_extend:DI (ashift:SI (match_dup 1) (match_dup 2))))]
|
||||||
|
@ -10851,7 +10851,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(ashift:HI (match_operand:HI 1 "nonimmediate_operand" "0")
|
(ashift:HI (match_operand:HI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
|
(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
|
||||||
(ashift:HI (match_dup 1) (match_dup 2)))]
|
(ashift:HI (match_dup 1) (match_dup 2)))]
|
||||||
|
@ -11015,7 +11015,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "0")
|
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:QI 0 "nonimmediate_operand" "=qm")
|
(set (match_operand:QI 0 "nonimmediate_operand" "=qm")
|
||||||
(ashift:QI (match_dup 1) (match_dup 2)))]
|
(ashift:QI (match_dup 1) (match_dup 2)))]
|
||||||
|
@ -11365,7 +11365,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
|
(ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
|
(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
|
||||||
(ashiftrt:SI (match_dup 1) (match_dup 2)))]
|
(ashiftrt:SI (match_dup 1) (match_dup 2)))]
|
||||||
|
@ -11379,7 +11379,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
|
(ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:DI 0 "register_operand" "=r")
|
(set (match_operand:DI 0 "register_operand" "=r")
|
||||||
(zero_extend:DI (ashiftrt:SI (match_dup 1) (match_dup 2))))]
|
(zero_extend:DI (ashiftrt:SI (match_dup 1) (match_dup 2))))]
|
||||||
|
@ -11451,7 +11451,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
|
(ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
|
(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
|
||||||
(ashiftrt:HI (match_dup 1) (match_dup 2)))]
|
(ashiftrt:HI (match_dup 1) (match_dup 2)))]
|
||||||
|
@ -11551,7 +11551,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
|
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:QI 0 "nonimmediate_operand" "=qm")
|
(set (match_operand:QI 0 "nonimmediate_operand" "=qm")
|
||||||
(ashiftrt:QI (match_dup 1) (match_dup 2)))]
|
(ashiftrt:QI (match_dup 1) (match_dup 2)))]
|
||||||
|
@ -11784,7 +11784,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
|
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
|
(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
|
||||||
(lshiftrt:SI (match_dup 1) (match_dup 2)))]
|
(lshiftrt:SI (match_dup 1) (match_dup 2)))]
|
||||||
|
@ -11798,7 +11798,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
|
(lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:DI 0 "register_operand" "=r")
|
(set (match_operand:DI 0 "register_operand" "=r")
|
||||||
(lshiftrt:DI (zero_extend:DI (match_dup 1)) (match_dup 2)))]
|
(lshiftrt:DI (zero_extend:DI (match_dup 1)) (match_dup 2)))]
|
||||||
|
@ -11870,7 +11870,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
|
(lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
|
(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
|
||||||
(lshiftrt:HI (match_dup 1) (match_dup 2)))]
|
(lshiftrt:HI (match_dup 1) (match_dup 2)))]
|
||||||
|
@ -11970,7 +11970,7 @@
|
||||||
[(set (reg 17)
|
[(set (reg 17)
|
||||||
(compare
|
(compare
|
||||||
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
|
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
|
||||||
(match_operand:QI 2 "immediate_operand" "I"))
|
(match_operand:QI 2 "const_int_1_31_operand" "I"))
|
||||||
(const_int 0)))
|
(const_int 0)))
|
||||||
(set (match_operand:QI 0 "nonimmediate_operand" "=qm")
|
(set (match_operand:QI 0 "nonimmediate_operand" "=qm")
|
||||||
(lshiftrt:QI (match_dup 1) (match_dup 2)))]
|
(lshiftrt:QI (match_dup 1) (match_dup 2)))]
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2002-07-15 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* gcc.c-torture/compile/20020710-1.c: New test.
|
||||||
|
|
||||||
Thu Jul 11 15:39:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
Thu Jul 11 15:39:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||||
Andrew Pinski <pinskia@physics.uc.edu>
|
Andrew Pinski <pinskia@physics.uc.edu>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
/* Red Hat bugzilla #68395
|
||||||
|
PR middle-end/7245
|
||||||
|
This testcase ICEd on IA-32 because shift & compare patterns
|
||||||
|
predicates allowed any immediate, but constraints allowed only
|
||||||
|
numbers from 1 to 31. */
|
||||||
|
|
||||||
|
void foo (int *x, unsigned int y)
|
||||||
|
{
|
||||||
|
int a = y >> -13;
|
||||||
|
if (a)
|
||||||
|
*x = a;
|
||||||
|
}
|
Loading…
Reference in New Issue