Richard Sandiford <richard.sandif...@arm.com> writes:
> Wilco Dijkstra <wilco.dijks...@arm.com> writes:
>> Use LDP/STP for large struct types as they have useful immediate offsets and 
>> are typically faster.
>> This removes differences between little and big endian and allows use of 
>> LDP/STP without UNSPEC.
>>
>> Passes regress and bootstrap, OK for commit?
>>
>> gcc:
>>         * config/aarch64/aarch64.cc (aarch64_classify_address): Treat SIMD 
>> structs identically
>>         in little and bigendian.
>>         * config/aarch64/aarch64.md (aarch64_mov<mode>): Remove VSTRUCT 
>> instructions.
>>         (aarch64_be_mov<mode>): Allow little-endian, rename to 
>> aarch64_mov<mode>.
>>         (aarch64_be_movoi): Allow little-endian, rename to aarch64_movoi.
>>         (aarch64_be_movci): Allow little-endian, rename to aarch64_movci.
>>         (aarch64_be_movxi): Allow little-endian, rename to aarch64_movxi.
>>         Remove big-endian special case in define_split variants.
>>
>> gcc/testsuite:
>>         * gcc.target/aarch64/torture/simd-abi-8.c: Update to check for 
>> LDP/STP.
>
> [...]
> So another alternative would be to go with the patch as-is,
> but add a new mechanism for gimple to query the valid addresses
> for IFN_(MASK_)LOAD_LANES and IFN_(MASK_)STORE_LANES, rather than
> relying purely on the legitimate address mechanism,.  Ideally, the new
> interface would be generic enough that we could use it for target (md)
> builtins as well, to better optimise ACLE code.

Gah, just realised after sending that there's another potential problem.
Currently inline asms can assume that "m" will only include the LD1/ST1
range for little-endian.  We might need to consider using
TARGET_MEM_CONSTRAINT, so that we continue to present the same
interface to asms, but can use the wider range internally.

Thanks,
Richard

Reply via email to