On Mon, 2015-12-07 at 19:17 +0100, Richard Biener wrote:
> On December 7, 2015 6:21:36 PM GMT+01:00, Bill Schmidt 
> <wschm...@linux.vnet.ibm.com> wrote:
> >Hi Richi,
> >
> >I was afraid this would break X86.  Unfortunately, your proposed patch
> >didn't change any output for me.  Still seeing 6 and 8 instances of
> >"pattern recognized", unfortunately.
> 
> 
> Hmm, can you open a PR and attach vectorizer dumps?

PR68776.  Thanks!

Bill

> 
> Thanks,
> Richard.
> >Bill
> >
> >On Mon, 2015-12-07 at 11:50 +0100, Richard Biener wrote:
> >> On Fri, Dec 4, 2015 at 8:51 PM, Bill Schmidt
> >> <wschm...@linux.vnet.ibm.com> wrote:
> >> > Since r226675, we have been seeing these failures:
> >> >
> >> > FAIL: gcc.dg/vect/vect-widen-mult-const-s16.c -flto
> >-ffat-lto-objects
> >> > scan-tree-dump-times vect "pattern recognized" 2
> >> > FAIL: gcc.dg/vect/vect-widen-mult-const-s16.c scan-tree-dump-times
> >vect
> >> > "pattern recognized" 2
> >> > FAIL: gcc.dg/vect/vect-widen-mult-const-u16.c -flto
> >-ffat-lto-objects
> >> > scan-tree-dump-times vect "pattern recognized" 2
> >> > FAIL: gcc.dg/vect/vect-widen-mult-const-u16.c scan-tree-dump-times
> >vect
> >> > "pattern recognized" 2
> >> >
> >> > Comparing the vect-details dumps from r226674 to r226675, I see
> >these as
> >> > the reason:
> >> >
> >> > 63a64,66
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:16:3:
> >note: vect_recog_mult_pattern: detected:
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:16:3:
> >note: patt_47 = _6 << 2;
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:16:3:
> >note: pattern recognized: patt_47 = _6 << 2;
> >> > 70a74,76
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:16:3:
> >note: vect_recog_mult_pattern: detected:
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:16:3:
> >note: patt_40 = _6 << 1;
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:16:3:
> >note: pattern recognized: patt_40 = _6 << 1;
> >> >
> >> > 747a754,756
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:31:3:
> >note: vect_recog_mult_pattern: detected:
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:31:3:
> >note: patt_47 = _6 << 2;
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:31:3:
> >note: pattern recognized: patt_47 = _6 << 2;
> >> > 754a764,766
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:31:3:
> >note: vect_recog_mult_pattern: detected:
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:31:3:
> >note: patt_40 = _6 << 1;
> >> >>
> >/home/wschmidt/gcc/gcc-mainline-base/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c:31:3:
> >note: pattern recognized: patt_40 = _6 << 1;
> >> >
> >> > These seems precisely what's expected, given the nature of the
> >patch,
> >> > which is looking for these opportunities.  So it's likely that we
> >should
> >> > just change
> >> >
> >> > /* { dg-final { scan-tree-dump-times "pattern recognized" 2
> >> > "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
> >> >
> >> > to
> >> >
> >> > /* { dg-final { scan-tree-dump-times "pattern recognized" 6
> >> > "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
> >> >
> >> > and similarly for the unsigned case.  The following patch does
> >this.
> >> > However, I wanted to run this by Venkat since this was apparently
> >not
> >> > detected when his patch went in.  This doesn't appear to be a
> >> > target-specific issue, and most targets support
> >> > vect_widen_mult_hi_to_si_pattern, so I'm not sure why this wasn't
> >fixed
> >> > with the original patch.  Will this change break on any other
> >targets
> >> > for some reason?
> >> >
> >> > Tested on powerpc64le-unknown-linux-gnu.  Ok for trunk?
> >> 
> >> Hmm.  That will FAIL on x86_64 though because it can handle
> >multiplication
> >> natively.  I think the pattern recognition is simply bogus as it
> >fails to detect
> >> the stmt is already part of the widen-mult pattern?  In fact, pattern
> >> recognition
> >> looping over all pattern functions even if one already matched on the
> >very
> >> same stmt looks bogus to me.
> >> 
> >> Does the (untested)
> >> 
> >> Index: gcc/tree-vect-patterns.c
> >> ===================================================================
> >> --- gcc/tree-vect-patterns.c    (revision 231357)
> >> +++ gcc/tree-vect-patterns.c    (working copy)
> >> @@ -3791,7 +3791,7 @@ vect_mark_pattern_stmts (gimple *orig_st
> >>     This function also does some bookkeeping, as explained in the
> >documentation
> >>     for vect_recog_pattern.  */
> >> 
> >> -static void
> >> +static bool
> >>  vect_pattern_recog_1 (vect_recog_func_ptr vect_recog_func,
> >>                       gimple_stmt_iterator si,
> >>                       vec<gimple *> *stmts_to_replace)
> >> @@ -3809,7 +3809,7 @@ vect_pattern_recog_1 (vect_recog_func_pt
> >>    stmts_to_replace->quick_push (stmt);
> >>    pattern_stmt = (* vect_recog_func) (stmts_to_replace, &type_in,
> >&type_out);
> >>    if (!pattern_stmt)
> >> -    return;
> >> +    return false;
> >> 
> >>    stmt = stmts_to_replace->last ();
> >>    stmt_info = vinfo_for_stmt (stmt);
> >> @@ -3831,13 +3831,13 @@ vect_pattern_recog_1 (vect_recog_func_pt
> >>        /* Check target support  */
> >>        type_in = get_vectype_for_scalar_type (type_in);
> >>        if (!type_in)
> >> -       return;
> >> +       return false;
> >>        if (type_out)
> >>         type_out = get_vectype_for_scalar_type (type_out);
> >>        else
> >>         type_out = type_in;
> >>        if (!type_out)
> >> -       return;
> >> +       return false;
> >>        pattern_vectype = type_out;
> >> 
> >>        if (is_gimple_assign (pattern_stmt))
> >> @@ -3853,7 +3853,7 @@ vect_pattern_recog_1 (vect_recog_func_pt
> >>        if (!optab
> >>            || (icode = optab_handler (optab, vec_mode)) ==
> >CODE_FOR_nothing
> >>            || (insn_data[icode].operand[0].mode != TYPE_MODE
> >(type_out)))
> >> -       return;
> >> +       return false;
> >>      }
> >> 
> >>    /* Found a vectorizable pattern.  */
> >> @@ -3892,6 +3892,8 @@ vect_pattern_recog_1 (vect_recog_func_pt
> >> 
> >>        vect_mark_pattern_stmts (stmt, pattern_stmt, NULL_TREE);
> >>      }
> >> +
> >> +  return true;
> >>  }
> >> 
> >> 
> >> @@ -4005,8 +4007,9 @@ vect_pattern_recog (vec_info *vinfo)
> >>               for (j = 0; j < NUM_PATTERNS; j++)
> >>                 {
> >>                   vect_recog_func = vect_vect_recog_func_ptrs[j];
> >> -                 vect_pattern_recog_1 (vect_recog_func, si,
> >> -                                       &stmts_to_replace);
> >> +                 if (vect_pattern_recog_1 (vect_recog_func, si,
> >> +                                           &stmts_to_replace))
> >> +                   break;
> >>                 }
> >>             }
> >>         }
> >> @@ -4026,8 +4029,9 @@ vect_pattern_recog (vec_info *vinfo)
> >>           for (j = 0; j < NUM_PATTERNS; j++)
> >>             {
> >>               vect_recog_func = vect_vect_recog_func_ptrs[j];
> >> -             vect_pattern_recog_1 (vect_recog_func, si,
> >> -                                   &stmts_to_replace);
> >> +             if (vect_pattern_recog_1 (vect_recog_func, si,
> >> +                                       &stmts_to_replace))
> >> +               break;
> >>             }
> >>         }
> >>      }
> >> 
> >> help?
> >> 
> >> Richard.
> >> 
> >> > Thanks,
> >> > Bill
> >> >
> >> >
> >> > [gcc/testsuite]
> >> >
> >> > 2015-12-04  Bill Schmidt  <wschm...@linux.vnet.ibm.com>
> >> >
> >> >         * gcc.dg/vect/vect-widen-mult-const-s16.c: Change number of
> >> >         occurrences of "pattern recognized" to 6.
> >> >         * gcc.dg/vect/vect-widen-mult-const-u16.c: Likewise.
> >> >
> >> >
> >> > Index: gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c
> >> > ===================================================================
> >> > --- gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c      
> >(revision 231278)
> >> > +++ gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c      
> >(working copy)
> >> > @@ -56,5 +56,5 @@ int main (void)
> >> >
> >> >  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect"
> >{ target vect_widen_mult_hi_to_si } } } */
> >> >  /* { dg-final { scan-tree-dump-times
> >"vect_recog_widen_mult_pattern: detected" 2 "vect" { target
> >vect_widen_mult_hi_to_si_pattern } } } */
> >> > -/* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect"
> >{ target vect_widen_mult_hi_to_si_pattern } } } */
> >> > +/* { dg-final { scan-tree-dump-times "pattern recognized" 6 "vect"
> >{ target vect_widen_mult_hi_to_si_pattern } } } */
> >> >
> >> > Index: gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-u16.c
> >> > ===================================================================
> >> > --- gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-u16.c      
> >(revision 231278)
> >> > +++ gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-u16.c      
> >(working copy)
> >> > @@ -73,4 +73,4 @@ int main (void)
> >> >
> >> >  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect"
> >{ target vect_widen_mult_hi_to_si } } } */
> >> >  /* { dg-final { scan-tree-dump-times
> >"vect_recog_widen_mult_pattern: detected" 2 "vect" { target
> >vect_widen_mult_hi_to_si_pattern } } } */
> >> > -/* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect"
> >{ target vect_widen_mult_hi_to_si_pattern } } } */
> >> > +/* { dg-final { scan-tree-dump-times "pattern recognized" 8 "vect"
> >{ target vect_widen_mult_hi_to_si_pattern } } } */
> >> >
> >> >
> >> >
> >> >
> >> 
> 
> 


Reply via email to