[PATCH] Adjust vect-widen-mult-const-[su]16.c for r226675
Richard Biener
richard.guenther@gmail.com
Mon Dec 7 18:17:00 GMT 2015
On December 7, 2015 6:21:36 PM GMT+01:00, Bill Schmidt <wschmidt@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?
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
>> <wschmidt@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 <wschmidt@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 } } } */
>> >
>> >
>> >
>> >
>>
More information about the Gcc-patches
mailing list