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: [AArch64][PR65375] Fix RTX cost for vector SET


Ping?

Now that Stage1 is open, is this OK for trunk.

Thanks,
Kugan

On 26/03/15 18:21, Kugan wrote:
> ping?
> 
> Thanks,
> Kugan
> 
> On 17/03/15 12:19, Kugan wrote:
>>
>>
>> On 17/03/15 03:48, Kyrill Tkachov wrote:
>>>
>>> On 16/03/15 13:15, Kugan wrote:
>>>> On 16/03/15 23:32, Kugan wrote:
>>>>>>> lower-subreg.c:compute_costs() only cares about the cost of a (set
>>>>>>> (reg)
>>>>>>> (const_int )) move but I think the intention, at least for now, is to
>>>>>>> return extra_cost->vect.alu for all the vector operations.
>>>>>> Almost, what we want at the moment is COSTS_N_INSNS (1) +
>>>>>> extra_cost->vect.alu
>>>>> Thanks Kyrill for the review.
>>>>>
>>>>>>> Regression tested on aarch64-linux-gnu with no new regression. Is this
>>>>>>> OK for trunk?
>>>>>> Are you sure it's a (set (reg) (const_int)) that's being costed here? I
>>>>>> thought for moves into vecto registers it would be a (set (reg)
>>>>>> (const_vector)) which we don't handle in our rtx costs currently. I
>>>>>> think the correct approach would be to extend the aarch64_rtx_costs
>>>>>> switch statement to handle the CONST_VECT case. I believe you can use
>>>>>> aarch64_simd_valid_immediate to check whether x is a valid immediate
>>>>>> for
>>>>>> a simd instruction and give it a cost of extra_cost->vect.alu. The
>>>>>> logic
>>>>>> should be similar to the CONST_INT case.
>>>>> Sorry about the (set (reg) (const_int)) above. But the actual RTL that
>>>>> is being split at 220r.subreg2 is
>>>>>
>>>>> (insn 11 10 12 2 (set (subreg:V4SF (reg/v:OI 77 [ __o ]) 0)
>>>>>           (subreg:V4SF (reg/v:OI 73 [ __o ]) 0))
>>>>> /home/kugan/work/builds/gcc-fsf-gcc/tools/lib/gcc/aarch64-none-linux-gnu/5.0.0/include/arm_neon.h:22625
>>>>>
>>>>> 800 {*aarch64_simd_movv4sf}
>>>>>        (nil))
>>>>>
>>>>> And also, if we return RTX cost above COSTS_N_INSNS (1), it will be
>>>>> split and it dosent recover from there. Therefore we need something like
>>>>> the below to prevent that happening.
>>>>>
>>>> Hi Kyrill,
>>>>
>>>> How about the attached patch? It is similar to what is currently done
>>>> for scalar register move.
>>>
>>> Hi Kugan,
>>> yeah, I think this is a better approach, though I can't approve.
>>>
>>
>> Here is the patch with minor comment update. Regression tested on
>> aarch64-linux-gnu with no new regression. Is this
>> OK for trunk?
>>
>> Thanks,
>> Kugan
>>
>> gcc/ChangeLog:
>>
>> 2015-03-17  Kugan Vivekanandarajah  <kuganv@linaro.org>
>>             Jim Wilson  <jim.wilson@linaro.org>
>>
>> 	PR target/65375
>> 	* config/aarch64/aarch64.c (aarch64_rtx_costs): Handle
>> 	vector register copies.
>>
>>
>>


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