@@ -8391,7 +8391,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
83918391
83928392 TreeEntry *TE =
83938393 newTreeEntry(VL, Bundle, S, UserTreeIdx, ReuseShuffleIndices);
8394- LLVM_DEBUG(dbgs() << "SLP: added a vector of PHINodes.\n");
8394+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (PHINode).\n";
8395+ TE->dump());
83958396
83968397 // Keeps the reordered operands to avoid code duplication.
83978398 PHIHandler Handler(*DT, PH, VL);
@@ -8420,13 +8421,14 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
84208421 }
84218422 // Insert new order with initial value 0, if it does not exist,
84228423 // otherwise return the iterator to the existing one.
8423- newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8424- ReuseShuffleIndices, CurrentOrder);
8424+ TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8425+ ReuseShuffleIndices, CurrentOrder);
8426+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry "
8427+ "(ExtractValueInst/ExtractElementInst).\n";
8428+ TE->dump());
84258429 // This is a special case, as it does not gather, but at the same time
84268430 // we are not extending buildTree_rec() towards the operands.
8427- ValueList Op0;
8428- Op0.assign(VL.size(), VL0->getOperand(0));
8429- VectorizableTree.back()->setOperand(0, Op0);
8431+ TE->setOperand(*this);
84308432 return;
84318433 }
84328434 case Instruction::InsertElement: {
@@ -8454,7 +8456,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
84548456 CurrentOrder.clear();
84558457 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
84568458 {}, CurrentOrder);
8457- LLVM_DEBUG(dbgs() << "SLP: added inserts bundle.\n");
8459+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (InsertElementInst).\n";
8460+ TE->dump());
84588461
84598462 TE->setOperand(*this);
84608463 buildTree_rec(TE->getOperand(1), Depth + 1, {TE, 1});
@@ -8474,21 +8477,28 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
84748477 TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
84758478 ReuseShuffleIndices, CurrentOrder, InterleaveFactor);
84768479 if (CurrentOrder.empty())
8477- LLVM_DEBUG(dbgs() << "SLP: added a vector of loads.\n");
8480+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (LoadInst).\n";
8481+ TE->dump());
84788482 else
8479- LLVM_DEBUG(dbgs() << "SLP: added a vector of jumbled loads.\n");
8483+ LLVM_DEBUG(dbgs()
8484+ << "SLP: added a new TreeEntry (jumbled LoadInst).\n";
8485+ TE->dump());
84808486 break;
84818487 case TreeEntry::StridedVectorize:
84828488 // Vectorizing non-consecutive loads with `llvm.masked.gather`.
84838489 TE = newTreeEntry(VL, TreeEntry::StridedVectorize, Bundle, S,
84848490 UserTreeIdx, ReuseShuffleIndices, CurrentOrder);
8485- LLVM_DEBUG(dbgs() << "SLP: added a vector of strided loads.\n");
8491+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (strided LoadInst).\n";
8492+ TE->dump());
84868493 break;
84878494 case TreeEntry::ScatterVectorize:
84888495 // Vectorizing non-consecutive loads with `llvm.masked.gather`.
84898496 TE = newTreeEntry(VL, TreeEntry::ScatterVectorize, Bundle, S,
84908497 UserTreeIdx, ReuseShuffleIndices);
8491- LLVM_DEBUG(dbgs() << "SLP: added a vector of non-consecutive loads.\n");
8498+ LLVM_DEBUG(
8499+ dbgs()
8500+ << "SLP: added a new TreeEntry (non-consecutive LoadInst).\n";
8501+ TE->dump());
84928502 break;
84938503 case TreeEntry::CombinedVectorize:
84948504 case TreeEntry::NeedToGather:
@@ -8532,7 +8542,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
85328542 }
85338543 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
85348544 ReuseShuffleIndices);
8535- LLVM_DEBUG(dbgs() << "SLP: added a vector of casts.\n");
8545+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (CastInst).\n";
8546+ TE->dump());
85368547
85378548 TE->setOperand(*this);
85388549 for (unsigned I : seq<unsigned>(VL0->getNumOperands()))
@@ -8559,7 +8570,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
85598570 CmpInst::Predicate P0 = cast<CmpInst>(VL0)->getPredicate();
85608571 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
85618572 ReuseShuffleIndices);
8562- LLVM_DEBUG(dbgs() << "SLP: added a vector of compares.\n");
8573+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (CmpInst).\n";
8574+ TE->dump());
85638575
85648576 ValueList Left, Right;
85658577 VLOperands Ops(VL, VL0, *this);
@@ -8629,7 +8641,10 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
86298641 case Instruction::Freeze: {
86308642 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
86318643 ReuseShuffleIndices);
8632- LLVM_DEBUG(dbgs() << "SLP: added a vector of un/bin op.\n");
8644+ LLVM_DEBUG(
8645+ dbgs() << "SLP: added a new TreeEntry "
8646+ "(SelectInst/UnaryOperator/BinaryOperator/FreezeInst).\n";
8647+ TE->dump());
86338648
86348649 TE->setOperand(*this, isa<BinaryOperator>(VL0) && isCommutative(VL0));
86358650 for (unsigned I : seq<unsigned>(VL0->getNumOperands()))
@@ -8639,7 +8654,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
86398654 case Instruction::GetElementPtr: {
86408655 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
86418656 ReuseShuffleIndices);
8642- LLVM_DEBUG(dbgs() << "SLP: added a vector of GEPs.\n");
8657+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (GetElementPtrInst).\n";
8658+ TE->dump());
86438659 SmallVector<ValueList, 2> Operands(2);
86448660 // Prepare the operand vector for pointer operands.
86458661 for (Value *V : VL) {
@@ -8697,12 +8713,15 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
86978713 fixupOrderingIndices(CurrentOrder);
86988714 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
86998715 ReuseShuffleIndices, CurrentOrder);
8700- TE->setOperand(*this);
8701- buildTree_rec(TE->getOperand(0), Depth + 1, {TE, 0});
87028716 if (Consecutive)
8703- LLVM_DEBUG(dbgs() << "SLP: added a vector of stores.\n");
8717+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (StoreInst).\n";
8718+ TE->dump());
87048719 else
8705- LLVM_DEBUG(dbgs() << "SLP: added a vector of jumbled stores.\n");
8720+ LLVM_DEBUG(
8721+ dbgs() << "SLP: added a new TreeEntry (jumbled StoreInst).\n";
8722+ TE->dump());
8723+ TE->setOperand(*this);
8724+ buildTree_rec(TE->getOperand(0), Depth + 1, {TE, 0});
87068725 return;
87078726 }
87088727 case Instruction::Call: {
@@ -8713,6 +8732,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
87138732
87148733 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
87158734 ReuseShuffleIndices);
8735+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (CallInst).\n";
8736+ TE->dump());
87168737 TE->setOperand(*this, isCommutative(VL0));
87178738 for (unsigned I : seq<unsigned>(CI->arg_size())) {
87188739 // For scalar operands no need to create an entry since no need to
@@ -8726,7 +8747,15 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
87268747 case Instruction::ShuffleVector: {
87278748 TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
87288749 ReuseShuffleIndices);
8729- LLVM_DEBUG(dbgs() << "SLP: added a ShuffleVector op.\n");
8750+ if (S.isAltShuffle()) {
8751+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (isAltShuffle).\n";
8752+ TE->dump());
8753+ } else {
8754+ assert(SLPReVec && "Only supported by REVEC.");
8755+ LLVM_DEBUG(
8756+ dbgs() << "SLP: added a new TreeEntry (ShuffleVectorInst).\n";
8757+ TE->dump());
8758+ }
87308759
87318760 // Reorder operands if reordering would enable vectorization.
87328761 auto *CI = dyn_cast<CmpInst>(VL0);
0 commit comments