[llvm] 4683a2e - [llvm][misexpect] Avoid division by 0 when using sample profiling
Paul Kirth via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 22 15:48:08 PDT 2022
Author: Paul Kirth
Date: 2022-04-22T22:48:00Z
New Revision: 4683a2effa72c8fdc5e09b1dc9ee3170988f75fa
URL: https://github.com/llvm/llvm-project/commit/4683a2effa72c8fdc5e09b1dc9ee3170988f75fa
DIFF: https://github.com/llvm/llvm-project/commit/4683a2effa72c8fdc5e09b1dc9ee3170988f75fa.diff
LOG: [llvm][misexpect] Avoid division by 0 when using sample profiling
MisExpect diagnostics should not prevent compilation from succeeding, and the
assertion is insufficient to prevent division by zero in release builds.
This patch addresses that by replacing the assert with an early return.
Additionally, it disables MisExpect diagnostics when using sample profiling,
since this is the only known case where this error has manifested.
Reviewed By: tejohnson
Differential Revision: https://reviews.llvm.org/D124302
Added:
Modified:
llvm/lib/Transforms/IPO/SampleProfile.cpp
llvm/lib/Transforms/Utils/MisExpect.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/SampleProfile.cpp b/llvm/lib/Transforms/IPO/SampleProfile.cpp
index 4bd7900f110ab..c555e2100cf1f 100644
--- a/llvm/lib/Transforms/IPO/SampleProfile.cpp
+++ b/llvm/lib/Transforms/IPO/SampleProfile.cpp
@@ -74,7 +74,6 @@
#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Transforms/Utils/CallPromotionUtils.h"
#include "llvm/Transforms/Utils/Cloning.h"
-#include "llvm/Transforms/Utils/MisExpect.h"
#include "llvm/Transforms/Utils/SampleProfileInference.h"
#include "llvm/Transforms/Utils/SampleProfileLoaderBaseImpl.h"
#include "llvm/Transforms/Utils/SampleProfileLoaderBaseUtil.h"
@@ -1741,7 +1740,10 @@ void SampleProfileLoader::generateMDProfMetadata(Function &F) {
}
}
- misexpect::checkExpectAnnotations(*TI, Weights, /*IsFrontend=*/false);
+ // FIXME: Re-enable for sample profiling after investigating why the sum
+ // of branch weights can be 0
+ //
+ // misexpect::checkExpectAnnotations(*TI, Weights, /*IsFrontend=*/false);
uint64_t TempWeight;
// Only set weights if there is at least one non-zero weight.
diff --git a/llvm/lib/Transforms/Utils/MisExpect.cpp b/llvm/lib/Transforms/Utils/MisExpect.cpp
index 846badf6e941e..5ace0c63a7395 100644
--- a/llvm/lib/Transforms/Utils/MisExpect.cpp
+++ b/llvm/lib/Transforms/Utils/MisExpect.cpp
@@ -185,8 +185,13 @@ void verifyMisExpect(Instruction &I, ArrayRef<uint32_t> RealWeights,
uint64_t TotalBranchWeight =
LikelyBranchWeight + (UnlikelyBranchWeight * NumUnlikelyTargets);
- assert((TotalBranchWeight >= LikelyBranchWeight) && (TotalBranchWeight > 0) &&
- "TotalBranchWeight is less than the Likely branch weight");
+ // FIXME: When we've addressed sample profiling, restore the assertion
+ //
+ // We cannot calculate branch probability if either of these invariants aren't
+ // met. However, MisExpect diagnostics should not prevent code from compiling,
+ // so we simply forgo emitting diagnostics here, and return early.
+ if ((TotalBranchWeight == 0) || (TotalBranchWeight <= LikelyBranchWeight))
+ return;
// To determine our threshold value we need to obtain the branch probability
// for the weights added by llvm.expect and use that proportion to calculate
More information about the llvm-commits
mailing list