From bbc629ebd6429d43cfd72d9a0e2b5ca8a4083b54 Mon Sep 17 00:00:00 2001 From: Kirill Bobyrev Date: Wed, 17 Jun 2020 10:44:28 +0200 Subject: [PATCH] [CallPrinter] Fix maxFreq = 0 case llvm::getHeatColor becomes a problem when maxFreq = 0 -> freq = 0 => log2(double(freq)) / log2(maxFreq) -> log2(0.) / log2(0.) which results in illegal instruction on some architectures. Problematic revision: https://reviews.llvm.org/D77172 --- llvm/lib/Analysis/HeatUtils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Analysis/HeatUtils.cpp b/llvm/lib/Analysis/HeatUtils.cpp index 99d39d8bbe9e..15d672ffbf9a 100644 --- a/llvm/lib/Analysis/HeatUtils.cpp +++ b/llvm/lib/Analysis/HeatUtils.cpp @@ -62,7 +62,7 @@ uint64_t getMaxFreq(const Function &F, const BlockFrequencyInfo *BFI) { std::string getHeatColor(uint64_t freq, uint64_t maxFreq) { if (freq > maxFreq) freq = maxFreq; - double percent = log2(double(freq)) / log2(maxFreq); + double percent = (maxFreq > 0) ? log2(double(freq)) / log2(maxFreq) : 0; return getHeatColor(percent); }