[GlobalISel] Detect splats built with G_CONCAT_VECTORS
Add support to the MI matching of vector splats for patterns that consist of `G_CONCAT_VECTORS` of smaller splats with the same constant value. With this, we would consider the following pseudo-MIR to be a splat: ``` %0 = G_[F]CONSTANT [...] %1 = G_BUILD_VECTOR %0, %0, ..., %0 %2 = G_CONCAT_VECTORS %1, %1, ..., %1 ``` Since it uses recursion for matching splats, it could match pretty complicated patterns with all sorts of combinations of `G_BUILD_VECTOR` and `G_CONCAT_VECTORS` (e.g. a `G_CONCAT_VECTORS` with a `G_BUILD_VECTOR_TRUNC` and another `G_CONCAT_VECTORS` as operands), and it should also look through copies etc. This should make it easier to match complex immediates for certain instructions on AMDGPU, where for instance a <8 x s16> will be split before instruction selection into a `G_CONCAT_VECTORS` of <2 x s16> splats. Differential Revision: https://reviews.llvm.org/D141902
Loading
Please sign in to comment