[llvm-dev] Complex proposal v3 + roundtable agenda

Sjoerd Meijer via llvm-dev
Thu, 30 Sep 2021 13:23:38 -0000

Hello,

I would like to revive this thread.

We started thinking about supporting complex number support, for the same reason
Florian stated in his first mail. The idea before I googled and stumbled on this
thread, was the same as Florian proposed. So yes, I would like to support this
approach. 🙂 I would like to add that GCC's approach is the same/similar:
complex number patterns are recognised in the SLP vectoriser, and complex number
builtins are emitted (and then matched later).

Any objections if we go for this approach? Florian, any plans to pick this up?

Cheers,
Sjoerd.


________________________________
From: llvm-dev <llvm-dev-bounces at lists.llvm.org> on behalf of Steve
(Numerics) Canon via llvm-dev <llvm-dev at lists.llvm.org>
Sent: 04 December 2020 19:23
To: David Greene <greened at obbligato.org>
Cc: llvm-dev <llvm-dev at lists.llvm.org>
Subject: Re: [llvm-dev] Complex proposal v3 + roundtable agenda

(Late to the party)

I think there’s a lot of good questions in this thread, but I also want Florian
to get started landing some patches and then everyone can iterate on that.

Slight pushback on this one question:


> On Nov 19, 2020, at 18:11, Cameron McInally via llvm-dev <llvm-dev at
lists.llvm.org> wrote:

>> On Wed, Nov 18, 2020 at 4:47 PM Krzysztof Parzyszek via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>> Complex type would pose another issue for vectorization: in general
it's better to have a vector of the real parts and a vector of the imaginary
parts for the purpose of arithmetic, than having vectors of complex elements
(i.e. real and imaginary parts interleaved).
>
> Is that universally true? I think it depends on the target. Let's take
> Florian's FCMLA example. The inputs and output are interleaved. And if
> you need just the reals/imags from an interleaved vector for something
> else, LD2/ST2 should be pretty fast on recent chips.

FCMLA makes it so _if your data is already interleaved and you can’t change it_,
you can still operate efficiently in that format. But if you have control, and
you’re doing anything beyond basic arithmetic, it’s still advantageous to use a
planar [SoA] layout instead of interleaved [AoS]. For a simple example, if you
want to vectorize a complex exponential function, you’ll want to compute cos and
sin of the imaginary parts, and exp of the real parts—FCMLA doesn’t help here.

So Florian’s proposal:

> In the short-term I think to get things rolling it would be good to focus
on the layout as defined by frontends (e.g. Clang/C++).

Sounds great to me.

– Steve
_______________________________________________
LLVM Developers mailing list
llvm-dev at lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20210930/107005d5/attachment.html>