[CodeGen] Add support for Splats in ComplexDeinterleaving pass
authorIgor Kirillov <igor.kirillov@arm.com>
Wed, 14 Jun 2023 16:41:50 +0000 (16:41 +0000)
committerIgor Kirillov <igor.kirillov@arm.com>
Wed, 5 Jul 2023 17:02:52 +0000 (17:02 +0000)
commit7f20407ceed8e713c5f193a2598358332b5ac0d3
treef5874c39a1ad3ef30725e96f10f07184c77b915e
parent9efbb67939bd00b5ed60adc37baa01501c637c36
[CodeGen] Add support for Splats in ComplexDeinterleaving pass

This commit allows generating of complex number intrinsics for expressions
with constants or loops invariants, which are represented as splats.
For instance, after vectorizing loops in the following code snippets,
the ComplexDeinterleaving pass will be able to generate complex number
intrinsics:

```
complex<> x = ...;
for (int i = 0; i < N; ++i)
    c[i] = a[i] * b[i] * x;
```

or

```
for (int i = 0; i < N; ++i)
    c[i] = a[i] * b[i] * (11.0 + 3.0i);
```

Differential Revision: https://reviews.llvm.org/D153355
llvm/include/llvm/CodeGen/ComplexDeinterleavingPass.h
llvm/lib/CodeGen/ComplexDeinterleavingPass.cpp
llvm/test/CodeGen/AArch64/complex-deinterleaving-splat-scalable.ll
llvm/test/CodeGen/AArch64/complex-deinterleaving-splat.ll