From: David Sherwood Date: Tue, 7 Sep 2021 15:05:25 +0000 (+0100) Subject: [NFC] Replace unsigned VF with ElementCount in EpilogueLoopVectorizationInfo X-Git-Tag: upstream/15.0.7~31629 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bbada9ff4571c1ce6d0f6f508644c6cd58a6e8d6;p=platform%2Fupstream%2Fllvm.git [NFC] Replace unsigned VF with ElementCount in EpilogueLoopVectorizationInfo This patch simply replaces any unsigned VFs with ElementCounts. It's still NFC because at the moment epilogue vectorisation is disabled when the main vector loop uses scalable vectors. Differential Revision: https://reviews.llvm.org/D109364 --- diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 1a511ef..9a66def 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -909,10 +909,9 @@ struct EpilogueLoopVectorizationInfo { Value *TripCount = nullptr; Value *VectorTripCount = nullptr; - EpilogueLoopVectorizationInfo(unsigned MVF, unsigned MUF, unsigned EVF, - unsigned EUF) - : MainLoopVF(ElementCount::getFixed(MVF)), MainLoopUF(MUF), - EpilogueVF(ElementCount::getFixed(EVF)), EpilogueUF(EUF) { + EpilogueLoopVectorizationInfo(ElementCount MVF, unsigned MUF, + ElementCount EVF, unsigned EUF) + : MainLoopVF(MVF), MainLoopUF(MUF), EpilogueVF(EVF), EpilogueUF(EUF) { assert(EUF == 1 && "A high UF for the epilogue loop is likely not beneficial."); } @@ -8409,9 +8408,9 @@ BasicBlock *EpilogueVectorizerMainLoop::createEpilogueVectorizedLoopSkeleton() { void EpilogueVectorizerMainLoop::printDebugTracesAtStart() { LLVM_DEBUG({ dbgs() << "Create Skeleton for epilogue vectorized loop (first pass)\n" - << "Main Loop VF:" << EPI.MainLoopVF.getKnownMinValue() + << "Main Loop VF:" << EPI.MainLoopVF << ", Main Loop UF:" << EPI.MainLoopUF - << ", Epilogue Loop VF:" << EPI.EpilogueVF.getKnownMinValue() + << ", Epilogue Loop VF:" << EPI.EpilogueVF << ", Epilogue Loop UF:" << EPI.EpilogueUF << "\n"; }); } @@ -8426,8 +8425,7 @@ BasicBlock *EpilogueVectorizerMainLoop::emitMinimumIterationCountCheck( Loop *L, BasicBlock *Bypass, bool ForEpilogue) { assert(L && "Expected valid Loop."); assert(Bypass && "Expected valid bypass basic block."); - unsigned VFactor = - ForEpilogue ? EPI.EpilogueVF.getKnownMinValue() : VF.getKnownMinValue(); + ElementCount VFactor = ForEpilogue ? EPI.EpilogueVF : VF; unsigned UFactor = ForEpilogue ? EPI.EpilogueUF : UF; Value *Count = getOrCreateTripCount(L); // Reuse existing vector loop preheader for TC checks. @@ -8441,7 +8439,7 @@ BasicBlock *EpilogueVectorizerMainLoop::emitMinimumIterationCountCheck( ICmpInst::ICMP_ULE : ICmpInst::ICMP_ULT; Value *CheckMinIters = Builder.CreateICmp( - P, Count, ConstantInt::get(Count->getType(), VFactor * UFactor), + P, Count, getRuntimeVF(Builder, Count->getType(), VFactor * UFactor), "min.iters.check"); if (!ForEpilogue) @@ -8595,8 +8593,7 @@ EpilogueVectorizerEpilogueLoop::emitMinimumVectorEpilogueIterCountCheck( Value *CheckMinIters = Builder.CreateICmp( P, Count, - ConstantInt::get(Count->getType(), - EPI.EpilogueVF.getKnownMinValue() * EPI.EpilogueUF), + getRuntimeVF(Builder, Count->getType(), EPI.EpilogueVF * EPI.EpilogueUF), "min.epilog.iters.check"); ReplaceInstWithInst( @@ -8610,7 +8607,7 @@ EpilogueVectorizerEpilogueLoop::emitMinimumVectorEpilogueIterCountCheck( void EpilogueVectorizerEpilogueLoop::printDebugTracesAtStart() { LLVM_DEBUG({ dbgs() << "Create Skeleton for epilogue vectorized loop (second pass)\n" - << "Epilogue Loop VF:" << EPI.EpilogueVF.getKnownMinValue() + << "Epilogue Loop VF:" << EPI.EpilogueVF << ", Epilogue Loop UF:" << EPI.EpilogueUF << "\n"; }); } @@ -10413,9 +10410,7 @@ bool LoopVectorizePass::processLoop(Loop *L) { // The first pass vectorizes the main loop and creates a scalar epilogue // to be vectorized by executing the plan (potentially with a different // factor) again shortly afterwards. - EpilogueLoopVectorizationInfo EPI(VF.Width.getKnownMinValue(), IC, - EpilogueVF.Width.getKnownMinValue(), - 1); + EpilogueLoopVectorizationInfo EPI(VF.Width, IC, EpilogueVF.Width, 1); EpilogueVectorizerMainLoop MainILV(L, PSE, LI, DT, TLI, TTI, AC, ORE, EPI, &LVL, &CM, BFI, PSI, Checks);