[llvm-dev] Complex proposal v3 + roundtable agenda

Florian Hahn via llvm-dev llvm-dev at lists.llvm.org
Fri Nov 13 12:07:48 PST 2020



> On Nov 13, 2020, at 15:11, Krzysztof Parzyszek via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> 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.


That’s a good point! I think one challenge will be that the hardware instructions might be quite different from target to target. I was thinking that we could just introduce/use those intrinsics on targets where the can be lowered efficiently. 

Once we have support in the vectorizers, it might be beneficial to use the intrinsics even for targets that do not natively support them. I think for that cases, adding a pass that lowers them to regular IR instructions for targets that do not have dedicated instructions would be a great idea. I think we did something similar for the experimental reduction intrinsics. 

Cheers,
Florian


More information about the llvm-dev mailing list