[llvm-branch-commits] [llvm][misexpect] Update MisExpect to use provenance tracking metadata (PR #86610)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Mar 25 17:50:00 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Paul Kirth (ilovepi)
<details>
<summary>Changes</summary>
With the IR extension added to MD_prof branch weights, we can now easily
destinguish between weights added by `llvm.expect*` intrinsics and
weights from other sources. This patch re-enables the assert checking
for malformed metadata, which should never happen using the
`llvm.expect*` family of intrinsics.
---
Full diff: https://github.com/llvm/llvm-project/pull/86610.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Utils/MisExpect.cpp (+10-9)
``````````diff
diff --git a/llvm/lib/Transforms/Utils/MisExpect.cpp b/llvm/lib/Transforms/Utils/MisExpect.cpp
index 759289384ee06d..6d1c26b6cedcb5 100644
--- a/llvm/lib/Transforms/Utils/MisExpect.cpp
+++ b/llvm/lib/Transforms/Utils/MisExpect.cpp
@@ -151,15 +151,9 @@ void verifyMisExpect(Instruction &I, ArrayRef<uint32_t> RealWeights,
uint64_t TotalBranchWeight =
LikelyBranchWeight + (UnlikelyBranchWeight * NumUnlikelyTargets);
- // 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.
- // assert((TotalBranchWeight >= LikelyBranchWeight) && (TotalBranchWeight > 0)
- // && "TotalBranchWeight is less than the Likely branch weight");
- if ((TotalBranchWeight == 0) || (TotalBranchWeight <= LikelyBranchWeight))
- return;
+ // Failing this assert means that we have corrupted metadata.
+ assert((TotalBranchWeight >= LikelyBranchWeight) && (TotalBranchWeight > 0)
+ && "TotalBranchWeight is less than the Likely branch weight");
// 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
@@ -186,6 +180,13 @@ void verifyMisExpect(Instruction &I, ArrayRef<uint32_t> RealWeights,
void checkBackendInstrumentation(Instruction &I,
const ArrayRef<uint32_t> RealWeights) {
+ // Backend checking assumes any existing weight comes from an `llvm.expect`
+ // intrinsic. However, SampleProfiling + ThinLTO add branch weights multiple
+ // times, leading to an invalid assumption in our checking. Backend checks
+ // should only operate on branch weights that carry the "!expected" field,
+ // since they are guaranteed to be added by the LowerExpectIntrinsic pass.
+ if(!hasExpectedProvenance(I))
+ return;
SmallVector<uint32_t> ExpectedWeights;
if (!extractBranchWeights(I, ExpectedWeights))
return;
``````````
</details>
https://github.com/llvm/llvm-project/pull/86610
More information about the llvm-branch-commits
mailing list