On Tue, Apr 18, 2017 at 12:54 PM, Bin Cheng <bin.ch...@arm.com> wrote > Hi, > Based on vect_peeling algorithm, we know for sure that vectorized loop must > iterates at least once. > This patch sets range information for niter bounds of vectorized loop. This > helps niter analysis, > so iv elimination too. > Is it OK?
niters_vector = force_gimple_operand (niters_vector, &stmts, true, var); gsi_insert_seq_on_edge_immediate (pe, stmts); + /* Peeling algorithm guarantees that vector loop bound is at least ONE, + we set range information to make niters analyzer's life easier. */ + if (TREE_CODE (niters_vector) == SSA_NAME) + set_range_info (niters_vector, VR_RANGE, build_int_cst (type, 1), + fold_build2 (RSHIFT_EXPR, type, + TYPE_MAX_VALUE (type), log_vf)); if all of niters_vector folds to an original SSA name then niters_vector after gimplification is not a new SSA name and thus you can't set range-info on it. Likewise for the other case where LOOP_VINFO_NITERS is just an SSA name. Richard. > Thanks, > bin > 2017-04-11 Bin Cheng <bin.ch...@arm.com> > > * tree-vect-loop-manip.c (vect_gen_vector_loop_niters): Refactor. > Set range information for vector loop bound variable. > (vect_do_peeling): Ditto.