[llvm] 1e0d3c6 - LV: reuse getSmallBestKnownTC in a TC estimation (NFC) (#105834)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 30 07:46:05 PDT 2024
Author: Ramkumar Ramachandra
Date: 2024-09-30T15:46:02+01:00
New Revision: 1e0d3c68c710fe94bd694e8b5091224e9a085b12
URL: https://github.com/llvm/llvm-project/commit/1e0d3c68c710fe94bd694e8b5091224e9a085b12
DIFF: https://github.com/llvm/llvm-project/commit/1e0d3c68c710fe94bd694e8b5091224e9a085b12.diff
LOG: LV: reuse getSmallBestKnownTC in a TC estimation (NFC) (#105834)
GeneratedRTChecks::getCost duplicates getSmallBestKnownTC partially,
when attempting to get the best trip-count estimate. Since the intent of
this code is to get the best trip-count estimate, and
getSmallBestKnownTC is written for exactly this purpose, replace the
partial code-duplication with a call to this function.
Added:
Modified:
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index 08e78cb49c69fc..034765bee40e7b 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -408,10 +408,11 @@ static bool hasIrregularType(Type *Ty, const DataLayout &DL) {
/// the following procedure:
/// 1) Returns exact trip count if it is known.
/// 2) Returns expected trip count according to profile data if any.
-/// 3) Returns upper bound estimate if it is known.
+/// 3) Returns upper bound estimate if known, and if \p CanUseConstantMax.
/// 4) Returns std::nullopt if all of the above failed.
-static std::optional<unsigned> getSmallBestKnownTC(ScalarEvolution &SE,
- Loop *L) {
+static std::optional<unsigned>
+getSmallBestKnownTC(ScalarEvolution &SE, Loop *L,
+ bool CanUseConstantMax = true) {
// Check if exact trip count is known.
if (unsigned ExpectedTC = SE.getSmallConstantTripCount(L))
return ExpectedTC;
@@ -421,6 +422,9 @@ static std::optional<unsigned> getSmallBestKnownTC(ScalarEvolution &SE,
if (auto EstimatedTC = getLoopEstimatedTripCount(L))
return *EstimatedTC;
+ if (!CanUseConstantMax)
+ return std::nullopt;
+
// Check if upper bound estimate is known.
if (unsigned ExpectedTC = SE.getSmallConstantMaxTripCount(L))
return ExpectedTC;
@@ -1933,14 +1937,10 @@ class GeneratedRTChecks {
// count. Assume that the outer loop executes at least twice.
unsigned BestTripCount = 2;
- // If exact trip count is known use that.
- if (unsigned SmallTC = SE->getSmallConstantTripCount(OuterLoop))
- BestTripCount = SmallTC;
- else if (LoopVectorizeWithBlockFrequency) {
- // Else use profile data if available.
- if (auto EstimatedTC = getLoopEstimatedTripCount(OuterLoop))
- BestTripCount = *EstimatedTC;
- }
+ // Get the best known TC estimate.
+ if (auto EstimatedTC = getSmallBestKnownTC(
+ *SE, OuterLoop, /* CanUseConstantMax = */ false))
+ BestTripCount = *EstimatedTC;
BestTripCount = std::max(BestTripCount, 1U);
InstructionCost NewMemCheckCost = MemCheckCost / BestTripCount;
More information about the llvm-commits
mailing list