Skip to content

Commit 9e132f5

Browse files
committed
[SLP][NFC]Move function SLPVectorizerPass::tryToVectorize around, NFC
1 parent bdc8736 commit 9e132f5

File tree

1 file changed

+52
-52
lines changed

1 file changed

+52
-52
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -21680,58 +21680,6 @@ bool SLPVectorizerPass::tryToVectorizeList(ArrayRef<Value *> VL, BoUpSLP &R,
2168021680
return Changed;
2168121681
}
2168221682

21683-
bool SLPVectorizerPass::tryToVectorize(Instruction *I, BoUpSLP &R) {
21684-
if (!I)
21685-
return false;
21686-
21687-
if (!isa<BinaryOperator, CmpInst>(I) || isa<VectorType>(I->getType()))
21688-
return false;
21689-
21690-
Value *P = I->getParent();
21691-
21692-
// Vectorize in current basic block only.
21693-
auto *Op0 = dyn_cast<Instruction>(I->getOperand(0));
21694-
auto *Op1 = dyn_cast<Instruction>(I->getOperand(1));
21695-
if (!Op0 || !Op1 || Op0->getParent() != P || Op1->getParent() != P ||
21696-
R.isDeleted(Op0) || R.isDeleted(Op1))
21697-
return false;
21698-
21699-
// First collect all possible candidates
21700-
SmallVector<std::pair<Value *, Value *>, 4> Candidates;
21701-
Candidates.emplace_back(Op0, Op1);
21702-
21703-
auto *A = dyn_cast<BinaryOperator>(Op0);
21704-
auto *B = dyn_cast<BinaryOperator>(Op1);
21705-
// Try to skip B.
21706-
if (A && B && B->hasOneUse()) {
21707-
auto *B0 = dyn_cast<BinaryOperator>(B->getOperand(0));
21708-
auto *B1 = dyn_cast<BinaryOperator>(B->getOperand(1));
21709-
if (B0 && B0->getParent() == P && !R.isDeleted(B0))
21710-
Candidates.emplace_back(A, B0);
21711-
if (B1 && B1->getParent() == P && !R.isDeleted(B1))
21712-
Candidates.emplace_back(A, B1);
21713-
}
21714-
// Try to skip A.
21715-
if (B && A && A->hasOneUse()) {
21716-
auto *A0 = dyn_cast<BinaryOperator>(A->getOperand(0));
21717-
auto *A1 = dyn_cast<BinaryOperator>(A->getOperand(1));
21718-
if (A0 && A0->getParent() == P && !R.isDeleted(A0))
21719-
Candidates.emplace_back(A0, B);
21720-
if (A1 && A1->getParent() == P && !R.isDeleted(A1))
21721-
Candidates.emplace_back(A1, B);
21722-
}
21723-
21724-
if (Candidates.size() == 1)
21725-
return tryToVectorizeList({Op0, Op1}, R);
21726-
21727-
// We have multiple options. Try to pick the single best.
21728-
std::optional<int> BestCandidate = R.findBestRootPair(Candidates);
21729-
if (!BestCandidate)
21730-
return false;
21731-
return tryToVectorizeList(
21732-
{Candidates[*BestCandidate].first, Candidates[*BestCandidate].second}, R);
21733-
}
21734-
2173521683
namespace {
2173621684

2173721685
/// Model horizontal reductions.
@@ -23744,6 +23692,58 @@ bool SLPVectorizerPass::vectorizeHorReduction(
2374423692
return Res;
2374523693
}
2374623694

23695+
bool SLPVectorizerPass::tryToVectorize(Instruction *I, BoUpSLP &R) {
23696+
if (!I)
23697+
return false;
23698+
23699+
if (!isa<BinaryOperator, CmpInst>(I) || isa<VectorType>(I->getType()))
23700+
return false;
23701+
23702+
Value *P = I->getParent();
23703+
23704+
// Vectorize in current basic block only.
23705+
auto *Op0 = dyn_cast<Instruction>(I->getOperand(0));
23706+
auto *Op1 = dyn_cast<Instruction>(I->getOperand(1));
23707+
if (!Op0 || !Op1 || Op0->getParent() != P || Op1->getParent() != P ||
23708+
R.isDeleted(Op0) || R.isDeleted(Op1))
23709+
return false;
23710+
23711+
// First collect all possible candidates
23712+
SmallVector<std::pair<Value *, Value *>, 4> Candidates;
23713+
Candidates.emplace_back(Op0, Op1);
23714+
23715+
auto *A = dyn_cast<BinaryOperator>(Op0);
23716+
auto *B = dyn_cast<BinaryOperator>(Op1);
23717+
// Try to skip B.
23718+
if (A && B && B->hasOneUse()) {
23719+
auto *B0 = dyn_cast<BinaryOperator>(B->getOperand(0));
23720+
auto *B1 = dyn_cast<BinaryOperator>(B->getOperand(1));
23721+
if (B0 && B0->getParent() == P && !R.isDeleted(B0))
23722+
Candidates.emplace_back(A, B0);
23723+
if (B1 && B1->getParent() == P && !R.isDeleted(B1))
23724+
Candidates.emplace_back(A, B1);
23725+
}
23726+
// Try to skip A.
23727+
if (B && A && A->hasOneUse()) {
23728+
auto *A0 = dyn_cast<BinaryOperator>(A->getOperand(0));
23729+
auto *A1 = dyn_cast<BinaryOperator>(A->getOperand(1));
23730+
if (A0 && A0->getParent() == P && !R.isDeleted(A0))
23731+
Candidates.emplace_back(A0, B);
23732+
if (A1 && A1->getParent() == P && !R.isDeleted(A1))
23733+
Candidates.emplace_back(A1, B);
23734+
}
23735+
23736+
if (Candidates.size() == 1)
23737+
return tryToVectorizeList({Op0, Op1}, R);
23738+
23739+
// We have multiple options. Try to pick the single best.
23740+
std::optional<int> BestCandidate = R.findBestRootPair(Candidates);
23741+
if (!BestCandidate)
23742+
return false;
23743+
return tryToVectorizeList(
23744+
{Candidates[*BestCandidate].first, Candidates[*BestCandidate].second}, R);
23745+
}
23746+
2374723747
bool SLPVectorizerPass::vectorizeRootInstruction(PHINode *P, Instruction *Root,
2374823748
BasicBlock *BB, BoUpSLP &R) {
2374923749
SmallVector<WeakTrackingVH> PostponedInsts;

0 commit comments

Comments
 (0)