[llvm] [BOLT] Fixing double conversion in CacheMetrics (PR #75253)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 12 15:03:42 PST 2023
https://github.com/spupyrev created https://github.com/llvm/llvm-project/pull/75253
None
>From ab5681ef7bd740d5d83f94e87075222e677f6568 Mon Sep 17 00:00:00 2001
From: spupyrev <spupyrev at fb.com>
Date: Tue, 12 Dec 2023 14:50:13 -0800
Subject: [PATCH] [BOLT] Fixing double conversion in CacheMetrics
---
bolt/lib/Passes/CacheMetrics.cpp | 27 ++++++++++-----------------
1 file changed, 10 insertions(+), 17 deletions(-)
diff --git a/bolt/lib/Passes/CacheMetrics.cpp b/bolt/lib/Passes/CacheMetrics.cpp
index ba3a2a5f685f38..20055dc77c3df0 100644
--- a/bolt/lib/Passes/CacheMetrics.cpp
+++ b/bolt/lib/Passes/CacheMetrics.cpp
@@ -14,22 +14,18 @@
#include "bolt/Passes/CacheMetrics.h"
#include "bolt/Core/BinaryBasicBlock.h"
#include "bolt/Core/BinaryFunction.h"
-#include "llvm/Support/CommandLine.h"
#include <unordered_map>
using namespace llvm;
using namespace bolt;
-namespace opts {
-
-extern cl::OptionCategory BoltOptCategory;
+namespace {
-extern cl::opt<unsigned> ITLBPageSize;
-extern cl::opt<unsigned> ITLBEntries;
+/// The size of an i-tlb cache page.
+constexpr unsigned ITLBPageSize = 4096;
-} // namespace opts
-
-namespace {
+/// The number of entries in the i-tlb cache.
+constexpr unsigned ITLBEntries = 16;
/// Initialize and return a position map for binary basic blocks
void extractBasicBlockInfo(
@@ -133,9 +129,6 @@ double expectedCacheHitRatio(
const std::vector<BinaryFunction *> &BinaryFunctions,
const std::unordered_map<BinaryBasicBlock *, uint64_t> &BBAddr,
const std::unordered_map<BinaryBasicBlock *, uint64_t> &BBSize) {
-
- const double PageSize = opts::ITLBPageSize;
- const uint64_t CacheEntries = opts::ITLBEntries;
std::unordered_map<const BinaryFunction *, Predecessors> Calls =
extractFunctionCalls(BinaryFunctions);
// Compute 'hotness' of the functions
@@ -155,7 +148,7 @@ double expectedCacheHitRatio(
for (BinaryFunction *BF : BinaryFunctions) {
if (BF->getLayout().block_empty())
continue;
- double Page = BBAddr.at(BF->getLayout().block_front()) / PageSize;
+ uint64_t Page = BBAddr.at(BF->getLayout().block_front()) / ITLBPageSize;
PageSamples[Page] += FunctionSamples.at(BF);
}
@@ -166,15 +159,15 @@ double expectedCacheHitRatio(
if (BF->getLayout().block_empty() || FunctionSamples.at(BF) == 0.0)
continue;
double Samples = FunctionSamples.at(BF);
- double Page = BBAddr.at(BF->getLayout().block_front()) / PageSize;
+ uint64_t Page = BBAddr.at(BF->getLayout().block_front()) / ITLBPageSize;
// The probability that the page is not present in the cache
- double MissProb = pow(1.0 - PageSamples[Page] / TotalSamples, CacheEntries);
+ double MissProb = pow(1.0 - PageSamples[Page] / TotalSamples, ITLBEntries);
// Processing all callers of the function
for (std::pair<BinaryFunction *, uint64_t> Pair : Calls[BF]) {
BinaryFunction *SrcFunction = Pair.first;
- double SrcPage =
- BBAddr.at(SrcFunction->getLayout().block_front()) / PageSize;
+ uint64_t SrcPage =
+ BBAddr.at(SrcFunction->getLayout().block_front()) / ITLBPageSize;
// Is this a 'long' or a 'short' call?
if (Page != SrcPage) {
// This is a miss
More information about the llvm-commits
mailing list