re PR tree-optimization/51760 (ICE in set_lattice_value, at tree-ssa-ccp.c:456)
2012-01-05 Richard Guenther <rguenther@suse.de> PR tree-optimization/51760 * tree-ssa-ccp.c (likely_value): Drop UNDEFINED to CONSTANT, not VARYING. (bit_value_unop): Handle UNDEFINED operands. (bit_value_binop): Likewise. * gcc.dg/torture/pr51760.c: New testcase. From-SVN: r182909
This commit is contained in:
parent
713b8dfb75
commit
6ad024b4c0
|
@ -1,3 +1,11 @@
|
||||||
|
2012-01-05 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/51760
|
||||||
|
* tree-ssa-ccp.c (likely_value): Drop UNDEFINED to CONSTANT,
|
||||||
|
not VARYING.
|
||||||
|
(bit_value_unop): Handle UNDEFINED operands.
|
||||||
|
(bit_value_binop): Likewise.
|
||||||
|
|
||||||
2012-01-05 Georg-Johann Lay <avr@gjlay.de>
|
2012-01-05 Georg-Johann Lay <avr@gjlay.de>
|
||||||
|
|
||||||
* config/avr/avr.c (avr_replace_prefix): Remove.
|
* config/avr/avr.c (avr_replace_prefix): Remove.
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2012-01-05 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/51760
|
||||||
|
* gcc.dg/torture/pr51760.c: New testcase.
|
||||||
|
|
||||||
2012-01-05 Aldy Hernandez <aldyh@redhat.com>
|
2012-01-05 Aldy Hernandez <aldyh@redhat.com>
|
||||||
|
|
||||||
PR middle-end/51472
|
PR middle-end/51472
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
|
||||||
|
extern inline __attribute__ ((always_inline)) void *
|
||||||
|
memmove (void *dest, const void *src, __SIZE_TYPE__ len)
|
||||||
|
{
|
||||||
|
return __builtin___memmove_chk (dest, src, len,
|
||||||
|
__builtin_object_size (dest, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
foo (void)
|
||||||
|
{
|
||||||
|
char a[64], *b;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
memmove (a, b, 0);
|
||||||
|
b = a;
|
||||||
|
}
|
||||||
|
}
|
|
@ -657,9 +657,10 @@ likely_value (gimple stmt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* If there was an UNDEFINED operand but the result may be not UNDEFINED
|
/* If there was an UNDEFINED operand but the result may be not UNDEFINED
|
||||||
fall back to VARYING even if there were CONSTANT operands. */
|
fall back to CONSTANT. During iteration UNDEFINED may still drop
|
||||||
|
to CONSTANT. */
|
||||||
if (has_undefined_operand)
|
if (has_undefined_operand)
|
||||||
return VARYING;
|
return CONSTANT;
|
||||||
|
|
||||||
/* We do not consider virtual operands here -- load from read-only
|
/* We do not consider virtual operands here -- load from read-only
|
||||||
memory may have only VARYING virtual operands, but still be
|
memory may have only VARYING virtual operands, but still be
|
||||||
|
@ -1368,6 +1369,10 @@ bit_value_unop (enum tree_code code, tree type, tree rhs)
|
||||||
prop_value_t rval = get_value_for_expr (rhs, true);
|
prop_value_t rval = get_value_for_expr (rhs, true);
|
||||||
double_int value, mask;
|
double_int value, mask;
|
||||||
prop_value_t val;
|
prop_value_t val;
|
||||||
|
|
||||||
|
if (rval.lattice_val == UNDEFINED)
|
||||||
|
return rval;
|
||||||
|
|
||||||
gcc_assert ((rval.lattice_val == CONSTANT
|
gcc_assert ((rval.lattice_val == CONSTANT
|
||||||
&& TREE_CODE (rval.value) == INTEGER_CST)
|
&& TREE_CODE (rval.value) == INTEGER_CST)
|
||||||
|| double_int_minus_one_p (rval.mask));
|
|| double_int_minus_one_p (rval.mask));
|
||||||
|
@ -1399,6 +1404,16 @@ bit_value_binop (enum tree_code code, tree type, tree rhs1, tree rhs2)
|
||||||
prop_value_t r2val = get_value_for_expr (rhs2, true);
|
prop_value_t r2val = get_value_for_expr (rhs2, true);
|
||||||
double_int value, mask;
|
double_int value, mask;
|
||||||
prop_value_t val;
|
prop_value_t val;
|
||||||
|
|
||||||
|
if (r1val.lattice_val == UNDEFINED
|
||||||
|
|| r2val.lattice_val == UNDEFINED)
|
||||||
|
{
|
||||||
|
val.lattice_val = VARYING;
|
||||||
|
val.value = NULL_TREE;
|
||||||
|
val.mask = double_int_minus_one;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
gcc_assert ((r1val.lattice_val == CONSTANT
|
gcc_assert ((r1val.lattice_val == CONSTANT
|
||||||
&& TREE_CODE (r1val.value) == INTEGER_CST)
|
&& TREE_CODE (r1val.value) == INTEGER_CST)
|
||||||
|| double_int_minus_one_p (r1val.mask));
|
|| double_int_minus_one_p (r1val.mask));
|
||||||
|
|
Loading…
Reference in New Issue