re PR rtl-optimization/49145 (ICE in simplify_const_unary_operation, at simplify-rtx.c:1322)
gcc/ PR rtl-optimization/49145 * combine.c (make_compound_operation): Handle ZERO_EXTEND specially. gcc/testsuite/ PR rtl-optimization/49145 From Ryan Mansfield * gcc.c-torture/compile/pr49145.c: New test. From-SVN: r174718
This commit is contained in:
parent
f9b41b6c80
commit
4de4b0f267
@ -1,3 +1,8 @@
|
||||
2011-06-06 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
PR rtl-optimization/49145
|
||||
* combine.c (make_compound_operation): Handle ZERO_EXTEND specially.
|
||||
|
||||
2011-06-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/49262
|
||||
|
@ -7881,7 +7881,20 @@ make_compound_operation (rtx x, enum rtx_code in_code)
|
||||
code = GET_CODE (x);
|
||||
}
|
||||
|
||||
/* Now recursively process each operand of this operation. */
|
||||
/* Now recursively process each operand of this operation. We need to
|
||||
handle ZERO_EXTEND specially so that we don't lose track of the
|
||||
inner mode. */
|
||||
if (GET_CODE (x) == ZERO_EXTEND)
|
||||
{
|
||||
new_rtx = make_compound_operation (XEXP (x, 0), next_code);
|
||||
tem = simplify_const_unary_operation (ZERO_EXTEND, GET_MODE (x),
|
||||
new_rtx, GET_MODE (XEXP (x, 0)));
|
||||
if (tem)
|
||||
return tem;
|
||||
SUBST (XEXP (x, 0), new_rtx);
|
||||
return x;
|
||||
}
|
||||
|
||||
fmt = GET_RTX_FORMAT (code);
|
||||
for (i = 0; i < GET_RTX_LENGTH (code); i++)
|
||||
if (fmt[i] == 'e')
|
||||
|
@ -1,3 +1,9 @@
|
||||
2011-06-06 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
PR rtl-optimization/49145
|
||||
From Ryan Mansfield
|
||||
* gcc.c-torture/compile/pr49145.c: New test.
|
||||
|
||||
2011-06-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR testsuite/49288
|
||||
|
30
gcc/testsuite/gcc.c-torture/compile/pr49145.c
Normal file
30
gcc/testsuite/gcc.c-torture/compile/pr49145.c
Normal file
@ -0,0 +1,30 @@
|
||||
static int
|
||||
func1 (int a, int b)
|
||||
{
|
||||
return b ? a : a / b;
|
||||
}
|
||||
|
||||
static unsigned char
|
||||
func2 (unsigned char a, int b)
|
||||
{
|
||||
return b ? a : b;
|
||||
}
|
||||
|
||||
int i;
|
||||
|
||||
void
|
||||
func3 (const int arg)
|
||||
{
|
||||
for (i = 0; i != 10; i = foo ())
|
||||
{
|
||||
if (!arg)
|
||||
{
|
||||
int j;
|
||||
for (j = 0; j < 5; j += 1)
|
||||
{
|
||||
int *ptr;
|
||||
*ptr = func2 (func1 (arg, *ptr), foo (arg));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user