2015-11-20 14:28 GMT+03:00 Richard Biener <richard.guent...@gmail.com>: > On Wed, Nov 18, 2015 at 2:53 PM, Ilya Enkovich <enkovich....@gmail.com> wrote: >> 2015-11-18 16:44 GMT+03:00 Richard Biener <richard.guent...@gmail.com>: >>> On Wed, Nov 18, 2015 at 12:34 PM, Ilya Enkovich <enkovich....@gmail.com> >>> wrote: >>>> Hi, >>>> >>>> When we compute vectypes we skip non-relevant phi nodes. But we process >>>> non-relevant alive statements and thus may need vectype of non-relevant >>>> live phi node to compute mask vectype. This patch enables vectype >>>> computation for live phi nodes. Botostrapped and regtested on >>>> x86_64-unknown-linux-gnu. OK for trunk? >>> >>> Hmm. What breaks if you instead skip all !relevant stmts and not >>> compute vectype for life but not relevant ones? We won't ever >>> "vectorize" !relevant ones, that is, we don't need their vector type. >> >> I tried it and got regression in SLP. It expected non-null vectype >> for non-releveant but live statement. Regression was in >> gcc/gcc/testsuite/gfortran.fortran-torture/execute/pr43390.f90 > > Because somebody put a vector type check before > > if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo) > return false; > > @@ -7590,6 +7651,9 @@ vectorizable_comparison (gimple *stmt, g > tree mask_type; > tree mask; > > + if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo) > + return false; > + > if (!VECTOR_BOOLEAN_TYPE_P (vectype)) > return false; > > @@ -7602,8 +7666,6 @@ vectorizable_comparison (gimple *stmt, g > ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits; > > gcc_assert (ncopies >= 1); > - if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo) > - return false; > > if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_internal_def > && !(STMT_VINFO_DEF_TYPE (stmt_info) == vect_nested_cycle > > fixes this particular fallout for me.
I'll try it. Thanks, Ilya > > Richard. > >> Ilya >> >>> >>> Richard. >>> >>>> Thanks, >>>> Ilya