[llvm-dev] RFC: Complex in LLVM

David Greene via llvm-dev llvm-dev at lists.llvm.org
Tue Jul 2 08:57:47 PDT 2019


Tim Northover <t.p.northover at gmail.com> writes:

> On Mon, 1 Jul 2019 at 19:56, David Greene via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
>> llvm.creal.* - Overloaded intrinsic to extract the real part of a
>>                complex value
>> declare float  @llvm.creal.c32(c32 %Val)
>> declare double @llvm.creal.c64(c64 %Val)
>
> What are your plans for the reverse? I assume we don't want the only
> way to materialize a complex to be via memory so an insertvalue
> equivalent (or maybe using insertvalue/extractvalue directly?) and a
> literal value would probably be useful.

Good points.  Originally I put the creal/cimag intrinsics in the
proposal when the layout of the complex type was left unspecified.
After internal feedback, I changed it to an explicitly-specified layout
(real followed by imaginary).  Maybe creal/cimag should go away.  Then
we wouldn't have to teach the optimizer about them and it already
understands insertvalue/extractvalue.  Of course it might have to be
taught about insertvalue/extractvalue on a complex type anyway.  So I
dunno, is there a strong preference one way or the other?

                            -David


More information about the llvm-dev mailing list