[PATCH] D107344: [SLP]Do not emit extra shuffle for insertelements vectorization.

Steven Johnson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 4 10:45:30 PDT 2021


srj added a comment.

Some raw info from debugging one of our likely failure cases:

ShuffleOrOp = InsertElement

E->dump() is:

  0.
      Operand 0:
        <4 x double> <double poison, double poison, double poison, double 1.000000e+02>
          %269 = insertelement <4 x double> <double poison, double poison, double poison, double 1.000000e+02>, double %218, i32 0
      Operand 1:
          %218 = load double, double* %210, align 8, !tbaa !38
          %215 = load double, double* %214, align 8, !tbaa !38
      Scalars:
          %269 = insertelement <4 x double> <double poison, double poison, double poison, double 1.000000e+02>, double %218, i32 0
          %270 = insertelement <4 x double> %269, double %215, i32 1
      State: Vectorize
      MainOp:   %269 = insertelement <4 x double> <double poison, double poison, double poison, double 1.000000e+02>, double %218, i32 0
      AltOp:   %269 = insertelement <4 x double> <double poison, double poison, double poison, double 1.000000e+02>, double %218, i32 0
      VectorizedValue: NULL
      ReuseShuffleIndices: Empty
      ReorderIndices:
      UserTreeIndices:

VL0->dump() is:

  %269 = insertelement <4 x double> <double poison, double poison, double poison, double 1.000000e+02>, double %218, i32 0

The initial value for V (i.e., vectorizeTree(E->getOperand(1))) is:

  %217 = load <2 x double>, <2 x double>* %216, align 8, !tbaa !38


We calculate:

  NumElts = 4, NumScalars = 2, IsIdentity = 1 , Offset = 0

Thus we replace V with Builder.CreateShuffleVector(V, Mask), yielding a new V:

  %268 = shufflevector <2 x double> %217, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>

Since Offset = 0, we (now) skip inserting the extra shufflevector, but this is wrong, since the extra shufflevector would produce:

  %269 = shufflevector <4 x double> <double poison, double poison, double poison, double 1.000000e+02>, <4 x double> %268, <4 x i32> <i32 4, i32 5, i32 2, i32 3>


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D107344



More information about the llvm-commits mailing list