forked from OSchip/llvm-project
[LV] Set loop metadata after VPlan execution (NFC).
Setting the loop metadata for the vector loop after VPlan execution allows generating the full loop body during VPlan execution. This is in preparation for D113224.
This commit is contained in:
parent
330cb03269
commit
791523bae6
|
@ -3547,25 +3547,6 @@ BasicBlock *InnerLoopVectorizer::completeLoopSkeleton(Loop *L,
|
|||
"Inconsistent vector loop preheader");
|
||||
Builder.SetInsertPoint(&*LoopVectorBody->getFirstInsertionPt());
|
||||
|
||||
Optional<MDNode *> VectorizedLoopID =
|
||||
makeFollowupLoopID(OrigLoopID, {LLVMLoopVectorizeFollowupAll,
|
||||
LLVMLoopVectorizeFollowupVectorized});
|
||||
if (VectorizedLoopID.hasValue()) {
|
||||
L->setLoopID(VectorizedLoopID.getValue());
|
||||
|
||||
// Do not setAlreadyVectorized if loop attributes have been defined
|
||||
// explicitly.
|
||||
return LoopVectorPreHeader;
|
||||
}
|
||||
|
||||
// Keep all loop hints from the original loop on the vector loop (we'll
|
||||
// replace the vectorizer-specific hints below).
|
||||
if (MDNode *LID = OrigLoop->getLoopID())
|
||||
L->setLoopID(LID);
|
||||
|
||||
LoopVectorizeHints Hints(L, true, *ORE, TTI);
|
||||
Hints.setAlreadyVectorized();
|
||||
|
||||
#ifdef EXPENSIVE_CHECKS
|
||||
assert(DT->verify(DominatorTree::VerificationLevel::Fast));
|
||||
LI->verify(*DT);
|
||||
|
@ -7971,6 +7952,27 @@ void LoopVectorizationPlanner::executePlan(ElementCount BestVF, unsigned BestUF,
|
|||
BestVPlan.prepareToExecute(ILV.getOrCreateTripCount(nullptr), State);
|
||||
BestVPlan.execute(&State);
|
||||
|
||||
// Keep all loop hints from the original loop on the vector loop (we'll
|
||||
// replace the vectorizer-specific hints below).
|
||||
MDNode *OrigLoopID = OrigLoop->getLoopID();
|
||||
|
||||
Optional<MDNode *> VectorizedLoopID =
|
||||
makeFollowupLoopID(OrigLoopID, {LLVMLoopVectorizeFollowupAll,
|
||||
LLVMLoopVectorizeFollowupVectorized});
|
||||
|
||||
Loop *L = LI->getLoopFor(State.CFG.PrevBB);
|
||||
if (VectorizedLoopID.hasValue())
|
||||
L->setLoopID(VectorizedLoopID.getValue());
|
||||
else {
|
||||
// Keep all loop hints from the original loop on the vector loop (we'll
|
||||
// replace the vectorizer-specific hints below).
|
||||
if (MDNode *LID = OrigLoop->getLoopID())
|
||||
L->setLoopID(LID);
|
||||
|
||||
LoopVectorizeHints Hints(L, true, *ORE);
|
||||
Hints.setAlreadyVectorized();
|
||||
}
|
||||
|
||||
// 3. Fix the vectorized code: take care of header phi's, live-outs,
|
||||
// predication, updating analyses.
|
||||
ILV.fixVectorizedLoop(State);
|
||||
|
|
Loading…
Reference in New Issue