This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Enhance ifcombine to recover non short circuit branches


On Thu, Oct 17, 2013 at 6:39 PM, Andrew Pinski <pinskia@gmail.com> wrote:
> On Thu, Oct 17, 2013 at 4:03 AM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>> On Thu, Oct 17, 2013 at 4:14 AM, Andrew Pinski <pinskia@gmail.com> wrote:
>>> On Wed, Oct 16, 2013 at 2:12 AM, Zhenqiang Chen
>>> <zhenqiang.chen@linaro.org> wrote:
>>>> Hi,
>>>>
>>>> The patch enhances ifcombine pass to recover some non short circuit
>>>> branches. Basically, it will do the following transformation:
>>>>
>>>> Case 1:
>>>>   if (cond1)
>>>>     if (cond2)
>>>> ==>
>>>>   if (cond1 && cond2)
>>>>
>>>> Case 2:
>>>>   if (cond1)
>>>>     goto L1
>>>>   if (cond2)
>>>>     goto L1
>>>> ==>
>>>>   if (cond1 || cond2)
>>>>     goto L1
>>>>
>>>> Case 3:
>>>>   if (cond1)
>>>>     goto L1
>>>>   else
>>>>     goto L2
>>>> L1:
>>>>   if (cond2)
>>>>     goto L2
>>>> ==>
>>>>   if (invert (cond1) || cond2)
>>>>     goto L2
>>>>
>>>> Case 4:
>>>>   if (cond1)
>>>>     goto L1
>>>>   if (cond2)
>>>>     goto L2
>>>> L1:
>>>> ==>
>>>>   if (invert (cond1) && cond2)
>>>>     goto L2
>>>>
>>>> Bootstrap on X86-64 and ARM.
>>>>
>>>> Two new FAILs in regression tests:
>>>> gcc.dg/uninit-pred-8_b.c
>>>> gcc.dg/uninit-pred-9_b.c
>>>> uninit pass should be enhanced to handle more complex conditions. Will
>>>> submit a bug to track it and fix it later.
>>>>
>>>> Is it OK for trunk?
>>>
>>> I had a much simpler change which did basically the same from 4.7 (I
>>> can update it if people think this is a better approach).
>>
>> I like that more (note you can now use is_gimple_condexpr as predicate
>> for force_gimple_operand).
>
>
> Ok, with both this email and Jakub's email, I decided to port the
> patch to the trunk but I ran into a bug in reassoc which I submitted
> as PR 58775 (with a testcase which shows the issue without this
> patch).

I forgot to say that the tree-ssa-ifcombine.c hunk of the 4.7 patch
applies correctly.  Once PR 58775 is fixed, I will be testing and
submitting the full patch including with the testcases from Zhenqiang.

Thanks,
Andrew

>
>
>>
>> With that we should be able to kill the fold-const.c transform?
>
>
> I think so but I have never tested removing it.
>
> Thanks,
> Andrew Pinski
>
>
>>
>> Thanks,
>> Richard.
>>
>>> Thanks,
>>> Andrew Pinski
>>>
>>>
>>>     2012-09-29  Andrew Pinski  <apinski@cavium.com>
>>>
>>>         * tree-ssa-ifcombine.c: Include rtl.h and tm_p.h.
>>>         (ifcombine_ifandif): Handle cases where
>>>         maybe_fold_and_comparisons fails, combining the branches
>>>         anyways.
>>>         (tree_ssa_ifcombine): Inverse the order of
>>>         the basic block walk, increases the number of combinings.
>>>         * Makefile.in (tree-ssa-ifcombine.o): Update dependencies.
>>>
>>>         * testsuite/gcc.dg/tree-ssa/phi-opt-2.c: Expect zero ifs as the compiler
>>>         produces a & b now.
>>>         * testsuite/gcc.dg/tree-ssa/phi-opt-9.c: Use a function call
>>>         to prevent conditional move to be used.
>>>         * testsuite/gcc.dg/tree-ssa/ssa-dom-thread-3.c: Remove check for
>>>         "one or more intermediate".
>>>
>>>
>>>>
>>>> Thanks!
>>>> -Zhenqiang
>>>>
>>>> ChangeLog:
>>>> 2013-10-16  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
>>>>
>>>>         * fold-const.c (simple_operand_p_2): Make it global.
>>>>         * tree.h (simple_operand_p_2): Declare it.
>>>>         * tree-ssa-ifcombine.c: Include rtl.h and tm_p.h.
>>>>         (bb_has_overhead_p, generate_condition_node,
>>>>         ifcombine_ccmp): New functions.
>>>>         (ifcombine_fold_ifandif): New function, extracted from
>>>>         ifcombine_ifandif.
>>>>         (ifcombine_ifandif): Call ifcombine_ccmp.
>>>>         (tree_ssa_ifcombine_bb): Skip optimized bb.
>>>>
>>>> testsuite/ChangeLog
>>>> 2013-10-16  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
>>>>
>>>>         * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-1.c: New test case.
>>>>         * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-2.c: New test case.
>>>>         * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-3.c: New test case.
>>>>         * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-4.c: New test case.
>>>>         * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-5.c: New test case.
>>>>         * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-6.c: New test case.
>>>>         * gcc.dg/tree-ssa/ssa-dom-thread-3.c: Updated.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]