@@ -8391,7 +8391,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8391
8391
8392
8392
TreeEntry *TE =
8393
8393
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());
8395
8396
8396
8397
// Keeps the reordered operands to avoid code duplication.
8397
8398
PHIHandler Handler(*DT, PH, VL);
@@ -8420,13 +8421,14 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8420
8421
}
8421
8422
// Insert new order with initial value 0, if it does not exist,
8422
8423
// 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());
8425
8429
// This is a special case, as it does not gather, but at the same time
8426
8430
// 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);
8430
8432
return;
8431
8433
}
8432
8434
case Instruction::InsertElement: {
@@ -8454,7 +8456,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8454
8456
CurrentOrder.clear();
8455
8457
TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8456
8458
{}, CurrentOrder);
8457
- LLVM_DEBUG(dbgs() << "SLP: added inserts bundle.\n");
8459
+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (InsertElementInst).\n";
8460
+ TE->dump());
8458
8461
8459
8462
TE->setOperand(*this);
8460
8463
buildTree_rec(TE->getOperand(1), Depth + 1, {TE, 1});
@@ -8474,21 +8477,28 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8474
8477
TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8475
8478
ReuseShuffleIndices, CurrentOrder, InterleaveFactor);
8476
8479
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());
8478
8482
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());
8480
8486
break;
8481
8487
case TreeEntry::StridedVectorize:
8482
8488
// Vectorizing non-consecutive loads with `llvm.masked.gather`.
8483
8489
TE = newTreeEntry(VL, TreeEntry::StridedVectorize, Bundle, S,
8484
8490
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());
8486
8493
break;
8487
8494
case TreeEntry::ScatterVectorize:
8488
8495
// Vectorizing non-consecutive loads with `llvm.masked.gather`.
8489
8496
TE = newTreeEntry(VL, TreeEntry::ScatterVectorize, Bundle, S,
8490
8497
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());
8492
8502
break;
8493
8503
case TreeEntry::CombinedVectorize:
8494
8504
case TreeEntry::NeedToGather:
@@ -8532,7 +8542,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8532
8542
}
8533
8543
TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8534
8544
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());
8536
8547
8537
8548
TE->setOperand(*this);
8538
8549
for (unsigned I : seq<unsigned>(VL0->getNumOperands()))
@@ -8559,7 +8570,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8559
8570
CmpInst::Predicate P0 = cast<CmpInst>(VL0)->getPredicate();
8560
8571
TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8561
8572
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());
8563
8575
8564
8576
ValueList Left, Right;
8565
8577
VLOperands Ops(VL, VL0, *this);
@@ -8629,7 +8641,10 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8629
8641
case Instruction::Freeze: {
8630
8642
TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8631
8643
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());
8633
8648
8634
8649
TE->setOperand(*this, isa<BinaryOperator>(VL0) && isCommutative(VL0));
8635
8650
for (unsigned I : seq<unsigned>(VL0->getNumOperands()))
@@ -8639,7 +8654,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8639
8654
case Instruction::GetElementPtr: {
8640
8655
TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8641
8656
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());
8643
8659
SmallVector<ValueList, 2> Operands(2);
8644
8660
// Prepare the operand vector for pointer operands.
8645
8661
for (Value *V : VL) {
@@ -8697,12 +8713,15 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8697
8713
fixupOrderingIndices(CurrentOrder);
8698
8714
TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8699
8715
ReuseShuffleIndices, CurrentOrder);
8700
- TE->setOperand(*this);
8701
- buildTree_rec(TE->getOperand(0), Depth + 1, {TE, 0});
8702
8716
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());
8704
8719
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});
8706
8725
return;
8707
8726
}
8708
8727
case Instruction::Call: {
@@ -8713,6 +8732,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
8713
8732
8714
8733
TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8715
8734
ReuseShuffleIndices);
8735
+ LLVM_DEBUG(dbgs() << "SLP: added a new TreeEntry (CallInst).\n";
8736
+ TE->dump());
8716
8737
TE->setOperand(*this, isCommutative(VL0));
8717
8738
for (unsigned I : seq<unsigned>(CI->arg_size())) {
8718
8739
// 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,
8726
8747
case Instruction::ShuffleVector: {
8727
8748
TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
8728
8749
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
+ }
8730
8759
8731
8760
// Reorder operands if reordering would enable vectorization.
8732
8761
auto *CI = dyn_cast<CmpInst>(VL0);
0 commit comments