re PR middle-end/66375 (wrong code at -O2 and -O3 on x86_64-linux-gnu)
2015-06-03 Richard Biener <rguenther@suse.de> PR tree-optimization/66375 * tree-scalar-evolution.c (follow_ssa_edge_binary): First add to the evolution before following SSA edges. * gcc.dg/torture/pr66375.c: New testcase. From-SVN: r224060
This commit is contained in:
parent
e185f450b8
commit
b9b79ba426
@ -1,3 +1,9 @@
|
||||
2015-06-03 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/66375
|
||||
* tree-scalar-evolution.c (follow_ssa_edge_binary): First
|
||||
add to the evolution before following SSA edges.
|
||||
|
||||
2015-06-03 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
* tree-ssa-loop-ivopts.c (dump_iv): New parameter.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-06-03 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/66375
|
||||
* gcc.dg/torture/pr66375.c: New testcase.
|
||||
|
||||
2015-06-03 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
* gcc.dg/tree-ssa/pr65447.c: Increase searching number.
|
||||
|
13
gcc/testsuite/gcc.dg/torture/pr66375.c
Normal file
13
gcc/testsuite/gcc.dg/torture/pr66375.c
Normal file
@ -0,0 +1,13 @@
|
||||
/* { dg-do run } */
|
||||
|
||||
int a;
|
||||
extern void abort (void);
|
||||
int main ()
|
||||
{
|
||||
int c = 0;
|
||||
for (; a < 13; ++a)
|
||||
c = (signed char)c - 11;
|
||||
if (c != 113)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
@ -958,27 +958,25 @@ follow_ssa_edge_binary (struct loop *loop, gimple at_stmt,
|
||||
limit++;
|
||||
|
||||
evol = *evolution_of_loop;
|
||||
res = follow_ssa_edge
|
||||
(loop, SSA_NAME_DEF_STMT (rhs0), halting_phi, &evol, limit);
|
||||
|
||||
if (res == t_true)
|
||||
*evolution_of_loop = add_to_evolution
|
||||
evol = add_to_evolution
|
||||
(loop->num,
|
||||
chrec_convert (type, evol, at_stmt),
|
||||
code, rhs1, at_stmt);
|
||||
|
||||
res = follow_ssa_edge
|
||||
(loop, SSA_NAME_DEF_STMT (rhs0), halting_phi, &evol, limit);
|
||||
if (res == t_true)
|
||||
*evolution_of_loop = evol;
|
||||
else if (res == t_false)
|
||||
{
|
||||
res = follow_ssa_edge
|
||||
(loop, SSA_NAME_DEF_STMT (rhs1), halting_phi,
|
||||
evolution_of_loop, limit);
|
||||
|
||||
if (res == t_true)
|
||||
*evolution_of_loop = add_to_evolution
|
||||
*evolution_of_loop = add_to_evolution
|
||||
(loop->num,
|
||||
chrec_convert (type, *evolution_of_loop, at_stmt),
|
||||
code, rhs0, at_stmt);
|
||||
|
||||
res = follow_ssa_edge
|
||||
(loop, SSA_NAME_DEF_STMT (rhs1), halting_phi,
|
||||
evolution_of_loop, limit);
|
||||
if (res == t_true)
|
||||
;
|
||||
else if (res == t_dont_know)
|
||||
*evolution_of_loop = chrec_dont_know;
|
||||
}
|
||||
@ -991,15 +989,15 @@ follow_ssa_edge_binary (struct loop *loop, gimple at_stmt,
|
||||
{
|
||||
/* Match an assignment under the form:
|
||||
"a = b + ...". */
|
||||
*evolution_of_loop = add_to_evolution
|
||||
(loop->num, chrec_convert (type, *evolution_of_loop,
|
||||
at_stmt),
|
||||
code, rhs1, at_stmt);
|
||||
res = follow_ssa_edge
|
||||
(loop, SSA_NAME_DEF_STMT (rhs0), halting_phi,
|
||||
evolution_of_loop, limit);
|
||||
if (res == t_true)
|
||||
*evolution_of_loop = add_to_evolution
|
||||
(loop->num, chrec_convert (type, *evolution_of_loop,
|
||||
at_stmt),
|
||||
code, rhs1, at_stmt);
|
||||
|
||||
;
|
||||
else if (res == t_dont_know)
|
||||
*evolution_of_loop = chrec_dont_know;
|
||||
}
|
||||
@ -1009,15 +1007,15 @@ follow_ssa_edge_binary (struct loop *loop, gimple at_stmt,
|
||||
{
|
||||
/* Match an assignment under the form:
|
||||
"a = ... + c". */
|
||||
*evolution_of_loop = add_to_evolution
|
||||
(loop->num, chrec_convert (type, *evolution_of_loop,
|
||||
at_stmt),
|
||||
code, rhs0, at_stmt);
|
||||
res = follow_ssa_edge
|
||||
(loop, SSA_NAME_DEF_STMT (rhs1), halting_phi,
|
||||
evolution_of_loop, limit);
|
||||
if (res == t_true)
|
||||
*evolution_of_loop = add_to_evolution
|
||||
(loop->num, chrec_convert (type, *evolution_of_loop,
|
||||
at_stmt),
|
||||
code, rhs0, at_stmt);
|
||||
|
||||
;
|
||||
else if (res == t_dont_know)
|
||||
*evolution_of_loop = chrec_dont_know;
|
||||
}
|
||||
@ -1042,13 +1040,13 @@ follow_ssa_edge_binary (struct loop *loop, gimple at_stmt,
|
||||
if (TREE_CODE (rhs1) == SSA_NAME)
|
||||
limit++;
|
||||
|
||||
*evolution_of_loop = add_to_evolution
|
||||
(loop->num, chrec_convert (type, *evolution_of_loop, at_stmt),
|
||||
MINUS_EXPR, rhs1, at_stmt);
|
||||
res = follow_ssa_edge (loop, SSA_NAME_DEF_STMT (rhs0), halting_phi,
|
||||
evolution_of_loop, limit);
|
||||
if (res == t_true)
|
||||
*evolution_of_loop = add_to_evolution
|
||||
(loop->num, chrec_convert (type, *evolution_of_loop, at_stmt),
|
||||
MINUS_EXPR, rhs1, at_stmt);
|
||||
|
||||
;
|
||||
else if (res == t_dont_know)
|
||||
*evolution_of_loop = chrec_dont_know;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user