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:
Richard Biener 2015-01-29 13:50:37 +00:00 committed by Richard Biener
parent 16277100d3
commit d94e3e750d
5 changed files with 62 additions and 6 deletions

View file

@ -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

View file

@ -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

View 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;
}

View file

@ -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;
}

View file

@ -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;
}