[llvm-dev] Complex proposal v3 + roundtable agenda

Krzysztof Parzyszek via llvm-dev llvm-dev at lists.llvm.org
Fri Nov 13 07:11:21 PST 2020


Examples of complex instructions?  Hexagon has a cmpy instruction for complex multiplication, although it works on int16-based values.  There is a whole set of these instructions (with various saturation/rounding behaviors), but each one of them can multiply two complex numbers (where a complex number is represented as two 16-bit values in a 32-bit register). That's a fairly complex pattern to match, and it could be quite easily disturbed by various arithmetic simplifications.

What I meant with the second part was that if we start with intrinsics, then on targets that don't support complex arithmetic, those intrinsics could be expanded into the explicit real-number-based arithmetic in instcombine.  This could be communicated via a function in TargetTransformInfo.  Instcombine already allows targets to handle their own intrinsics in it, so maybe this would still fall under that category.  This could improve performance in the short term, while the knowledge of the intrinsics is gradually added to the rest of the code.

--
Krzysztof Parzyszek  kparzysz at quicinc.com   AI tools development

-----Original Message-----
From: David Greene <greened at obbligato.org>
Sent: Friday, November 13, 2020 8:49 AM
To: Krzysztof Parzyszek <kparzysz at quicinc.com>; llvm-dev <llvm-dev at lists.llvm.org>
Subject: [EXT] Re: [llvm-dev] Complex proposal v3 + roundtable agenda

Krzysztof Parzyszek via llvm-dev <llvm-dev at lists.llvm.org> writes:

> Some architectures have instructions that assist with complex
> arithmetic.  Without intrinsics it may be hard to use such
> instructions especially because of the arithmetic simplifications.
> Perhaps, depending on TTI, those intrinsics could be expanded into the
> explicit arithmetic?

Can you provide some examples of what you mean?

           -David


More information about the llvm-dev mailing list