Jeff Law via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
> On 6/13/2022 5:54 AM, Richard Biener wrote:
>> On Sun, Jun 12, 2022 at 7:27 PM Jeff Law via Gcc-patches
>> <gcc-patches@gcc.gnu.org> wrote:
>> [...]
>>> On a related topic, any thoughts on keeping complex objects as complex
>>> types/modes through gimple and into at least parts of the RTL pipeline?
>>>
>>> The way complex arithmetic instructions work on our chip is going to be
>>> extremely tough to utilize in GCC -- we really need to the complex
>>> types/arithmetic up through RTL generation at the least. Ideally we'd
>>> even expose complex modes all the way to final.    Is that something
>>> y'all could benefit from as well?  Have y'all poked at this problem at all?
>> Since you are going to need to "recover" complex operations from people
>> open-coding them (both fortran and C and also C++ with std::complex) it
>> should be less work to just do that ;)  I think that complex modes and types
>> exist solely for ABI purposes.
> I don't see any reasonable way to do that.  Without going into all the 
> details, our complex ops work on low elements within a vector 
> register.   Trying to recover them after gimple->rtl expansion would be 
> similar to trying to SLP vectorize on RTL, something I'm not keen to chase.
>
> It would be a hell of a lot easier to leave the complex ops as complex 
> ops to the expanders, then make the decision to use the complex 
> instructions or decompose into components.

Realise you might not be in a position to answer this for confidentiality
reasons, but: would normal tree SLP not help here?  We already try to
recognise complex add & multiply, and in principle we could do the same
for other operations as well.  It shouldn't matter that a vector
multiply on 2 elements is really just a single-data operation.

Thanks,
Richard

Reply via email to