[PATCH V3] Use preferred mode for doloop IV [PR61837]
guojiufu
guojiufu@linux.ibm.com
Thu Jul 29 06:54:10 GMT 2021
On 2021-07-27 23:40, Jeff Law wrote:
> On 7/27/2021 12:27 AM, Richard Biener wrote:
>> On Fri, 23 Jul 2021, Jeff Law wrote:
>>
>>>
>>> On 7/15/2021 4:08 AM, Jiufu Guo via Gcc-patches wrote:
>>>> Refine code for V2 according to review comments:
>>>> * Use if check instead assert, and refine assert
>>>> * Use better RE check for test case, e.g. (?n)/(?p)
>>>> * Use better wording for target.def
>>>>
>>>> Currently, doloop.xx variable is using the type as niter which may
>>>> be
>>>> shorter than word size. For some targets, it would be better to use
>>>> word size type. For example, on 64bit system, to access 32bit
>>>> value,
>>>> subreg maybe used. Then using 64bit type maybe better for niter if
>>>> it can be present in both 32bit and 64bit.
>>>>
>>>> This patch add target hook for querg perferred mode for doloop IV.
>>>> And update mode accordingly.
>>>>
>>>> Bootstrap and regtest pass on powerpc64le, is this ok for trunk?
>>>>
>>>> BR.
>>>> Jiufu
>>>>
>>>> gcc/ChangeLog:
>>>>
>>>> 2021-07-15 Jiufu Guo <guojiufu@linux.ibm.com>
>>>>
>>>> PR target/61837
>>>> * config/rs6000/rs6000.c (TARGET_PREFERRED_DOLOOP_MODE): New hook.
>>>> (rs6000_preferred_doloop_mode): New hook.
>>>> * doc/tm.texi: Regenerate.
>>>> * doc/tm.texi.in: Add hook preferred_doloop_mode.
>>>> * target.def (preferred_doloop_mode): New hook.
>>>> * targhooks.c (default_preferred_doloop_mode): New hook.
>>>> * targhooks.h (default_preferred_doloop_mode): New hook.
>>>> * tree-ssa-loop-ivopts.c (compute_doloop_base_on_mode): New
>>>> function.
>>>> (add_iv_candidate_for_doloop): Call targetm.preferred_doloop_mode
>>>> and compute_doloop_base_on_mode.
>>>>
>>>> gcc/testsuite/ChangeLog:
>>>>
>>>> 2021-07-15 Jiufu Guo <guojiufu@linux.ibm.com>
>>>>
>>>> PR target/61837
>>>> * gcc.target/powerpc/pr61837.c: New test.
>>> My first reaction was that whatever type corresponds to the target's
>>> word_mode
>>> would be the right choice. But then I remembered things like dbCC on
>>> m68k
>>> which had a more limited range. While I don't think m68k uses the
>>> doloop
>>> bits, it's a clear example that the most desirable type may not
>>> correspond to
>>> the word type for the target.
>>>
>>> So my concern with this patch is its introducing more target
>>> dependencies into
>>> the gimple pipeline which is generally considered undesirable from a
>>> design
>>> standpoint. Is there any way to lower from whatever type is chosen
>>> by ivopts
>>> to the target's desired type at the gimple->rtl border rather than
>>> doing it in
>>> ivopts?
>> I think that's difficult - after all we want to base other IV uses on
>> the doloop IV if possible. So IMHO it's not different from IVOPTs
>> choosing different IVs based on RTL costing and target addressing mode
>> availability so I wasn't worried about those additional target
>> dependences at this point of the GIMPLE pipeline.
> Yea, you're probably right on both accounts. With that resolved I
> think this is OK for the trunk.
>
> Thanks for your patience Jiufu and thanks for chiming in Richi.
Thanks for all your help!
The patch was committed to r12-2585.
I notice that I ignored one guality case(gfortran.dg/guality/arg1.f90).
It becomes 'unsupported' from 'pass'. The issue could be reproduced
on a similar test case without this patch. Just opened PR101669 for it.
BR,
Jiufu
>
> jeff
More information about the Gcc-patches
mailing list