re PR tree-optimization/87465 (Loop removal regression)

2018-10-01  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/87465
	* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Fix typo
	causing branch miscounts.

	* gcc.dg/tree-ssa/cunroll-15.c: New testcase.

From-SVN: r264758
This commit is contained in:
Richard Biener 2018-10-01 13:10:48 +00:00 committed by Richard Biener
parent 329130cc40
commit fd5c626c68
4 changed files with 35 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2018-10-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/87465
* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Fix typo
causing branch miscounts.
2018-10-01 Tamar Christina <tamar.christina@arm.com>
* common/config/aarch64/aarch64-common.c (TARGET_OPTION_DEFAULT_PARAM,

View File

@ -1,3 +1,8 @@
2018-10-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/87465
* gcc.dg/tree-ssa/cunroll-15.c: New testcase.
2018-10-01 Tamar Christina <tamar.christina@arm.com>
PR target/86486

View File

@ -0,0 +1,22 @@
/* { dg-do compile } */
/* { dg-options "-O2 -funroll-loops -fdump-tree-cunroll-optimized -fdump-tree-optimized" } */
int Test(void)
{
int c = 0;
const int in[4] = {4,3,4,4};
for (unsigned i = 0; i < 4; i++) {
for (unsigned j = 0; j < i; j++) {
if (in[i] == in[j])
break;
else
++c;
}
}
return c;
}
/* { dg-final { scan-tree-dump-times "optimized:\[^\n\r\]*completely unrolled" 2 "cunroll" } } */
/* When SLP vectorization is enabled the following will fail because DOM
doesn't know how to deal with the vectorized initializer of in. */
/* { dg-final { scan-tree-dump "return 1;" "optimized" } } */

View File

@ -368,8 +368,8 @@ tree_estimate_loop_size (struct loop *loop, edge exit, edge edge_to_cancel,
size->non_call_stmts_on_hot_path++;
if (((gimple_code (stmt) == GIMPLE_COND
&& (!constant_after_peeling (gimple_cond_lhs (stmt), stmt, loop)
|| constant_after_peeling (gimple_cond_rhs (stmt), stmt,
loop)))
|| !constant_after_peeling (gimple_cond_rhs (stmt), stmt,
loop)))
|| (gimple_code (stmt) == GIMPLE_SWITCH
&& !constant_after_peeling (gimple_switch_index (
as_a <gswitch *> (stmt)),