Skip to content

Commit 5e0653e

Browse files
committed
[SLP][REVEC] Make shufflevector can be vectorized with ReorderIndices
and ReuseShuffleIndices.
1 parent 1d0563f commit 5e0653e

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15374,9 +15374,6 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
1537415374
case Instruction::ShuffleVector: {
1537515375
Value *V;
1537615376
if (SLPReVec && !E->isAltShuffle()) {
15377-
assert(E->ReuseShuffleIndices.empty() &&
15378-
"Not support ReuseShuffleIndices yet.");
15379-
assert(E->ReorderIndices.empty() && "Not support ReorderIndices yet.");
1538015377
setInsertPointAfterBundle(E);
1538115378
Value *Src = vectorizeOperand(E, 0, PostponedPHIs);
1538215379
if (E->VectorizedValue) {
@@ -15394,6 +15391,9 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
1539415391
[&SVSrc](int Mask) { return SVSrc->getShuffleMask()[Mask]; });
1539515392
V = Builder.CreateShuffleVector(SVSrc->getOperand(0), NewMask);
1539615393
propagateIRFlags(V, E->Scalars, VL0);
15394+
if (auto *I = dyn_cast<Instruction>(V))
15395+
V = propagateMetadata(I, E->Scalars);
15396+
V = FinalShuffle(V, E);
1539715397
} else {
1539815398
assert(E->isAltShuffle() &&
1539915399
((Instruction::isBinaryOp(E->getOpcode()) &&
@@ -15524,11 +15524,11 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
1552415524
transformScalarShuffleIndiciesToVector(VecTy->getNumElements(), Mask);
1552515525
}
1552615526
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+
}
1553215532
}
1553315533

1553415534
E->VectorizedValue = V;

llvm/test/Transforms/SLPVectorizer/revec-shufflevector.ll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,16 @@ entry:
8484
}
8585

8686
define void @test4(ptr %in) {
87+
; CHECK-LABEL: @test4(
88+
; CHECK-NEXT: entry:
89+
; CHECK-NEXT: br label [[LABEL0:%.*]]
90+
; CHECK: label0:
91+
; CHECK-NEXT: br label [[LABEL2:%.*]]
92+
; CHECK: label1:
93+
; CHECK-NEXT: br label [[LABEL2]]
94+
; CHECK: label2:
95+
; CHECK-NEXT: br label [[LABEL0]]
96+
;
8797
entry:
8898
br label %label0
8999

0 commit comments

Comments
 (0)