[LV] Vectorization remark for outerloop
Reviewed By: fhahn, ABataev Differential Revision: https://reviews.llvm.org/D150696
This commit is contained in:
committed by
Nikolay Panchenko
parent
8407e8a80d
commit
acbe886880
@@ -1031,6 +1031,23 @@ void reportVectorizationInfo(const StringRef Msg, const StringRef ORETag,
|
||||
<< Msg);
|
||||
}
|
||||
|
||||
/// Report successful vectorization of the loop. In case an outer loop is
|
||||
/// vectorized, prepend "outer" to the vectorization remark.
|
||||
static void reportVectorization(OptimizationRemarkEmitter *ORE, Loop *TheLoop,
|
||||
VectorizationFactor VF, unsigned IC) {
|
||||
LLVM_DEBUG(debugVectorizationMessage(
|
||||
"Vectorizing: ", TheLoop->isInnermost() ? "innermost loop" : "outer loop",
|
||||
nullptr));
|
||||
StringRef LoopType = TheLoop->isInnermost() ? "" : "outer ";
|
||||
ORE->emit([&]() {
|
||||
return OptimizationRemark(LV_NAME, "Vectorized", TheLoop->getStartLoc(),
|
||||
TheLoop->getHeader())
|
||||
<< "vectorized " << LoopType << "loop (vectorization width: "
|
||||
<< ore::NV("VectorizationFactor", VF.Width)
|
||||
<< ", interleaved count: " << ore::NV("InterleaveCount", IC) << ")";
|
||||
});
|
||||
}
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
#ifndef NDEBUG
|
||||
@@ -9591,6 +9608,8 @@ static bool processLoopInVPlanNativePath(
|
||||
LVP.executePlan(VF.Width, 1, BestPlan, LB, DT, false);
|
||||
}
|
||||
|
||||
reportVectorization(ORE, L, VF, 1);
|
||||
|
||||
// Mark the loop as already vectorized to avoid vectorizing again.
|
||||
Hints.setAlreadyVectorized();
|
||||
assert(!verifyFunction(*L->getHeader()->getParent(), &dbgs()));
|
||||
@@ -10156,13 +10175,7 @@ bool LoopVectorizePass::processLoop(Loop *L) {
|
||||
DisableRuntimeUnroll = true;
|
||||
}
|
||||
// Report the vectorization decision.
|
||||
ORE->emit([&]() {
|
||||
return OptimizationRemark(LV_NAME, "Vectorized", L->getStartLoc(),
|
||||
L->getHeader())
|
||||
<< "vectorized loop (vectorization width: "
|
||||
<< NV("VectorizationFactor", VF.Width)
|
||||
<< ", interleaved count: " << NV("InterleaveCount", IC) << ")";
|
||||
});
|
||||
reportVectorization(ORE, L, VF, IC);
|
||||
}
|
||||
|
||||
if (ORE->allowExtraAnalysis(LV_NAME))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; REQUIRES: asserts
|
||||
|
||||
; RUN: opt -passes=loop-vectorize -enable-vplan-native-path -debug -disable-output %s 2>&1 | FileCheck %s
|
||||
; RUN: opt -passes=loop-vectorize -pass-remarks=loop-vectorize -enable-vplan-native-path -debug -disable-output %s 2>&1 | FileCheck %s
|
||||
|
||||
@arr2 = external global [8 x i64], align 16
|
||||
@arr = external global [8 x [8 x i64]], align 16
|
||||
@@ -71,6 +71,8 @@ exit:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: remark: <unknown>:0:0: vectorized outer loop (vectorization width: 4, interleaved count: 1)
|
||||
|
||||
!1 = distinct !{!1, !2, !3}
|
||||
!2 = !{!"llvm.loop.vectorize.width", i32 4}
|
||||
!3 = !{!"llvm.loop.vectorize.enable", i1 true}
|
||||
|
||||
Reference in New Issue
Block a user