Do not check the if-convertibility of statements that are not predicated.
2010-05-26 Sebastian Pop <sebastian.pop@amd.com> * tree-if-conv.c (if_convertible_gimple_assign_stmt_p): Do not special case loop->header. (is_predicated): New. (if_convertible_loop_p): Call it. From-SVN: r159887
This commit is contained in:
parent
e1449456c0
commit
4204425f00
2 changed files with 25 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
|||
2010-05-26 Sebastian Pop <sebastian.pop@amd.com>
|
||||
|
||||
* tree-if-conv.c (if_convertible_gimple_assign_stmt_p): Do not
|
||||
special case loop->header.
|
||||
(is_predicated): New.
|
||||
(if_convertible_loop_p): Call it.
|
||||
|
||||
2010-05-26 Sebastian Pop <sebastian.pop@amd.com>
|
||||
|
||||
* tree-if-conv.c (add_to_dst_predicate_list): Do not pass a statemet
|
||||
|
|
|
@ -274,9 +274,7 @@ if_convertible_gimple_assign_stmt_p (struct loop *loop, basic_block bb,
|
|||
return false;
|
||||
}
|
||||
|
||||
/* See if it needs speculative loading or not. */
|
||||
if (bb != loop->header
|
||||
&& gimple_assign_rhs_could_trap_p (stmt))
|
||||
if (gimple_assign_rhs_could_trap_p (stmt))
|
||||
{
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
fprintf (dump_file, "tree could trap...\n");
|
||||
|
@ -588,6 +586,19 @@ predicate_bbs (loop_p loop)
|
|||
return true;
|
||||
}
|
||||
|
||||
/* Returns true when BB has a predicate that is not trivial: true or
|
||||
NULL_TREE. */
|
||||
|
||||
static bool
|
||||
is_predicated (basic_block bb)
|
||||
{
|
||||
tree cond = (tree) bb->aux;
|
||||
|
||||
return (cond != NULL_TREE
|
||||
&& cond != boolean_true_node
|
||||
&& !integer_onep (cond));
|
||||
}
|
||||
|
||||
/* Return true when LOOP is if-convertible.
|
||||
LOOP is if-convertible if:
|
||||
- it is innermost,
|
||||
|
@ -682,6 +693,10 @@ if_convertible_loop_p (struct loop *loop)
|
|||
basic_block bb = ifc_bbs[i];
|
||||
gimple_stmt_iterator itr;
|
||||
|
||||
/* For non predicated BBs, don't check their statements. */
|
||||
if (!is_predicated (bb))
|
||||
continue;
|
||||
|
||||
for (itr = gsi_start_bb (bb); !gsi_end_p (itr); gsi_next (&itr))
|
||||
if (!if_convertible_stmt_p (loop, bb, gsi_stmt (itr)))
|
||||
return false;
|
||||
|
|
Loading…
Add table
Reference in a new issue