re PR tree-optimization/64853 (wrong code at -Os and above on x86_64-linux-gnu)
2015-01-29 Richard Biener <rguenther@suse.de> PR tree-optimization/64853 * tree-vrp.c (vrp_valueize_1): Do not return anything if the stmt will get simulated again. * tree-ssa-ccp.c (valueize_op_1): Likewise. * gcc.dg/torture/pr64853.c: New testcase. From-SVN: r220247
This commit is contained in:
parent
16277100d3
commit
d94e3e750d
5 changed files with 62 additions and 6 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-01-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/64853
|
||||
* tree-vrp.c (vrp_valueize_1): Do not return anything if the
|
||||
stmt will get simulated again.
|
||||
* tree-ssa-ccp.c (valueize_op_1): Likewise.
|
||||
|
||||
2015-01-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* config/arm/arm.c (arm_emit_multi_reg_pop): Simplify definition of
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-01-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/64853
|
||||
* gcc.dg/torture/pr64853.c: New testcase.
|
||||
|
||||
2015-01-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/64844
|
||||
|
|
44
gcc/testsuite/gcc.dg/torture/pr64853.c
Normal file
44
gcc/testsuite/gcc.dg/torture/pr64853.c
Normal file
|
@ -0,0 +1,44 @@
|
|||
/* { dg-do run } */
|
||||
|
||||
struct S
|
||||
{
|
||||
int f1;
|
||||
};
|
||||
|
||||
static struct S a = { 1 };
|
||||
char b;
|
||||
static unsigned char *c = &b;
|
||||
int d, e, f;
|
||||
|
||||
int
|
||||
fn1 (int p)
|
||||
{
|
||||
return 0 ? 0 : p - 1;
|
||||
}
|
||||
|
||||
static int
|
||||
fn2 (struct S p)
|
||||
{
|
||||
int g = 200;
|
||||
for (e = 4; e; e = fn1 (e))
|
||||
{
|
||||
for (; d; d++)
|
||||
;
|
||||
*c &= p.f1 & g;
|
||||
g = --*c;
|
||||
if (f)
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
fn2 (a);
|
||||
|
||||
if (b != 0)
|
||||
__builtin_abort ();
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1141,15 +1141,15 @@ valueize_op_1 (tree op)
|
|||
{
|
||||
if (TREE_CODE (op) == SSA_NAME)
|
||||
{
|
||||
tree tem = get_constant_value (op);
|
||||
if (tem)
|
||||
return tem;
|
||||
/* If the definition may be simulated again we cannot follow
|
||||
this SSA edge as the SSA propagator does not necessarily
|
||||
re-visit the use. */
|
||||
gimple def_stmt = SSA_NAME_DEF_STMT (op);
|
||||
if (prop_simulate_again_p (def_stmt))
|
||||
return NULL_TREE;
|
||||
tree tem = get_constant_value (op);
|
||||
if (tem)
|
||||
return tem;
|
||||
}
|
||||
return op;
|
||||
}
|
||||
|
|
|
@ -7092,15 +7092,15 @@ vrp_valueize_1 (tree name)
|
|||
{
|
||||
if (TREE_CODE (name) == SSA_NAME)
|
||||
{
|
||||
value_range_t *vr = get_value_range (name);
|
||||
if (range_int_cst_singleton_p (vr))
|
||||
return vr->min;
|
||||
/* If the definition may be simulated again we cannot follow
|
||||
this SSA edge as the SSA propagator does not necessarily
|
||||
re-visit the use. */
|
||||
gimple def_stmt = SSA_NAME_DEF_STMT (name);
|
||||
if (prop_simulate_again_p (def_stmt))
|
||||
return NULL_TREE;
|
||||
value_range_t *vr = get_value_range (name);
|
||||
if (range_int_cst_singleton_p (vr))
|
||||
return vr->min;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue