Commit fd5c626c by Richard Biener Committed by Richard Biener

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
parent 329130cc
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> 2018-10-01 Tamar Christina <tamar.christina@arm.com>
* common/config/aarch64/aarch64-common.c (TARGET_OPTION_DEFAULT_PARAM, * common/config/aarch64/aarch64-common.c (TARGET_OPTION_DEFAULT_PARAM,
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> 2018-10-01 Tamar Christina <tamar.christina@arm.com>
PR target/86486 PR target/86486
......
/* { 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" } } */
...@@ -368,8 +368,8 @@ tree_estimate_loop_size (struct loop *loop, edge exit, edge edge_to_cancel, ...@@ -368,8 +368,8 @@ tree_estimate_loop_size (struct loop *loop, edge exit, edge edge_to_cancel,
size->non_call_stmts_on_hot_path++; size->non_call_stmts_on_hot_path++;
if (((gimple_code (stmt) == GIMPLE_COND if (((gimple_code (stmt) == GIMPLE_COND
&& (!constant_after_peeling (gimple_cond_lhs (stmt), stmt, loop) && (!constant_after_peeling (gimple_cond_lhs (stmt), stmt, loop)
|| constant_after_peeling (gimple_cond_rhs (stmt), stmt, || !constant_after_peeling (gimple_cond_rhs (stmt), stmt,
loop))) loop)))
|| (gimple_code (stmt) == GIMPLE_SWITCH || (gimple_code (stmt) == GIMPLE_SWITCH
&& !constant_after_peeling (gimple_switch_index ( && !constant_after_peeling (gimple_switch_index (
as_a <gswitch *> (stmt)), as_a <gswitch *> (stmt)),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment