diff options
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r-- | gcc/tree-if-conv.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index f97c23d..9d2fe26 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -189,8 +189,14 @@ tree_if_conversion (struct loop *loop, bool for_vectorizer) if (single_succ_p (bb)) { basic_block bb_n = single_succ (bb); - if (cond != NULL_TREE) - add_to_predicate_list (bb_n, cond); + + /* Successor bb inherits predicate of its predecessor. If there + is no predicate in predecessor bb, then consider successor bb + as always executed. */ + if (cond == NULL_TREE) + cond = boolean_true_node; + + add_to_predicate_list (bb_n, cond); } } @@ -724,6 +730,8 @@ find_phi_replacement_condition (struct loop *loop, /* Select condition that is not TRUTH_NOT_EXPR. */ tmp_cond = (first_edge->src)->aux; + gcc_assert (tmp_cond); + if (TREE_CODE (tmp_cond) == TRUTH_NOT_EXPR) { edge tmp_edge; |