[PATCH] D79078: [VectorCombine] Leave reduction operation to SLP

Sanjay Patel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat May 16 08:57:47 PDT 2020


spatel added a comment.

In D79078#2038950 <https://reviews.llvm.org/D79078#2038950>, @lebedev.ri wrote:

> In D79078#2010024 <https://reviews.llvm.org/D79078#2010024>, @spatel wrote:
>
> > I also sympathize with trying to solve this here rather than SLP. One of the reasons vector-combine exists is because SLP became too hard to reason about. In hindsight, we should have created a separate pass for reductions - those are not traditional SLP concerns. Just my opinion. :)
>
>
> I'm not sure what you have in mind here?
>  That *this* pass should also form such reductions?
>  Or that we should not disturb them after SLP formed them?
>  Or something else?


The reduction logic is a complicated blob of code, so I don't think it belongs here. I'd split it off from SLP into its own pass, but it looks like a lot of untangling.
Currently, we're running this pass *before* SLP only. We could move this after SLP to make sure we are not disturbing reductions before SLP has a chance to recognize them...but I'm not sure if that would also now cause regressions. I don't have a good feel for how these passes are interacting.

What does it take to cause the infinite looping that you found?

Looking at that 1st test - if we allow iteration in this pass, we'll end up with:

  define i32 @ext_ext_reduction(<4 x i32> %x, <4 x i32> %y) {
    %and = and <4 x i32> %x, %y
    %1 = shufflevector <4 x i32> %and, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
    %2 = or <4 x i32> %1, %and
    %3 = shufflevector <4 x i32> %and, <4 x i32> undef, <4 x i32> <i32 2, i32 undef, i32 undef, i32 undef>
    %4 = or <4 x i32> %3, %2
    %5 = shufflevector <4 x i32> %and, <4 x i32> undef, <4 x i32> <i32 3, i32 undef, i32 undef, i32 undef>
    %6 = or <4 x i32> %5, %4
    %7 = extractelement <4 x i32> %6, i64 0
    ret i32 %7
  }

And nothing knows how to form the optimal reduction from that pattern. We could say that's the real problem - source code could be in that form originally, so we just miss the reassociation optimization opportunity.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D79078/new/

https://reviews.llvm.org/D79078





More information about the llvm-commits mailing list