On Fri, Apr 29, 2016 at 4:51 PM, Bin.Cheng <amker.ch...@gmail.com> wrote:
> On Thu, Apr 28, 2016 at 10:18 AM, Richard Biener
> <richard.guent...@gmail.com> wrote:
>> On Wed, Apr 27, 2016 at 5:49 PM, Bin Cheng <bin.ch...@arm.com> wrote:
>>> Hi,
>>> Currently tree if-conversion only supports PHIs with no more than two 
>>> arguments unless the loop is marked with "simd pragma".  This patch makes 
>>> such PHIs supported unconditionally if they have no more than 
>>> MAX_PHI_ARG_NUM arguments, thus cases like PR56541 can be fixed.  Note 
>>> because a chain of "?:" operators are needed to compute mult-arg PHI, this 
>>> patch records the case and versions loop so that vectorizer can fall back 
>>> to the original loop if if-conversion+vectorization isn't beneficial.  
>>> Ideally, cost computation in vectorizer should be improved to measure 
>>> benefit against the original loop, rather than if-converted loop.  So far 
>>> MAX_PHI_ARG_NUM is set to (4) because cases with more arguments are rare 
>>> and not likely beneficial.
>>>
>>> Apart from above change, the patch also makes changes like: only split 
>>> critical edge when we have to; cleanups code logic in if_convertible_loop_p 
>>> about aggressive_if_conv.
>>>
>>> Bootstrap and test on x86_64 and AArch64, is it OK?
>>
>> Can you make this magic number a --param please?  Otherwise ok.
> Hi,
> Here is the updated patch.  I also added a vectorization test case
> since PR56541 was reported against it.
> Bootstrap & test on x86_64, is it OK?
And the new ChangeLog entry.

2016-04-28  bin cheng  <bin.ch...@arm.com>

    PR tree-optimization/56541
    * doc/invoke.texi (@item max-tree-if-conversion-phi-args): New item.
    * params.def (PARAM_MAX_TREE_IF_CONVERSION_PHI_ARGS): new param.
    * tree-if-conv.c (MAX_PHI_ARG_NUM): new macro.
    (any_complicated_phi): new static variable.
    (aggressive_if_conv): delete.
    (if_convertible_phi_p): support phis with more than two arguments.
    (if_convertible_bb_p): remvoe check on aggressive_if_conv and
    critical pred edges.
    (ifcvt_split_critical_edges): support phis with more than two
    arguments by checking new parameter.  only split critical edges
    if needed.
    (tree_if_conversion): handle simd pragma marked loop using new
    local variable aggressive_if_conv.  check any_complicated_phi.

gcc/testsuite/changelog
2016-04-28  bin cheng  <bin.ch...@arm.com>

    PR tree-optimization/56541
    * gcc.dg/tree-ssa/ifc-pr56541.c: new test.
    * gcc.dg/vect/pr56541.c: new test.

Reply via email to