On 01/06/2016 10:51, "Richard Biener" <richard.guent...@gmail.com> wrote:

>On Wed, Jun 1, 2016 at 10:46 AM, Alan Hayward <alan.hayw...@arm.com>
>wrote:
>>
>>
>> On 30/05/2016 14:22, "Richard Biener" <richard.guent...@gmail.com>
>>wrote:
>>
>>>On Fri, May 27, 2016 at 5:12 PM, Alan Hayward <alan.hayw...@arm.com>
>>>wrote:
>>>>
>>>> On 27/05/2016 12:41, "Richard Biener" <richard.guent...@gmail.com>
>>>>wrote:
>>>>
>>>>>On Fri, May 27, 2016 at 11:09 AM, Alan Hayward <alan.hayw...@arm.com>
>>>>>wrote:
>>
>>>>
>>>>>
>>>>>The rest of the changes look ok to me.
>>>>
>>>> Does that include PATCH 1/3  ?
>>>
>>>I don't like how 1/3 ends up looking :/  So what was the alternative
>>>again?
>>>I looked into 1/3 and what it takes to remove the 'stmt' argument and
>>>instead pass in a vect_def_type.  It's a bit twisted and just adding
>>>another
>>>argument (the loop_vinfo) doesn't help things here.
>>>
>>>So - instead of 1/3 you might want to split out a function
>>>
>>>tree
>>>vect_get_vec_def_for_operand_1 (gimple *def_stmt, enum vect_def_type
>>>dt, tree vectype)
>>>{
>>>  switch (dt)
>>>    {
>>>...
>>>    }
>>>}
>>>
>>>and for constant/external force vectype != NULL.
>>
>> I’m still a little confused as to exactly what you want here.
>>
>> From your two comments I think you wanted me to completely remove the
>> boolean type check and the vect_init_vector call. But if I remove that
>> then other code paths will break.
>>
>> However, I’ve just realised that in vectorized_live_operation I already
>> have the def stmt and I can easily get hold of dt from
>>STMT_VINFO_DEF_TYPE.
>> Which means I can call vect_get_vec_def_for_operand_1 from
>> vectorized_live_operation.
>>
>> I’ve put together a version where I have:
>>
>> tree
>> vect_get_vec_def_for_operand_1 (gimple *def_stmt, enum vect_def_type dt)
>> {
>>
>>  switch (dt)
>>  {
>>    case vect_internal_def || vect_external_def:
>>      gcc_unreachable ()
>>
>>    .. code for for all other cases..
>>  }
>> }
>>
>> /* Used by existing code  */
>> tree
>> vect_get_vec_def_for_operand (tree op, gimple *stmt, tree vectype)
>> {
>>   vect_is_simple_use(op, loop_vinfo, &def_stmt, &dt); ..and the dump
>>code
>>
>>
>>   If dt == internal_def || vect_external_def:
>>       .. Check for BOOLEAN_TYPE ..
>>       return vect_init_vector (stmt, op, vector_type, NULL);
>>
>>   else
>>     vect_get_vec_def_for_operand_1 (def_stmt, dt)
>> }
>>
>>
>> Does that look better?
>
>Yes!
>
>Thanks,
>Richard.
>


This version of the patch addresses the simple+invariant issues
(and patch [3/3] optimizes it).

Also includes a small change to handle when the vect pattern has introduced
new pattern match statements (in vectorizable_live_operation if
STMT_VINFO_RELATED_STMT is not null then use it instead of stmt).

gcc/
        * tree-vect-loop.c (vect_analyze_loop_operations): Allow live stmts.
        (vectorizable_reduction): Check for new relevant state.
        (vectorizable_live_operation): vectorize live stmts using
        BIT_FIELD_REF.  Remove special case for gimple assigns stmts.
        * tree-vect-stmts.c (is_simple_and_all_uses_invariant): New function.
        (vect_stmt_relevant_p): Check for stmts which are only used live.
        (process_use): Use of a stmt does not inherit it's live value.
        (vect_mark_stmts_to_be_vectorized): Simplify relevance inheritance.
        (vect_analyze_stmt): Check for new relevant state.
        *tree-vectorizer.h (vect_relevant): New entry for a stmt which is used
        outside the loop, but not inside it.

        testsuite/
        * gcc.dg/tree-ssa/pr64183.c: Ensure test does not vectorize.
        * testsuite/gcc.dg/vect/no-scevccp-vect-iv-2.c: Remove xfail.
        * gcc.dg/vect/vect-live-1.c: New test.
        * gcc.dg/vect/vect-live-2.c: New test.
        * gcc.dg/vect/vect-live-3.c: New test.
        * gcc.dg/vect/vect-live-4.c: New test.
        * gcc.dg/vect/vect-live-5.c: New test.
        * gcc.dg/vect/vect-live-slp-1.c: New test.
        * gcc.dg/vect/vect-live-slp-2.c: New test.
        * gcc.dg/vect/vect-live-slp-3.c: New test.


Alan.

Attachment: 2of3live.patch
Description: Binary data

Reply via email to