@@ -8388,7 +8388,7 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
83888388
83898389 TreeEntry *TE =
83908390 newTreeEntry(VL, Bundle, S, UserTreeIdx, ReuseShuffleIndices);
8391- LLVM_DEBUG(dbgs() << "SLP: added a vector of PHINodes .\n");
8391+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (PHINode) .\n");
83928392
83938393 // Keeps the reordered operands to avoid code duplication.
83948394 PHIHandler Handler(*DT, PH, VL);
@@ -8417,13 +8417,13 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
84178417 }
84188418 // Insert new order with initial value 0, if it does not exist,
84198419 // otherwise return the iterator to the existing one.
8420- newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8421- ReuseShuffleIndices, CurrentOrder);
8420+ TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8421+ ReuseShuffleIndices, CurrentOrder);
8422+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry "
8423+ "(ExtractValueInst/ExtractElementInst).\n");
84228424 // This is a special case, as it does not gather, but at the same time
84238425 // we are not extending buildTree_rec() towards the operands.
8424- ValueList Op0;
8425- Op0.assign(VL.size(), VL0->getOperand(0));
8426- VectorizableTree.back()->setOperand(0, Op0);
8426+ TE->setOperand(*this);
84278427 return;
84288428 }
84298429 case Instruction::InsertElement: {
@@ -8451,7 +8451,7 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
84518451 CurrentOrder.clear();
84528452 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
84538453 {}, CurrentOrder);
8454- LLVM_DEBUG(dbgs() << "SLP: added inserts bundle .\n");
8454+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (InsertElementInst) .\n");
84558455
84568456 TE->setOperand(*this);
84578457 buildTree_rec(TE->getOperand(1), Depth + 1, {TE, 1});
@@ -8471,21 +8471,25 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
84718471 TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
84728472 ReuseShuffleIndices, CurrentOrder, InterleaveFactor);
84738473 if (CurrentOrder.empty())
8474- LLVM_DEBUG(dbgs() << "SLP: added a vector of loads .\n");
8474+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (LoadInst) .\n");
84758475 else
8476- LLVM_DEBUG(dbgs() << "SLP: added a vector of jumbled loads.\n");
8476+ LLVM_DEBUG(dbgs()
8477+ << "SLP: added a new TreeEntry (jumbled LoadInst).\n");
84778478 break;
84788479 case TreeEntry::StridedVectorize:
84798480 // Vectorizing non-consecutive loads with `llvm.masked.gather`.
84808481 TE = newTreeEntry(VL, TreeEntry::StridedVectorize, Bundle, S,
84818482 UserTreeIdx, ReuseShuffleIndices, CurrentOrder);
8482- LLVM_DEBUG(dbgs() << "SLP: added a vector of strided loads.\n");
8483+ LLVM_DEBUG(
8484+ dbgs() << "SLP: added a new TreeEntry (strided LoadInst).\n");
84838485 break;
84848486 case TreeEntry::ScatterVectorize:
84858487 // Vectorizing non-consecutive loads with `llvm.masked.gather`.
84868488 TE = newTreeEntry(VL, TreeEntry::ScatterVectorize, Bundle, S,
84878489 UserTreeIdx, ReuseShuffleIndices);
8488- LLVM_DEBUG(dbgs() << "SLP: added a vector of non-consecutive loads.\n");
8490+ LLVM_DEBUG(
8491+ dbgs()
8492+ << "SLP: added a new TreeEntry (non-consecutive LoadInst).\n");
84898493 break;
84908494 case TreeEntry::CombinedVectorize:
84918495 case TreeEntry::NeedToGather:
@@ -8529,7 +8533,7 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
85298533 }
85308534 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
85318535 ReuseShuffleIndices);
8532- LLVM_DEBUG(dbgs() << "SLP: added a vector of casts .\n");
8536+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (CastInst) .\n");
85338537
85348538 TE->setOperand(*this);
85358539 for (unsigned I : seq<unsigned>(VL0->getNumOperands()))
@@ -8556,7 +8560,7 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
85568560 CmpInst::Predicate P0 = cast<CmpInst>(VL0)->getPredicate();
85578561 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
85588562 ReuseShuffleIndices);
8559- LLVM_DEBUG(dbgs() << "SLP: added a vector of compares .\n");
8563+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (CmpInst) .\n");
85608564
85618565 ValueList Left, Right;
85628566 VLOperands Ops(VL, VL0, *this);
@@ -8626,7 +8630,9 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
86268630 case Instruction::Freeze: {
86278631 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
86288632 ReuseShuffleIndices);
8629- LLVM_DEBUG(dbgs() << "SLP: added a vector of un/bin op.\n");
8633+ LLVM_DEBUG(
8634+ dbgs() << "SLP: added a new TreeEntry "
8635+ "(SelectInst/UnaryOperator/BinaryOperator/FreezeInst).\n");
86308636
86318637 TE->setOperand(*this, isa<BinaryOperator>(VL0) && isCommutative(VL0));
86328638 for (unsigned I : seq<unsigned>(VL0->getNumOperands()))
@@ -8636,7 +8642,7 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
86368642 case Instruction::GetElementPtr: {
86378643 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
86388644 ReuseShuffleIndices);
8639- LLVM_DEBUG(dbgs() << "SLP: added a vector of GEPs .\n");
8645+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (GetElementPtrInst) .\n");
86408646 SmallVector<ValueList, 2> Operands(2);
86418647 // Prepare the operand vector for pointer operands.
86428648 for (Value *V : VL) {
@@ -8694,12 +8700,13 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
86948700 fixupOrderingIndices(CurrentOrder);
86958701 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
86968702 ReuseShuffleIndices, CurrentOrder);
8697- TE->setOperand(*this);
8698- buildTree_rec(TE->getOperand(0), Depth + 1, {TE, 0});
86998703 if (Consecutive)
8700- LLVM_DEBUG(dbgs() << "SLP: added a vector of stores .\n");
8704+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (StoreInst) .\n");
87018705 else
8702- LLVM_DEBUG(dbgs() << "SLP: added a vector of jumbled stores.\n");
8706+ LLVM_DEBUG(
8707+ dbgs() << "SLP: added a new TreeEntry (jumbled StoreInst).\n");
8708+ TE->setOperand(*this);
8709+ buildTree_rec(TE->getOperand(0), Depth + 1, {TE, 0});
87038710 return;
87048711 }
87058712 case Instruction::Call: {
@@ -8710,6 +8717,7 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
87108717
87118718 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
87128719 ReuseShuffleIndices);
8720+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (CallInst).\n");
87138721 TE->setOperand(*this, isCommutative(VL0));
87148722 for (unsigned I : seq<unsigned>(CI->arg_size())) {
87158723 // For scalar operands no need to create an entry since no need to
@@ -8723,7 +8731,13 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
87238731 case Instruction::ShuffleVector: {
87248732 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
87258733 ReuseShuffleIndices);
8726- LLVM_DEBUG(dbgs() << "SLP: added a ShuffleVector op.\n");
8734+ if (S.isAltShuffle()) {
8735+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (alternate op).\n");
8736+ } else {
8737+ assert(SLPReVec && "Only supported by REVEC.");
8738+ LLVM_DEBUG(
8739+ dbgs() << "SLP: added a new TreeEntry (ShuffleVectorInst).\n");
8740+ }
87278741
87288742 // Reorder operands if reordering would enable vectorization.
87298743 auto *CI = dyn_cast<CmpInst>(VL0);
0 commit comments