Ping

2015-05-05 14:05 GMT+03:00 Ilya Enkovich <enkovich....@gmail.com>:
> 2015-04-21 8:52 GMT+03:00 Jeff Law <l...@redhat.com>:
>> On 04/17/2015 02:34 AM, Ilya Enkovich wrote:
>>>
>>> On 15 Apr 14:07, Ilya Enkovich wrote:
>>>>
>>>> 2015-04-14 8:22 GMT+03:00 Jeff Law <l...@redhat.com>:
>>>>>
>>>>> On 03/15/2015 02:30 PM, Richard Sandiford wrote:
>>>>>>
>>>>>>
>>>>>> Ilya Enkovich <enkovich....@gmail.com> writes:
>>>>>>>
>>>>>>>
>>>>>>> This patch allows propagation of loop invariants for i386 if
>>>>>>> propagated
>>>>>>> value is a constant to be used in address operand.  Bootstrapped and
>>>>>>> tested on x86_64-unknown-linux-gnu.  OK for trunk or stage 1?
>>>>>>
>>>>>>
>>>>>>
>>>>>> Is it necessary for this to be a target hook?  The concept doesn't seem
>>>>>> particularly target-specific.  We should only propagate into the
>>>>>> address
>>>>>> if the new cost is no greater than the old cost, but if the address
>>>>>> meets that condition and if propagating at this point in the pipeline
>>>>>> is
>>>>>> a win on x86, then wouldn't it be a win for other targets too?
>>>>>
>>>>>
>>>>> I agree with Richard here.  I can't see a strong reason why this should
>>>>> be a
>>>>> target hook.
>>>>>
>>>>> Perhaps part of the issue here is the address costing metrics may not
>>>>> have
>>>>> enough context to make good decisions.  In which case what context do
>>>>> they
>>>>> need?
>>>>
>>>>
>>>> At this point I don't insist on a target hook.  The main reasoning was
>>>> to not affect other targets. If we extend propagation for non constant
>>>> values different aspects may appear. E.g. possible register pressure
>>>> changes may significantly affect ia32. I just wanted to have an
>>>> instrument to play with a propagation on x86 not affecting other
>>>> targets. I don't have an opportunity to test possible performance
>>>> implications on non-x86 targets. Don't expect (significant)
>>>> regressions there but who knows...
>>>>
>>>> I'll remove the hook from this patch. Will probably introduce it later
>>>> if some target specific cases are found.
>>>>
>>>> Thanks,
>>>> Ilya
>>>>
>>>>>
>>>>> Jeff
>>>
>>>
>>> Here is a version with no hook.  Bootstrapped and tested on
>>> x86_64-unknown-linux-gnu.  Is it OK for trunk?
>>>
>>> Thanks,
>>> Ilya
>>> --
>>> gcc/
>>>
>>> 2015-04-17  Ilya Enkovich  <ilya.enkov...@intel.com>
>>>
>>>         PR target/65103
>>>         * fwprop.c (forward_propagate_into): Propagate loop
>>>         invariants if a target says so.
>>>
>>> gcc/testsuite/
>>>
>>> 2015-04-17  Ilya Enkovich  <ilya.enkov...@intel.com>
>>>
>>>         PR target/65103
>>>         * gcc.target/i386/pr65103-2.c: New.
>>
>> It seems to me there's a key piece missing here -- metrics.
>>
>> When is this profitable, when is it not profitable.   Just blindly undoing
>> LICM seems wrong here.
>>
>> The first thought is to look at register pressure through the loop.  I
>> thought we had some infrastructure for this kind of query available. It'd
>> probably be wise to re-use it.  In fact, one might reasonably ask if LICM
>> should have hoisted the expression to start with.
>>
>>
>> I'd also think the cost of the constant may come into play here.  A really
>> cheap constant probably should not have been hoisted by LICM to start with
>> -- but the code may have been written in such a way that some low cost
>> constants are pulled out as loop invariants at the source level.  So this
>> isn't strictly an issue of un-doing bad LICM
>>
>> So I think to go forward we need to be working on solving the "when is this
>> a profitable transformation to make".
>
> This patch doesn't force propagation.  The patch just allows
> propagation and regular fwprop cost estimation is used to compute if
> this is profitable.  For i386 I don't see cases when we shouldn't
> propagate. We remove instruction, reduce register pressure and having
> constant in memory operand is free which is reflected in address_cost
> hook.
>
> Ilya
>
>>
>> jeff

Reply via email to