@@ -15374,9 +15374,6 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
15374
15374
case Instruction::ShuffleVector: {
15375
15375
Value *V;
15376
15376
if (SLPReVec && !E->isAltShuffle()) {
15377
- assert(E->ReuseShuffleIndices.empty() &&
15378
- "Not support ReuseShuffleIndices yet.");
15379
- assert(E->ReorderIndices.empty() && "Not support ReorderIndices yet.");
15380
15377
setInsertPointAfterBundle(E);
15381
15378
Value *Src = vectorizeOperand(E, 0, PostponedPHIs);
15382
15379
if (E->VectorizedValue) {
@@ -15394,6 +15391,9 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
15394
15391
[&SVSrc](int Mask) { return SVSrc->getShuffleMask()[Mask]; });
15395
15392
V = Builder.CreateShuffleVector(SVSrc->getOperand(0), NewMask);
15396
15393
propagateIRFlags(V, E->Scalars, VL0);
15394
+ if (auto *I = dyn_cast<Instruction>(V))
15395
+ V = propagateMetadata(I, E->Scalars);
15396
+ V = FinalShuffle(V, E);
15397
15397
} else {
15398
15398
assert(E->isAltShuffle() &&
15399
15399
((Instruction::isBinaryOp(E->getOpcode()) &&
@@ -15524,11 +15524,11 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
15524
15524
transformScalarShuffleIndiciesToVector(VecTy->getNumElements(), Mask);
15525
15525
}
15526
15526
V = Builder.CreateShuffleVector(V0, V1, Mask);
15527
- }
15528
- if (auto *I = dyn_cast<Instruction>(V)) {
15529
- V = propagateMetadata(I, E->Scalars );
15530
- GatherShuffleExtractSeq .insert(I);
15531
- CSEBlocks.insert(I->getParent());
15527
+ if (auto *I = dyn_cast<Instruction>(V)) {
15528
+ V = propagateMetadata(I, E->Scalars);
15529
+ GatherShuffleExtractSeq.insert(I );
15530
+ CSEBlocks .insert(I->getParent() );
15531
+ }
15532
15532
}
15533
15533
15534
15534
E->VectorizedValue = V;
0 commit comments