diff options
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 2775d87..11f921f 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -296,7 +296,8 @@ enum slp_instance_kind { slp_inst_kind_reduc_group, slp_inst_kind_reduc_chain, slp_inst_kind_bb_reduc, - slp_inst_kind_ctor + slp_inst_kind_ctor, + slp_inst_kind_gcond }; /* SLP instance is a sequence of stmts in a loop that can be packed into @@ -1022,6 +1023,10 @@ public: /* Statements whose VUSES need updating if early break vectorization is to happen. */ auto_vec<gimple*> early_break_vuses; + + /* Record statements that are needed to be live for early break vectorization + but may not have an LC PHI node materialized yet in the exits. */ + auto_vec<stmt_vec_info> early_break_live_ivs; } *loop_vec_info; /* Access Functions. */ @@ -1081,6 +1086,8 @@ public: #define LOOP_VINFO_EARLY_BRK_STORES(L) (L)->early_break_stores #define LOOP_VINFO_EARLY_BREAKS_VECT_PEELED(L) \ (single_pred ((L)->loop->latch) != (L)->vec_loop_iv_exit->src) +#define LOOP_VINFO_EARLY_BREAKS_LIVE_IVS(L) \ + (L)->early_break_live_ivs #define LOOP_VINFO_EARLY_BRK_DEST_BB(L) (L)->early_break_dest_bb #define LOOP_VINFO_EARLY_BRK_VUSES(L) (L)->early_break_vuses #define LOOP_VINFO_LOOP_CONDS(L) (L)->conds @@ -2546,6 +2553,9 @@ extern bool vectorizable_phi (vec_info *, stmt_vec_info, gimple **, slp_tree, stmt_vector_for_cost *); extern bool vectorizable_recurr (loop_vec_info, stmt_vec_info, gimple **, slp_tree, stmt_vector_for_cost *); +extern bool vectorizable_early_exit (vec_info *, stmt_vec_info, + gimple_stmt_iterator *, gimple **, + slp_tree, stmt_vector_for_cost *); extern bool vect_emulated_vector_p (tree); extern bool vect_can_vectorize_without_simd_p (tree_code); extern bool vect_can_vectorize_without_simd_p (code_helper); |