aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-ivcanon.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2016-06-16 14:54:31 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2016-06-16 12:54:31 +0000
commit1dc8d15bc6d7d55c7731093e0a8f280fc5477381 (patch)
tree937ab4dc403f8ddab97d133b7ac933e2ef9fe060 /gcc/tree-ssa-loop-ivcanon.c
parent0ae207e94796488449b40fe83263ddcefb4d9479 (diff)
downloadgcc-1dc8d15bc6d7d55c7731093e0a8f280fc5477381.zip
gcc-1dc8d15bc6d7d55c7731093e0a8f280fc5477381.tar.gz
gcc-1dc8d15bc6d7d55c7731093e0a8f280fc5477381.tar.bz2
pr36648.cc: Disable cunrolli
* g++.dg/vect/pr36648.cc: Disable cunrolli * tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Fix estimation of comparsions in the last iteration. From-SVN: r237527
Diffstat (limited to 'gcc/tree-ssa-loop-ivcanon.c')
-rw-r--r--gcc/tree-ssa-loop-ivcanon.c126
1 files changed, 65 insertions, 61 deletions
diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c
index fff28ee..76ecba4 100644
--- a/gcc/tree-ssa-loop-ivcanon.c
+++ b/gcc/tree-ssa-loop-ivcanon.c
@@ -255,69 +255,73 @@ tree_estimate_loop_size (struct loop *loop, edge exit, edge edge_to_cancel,
/* Look for reasons why we might optimize this stmt away. */
- if (gimple_has_side_effects (stmt))
- ;
- /* Exit conditional. */
- else if (exit && body[i] == exit->src
- && stmt == last_stmt (exit->src))
+ if (!gimple_has_side_effects (stmt))
{
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, " Exit condition will be eliminated "
- "in peeled copies.\n");
- likely_eliminated_peeled = true;
- }
- else if (edge_to_cancel && body[i] == edge_to_cancel->src
- && stmt == last_stmt (edge_to_cancel->src))
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, " Exit condition will be eliminated "
- "in last copy.\n");
- likely_eliminated_last = true;
- }
- /* Sets of IV variables */
- else if (gimple_code (stmt) == GIMPLE_ASSIGN
- && constant_after_peeling (gimple_assign_lhs (stmt), stmt, loop))
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, " Induction variable computation will"
- " be folded away.\n");
- likely_eliminated = true;
- }
- /* Assignments of IV variables. */
- else if (gimple_code (stmt) == GIMPLE_ASSIGN
- && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME
- && constant_after_peeling (gimple_assign_rhs1 (stmt), stmt,
- loop)
- && (gimple_assign_rhs_class (stmt) != GIMPLE_BINARY_RHS
- || constant_after_peeling (gimple_assign_rhs2 (stmt),
- stmt, loop)))
- {
- size->constant_iv = true;
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file,
- " Constant expression will be folded away.\n");
- likely_eliminated = true;
- }
- /* Conditionals. */
- else if ((gimple_code (stmt) == GIMPLE_COND
- && constant_after_peeling (gimple_cond_lhs (stmt), stmt,
- loop)
- && constant_after_peeling (gimple_cond_rhs (stmt), stmt,
- loop)
- /* We don't simplify all constant compares so make sure
- they are not both constant already. See PR70288. */
- && (! is_gimple_min_invariant (gimple_cond_lhs (stmt))
- || ! is_gimple_min_invariant (gimple_cond_rhs (stmt))))
- || (gimple_code (stmt) == GIMPLE_SWITCH
- && constant_after_peeling (gimple_switch_index (
- as_a <gswitch *> (stmt)),
+ /* Exit conditional. */
+ if (exit && body[i] == exit->src
+ && stmt == last_stmt (exit->src))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, " Exit condition will be eliminated "
+ "in peeled copies.\n");
+ likely_eliminated_peeled = true;
+ }
+ if (edge_to_cancel && body[i] == edge_to_cancel->src
+ && stmt == last_stmt (edge_to_cancel->src))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, " Exit condition will be eliminated "
+ "in last copy.\n");
+ likely_eliminated_last = true;
+ }
+ /* Sets of IV variables */
+ if (gimple_code (stmt) == GIMPLE_ASSIGN
+ && constant_after_peeling (gimple_assign_lhs (stmt), stmt, loop))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, " Induction variable computation will"
+ " be folded away.\n");
+ likely_eliminated = true;
+ }
+ /* Assignments of IV variables. */
+ else if (gimple_code (stmt) == GIMPLE_ASSIGN
+ && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME
+ && constant_after_peeling (gimple_assign_rhs1 (stmt),
stmt, loop)
- && ! is_gimple_min_invariant
- (gimple_switch_index (as_a <gswitch *> (stmt)))))
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, " Constant conditional.\n");
- likely_eliminated = true;
+ && (gimple_assign_rhs_class (stmt) != GIMPLE_BINARY_RHS
+ || constant_after_peeling (gimple_assign_rhs2 (stmt),
+ stmt, loop)))
+ {
+ size->constant_iv = true;
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ " Constant expression will be folded away.\n");
+ likely_eliminated = true;
+ }
+ /* Conditionals. */
+ else if ((gimple_code (stmt) == GIMPLE_COND
+ && constant_after_peeling (gimple_cond_lhs (stmt), stmt,
+ loop)
+ && constant_after_peeling (gimple_cond_rhs (stmt), stmt,
+ loop)
+ /* We don't simplify all constant compares so make sure
+ they are not both constant already. See PR70288. */
+ && (! is_gimple_min_invariant (gimple_cond_lhs (stmt))
+ || ! is_gimple_min_invariant
+ (gimple_cond_rhs (stmt))))
+ || (gimple_code (stmt) == GIMPLE_SWITCH
+ && constant_after_peeling (gimple_switch_index (
+ as_a <gswitch *>
+ (stmt)),
+ stmt, loop)
+ && ! is_gimple_min_invariant
+ (gimple_switch_index
+ (as_a <gswitch *> (stmt)))))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, " Constant conditional.\n");
+ likely_eliminated = true;
+ }
}
size->overall += num;