[llvm-branch-commits] [misexpect] Support diagnostics from frontend profile data (PR #96524)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Jun 24 10:47:53 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-pgo

@llvm/pr-subscribers-llvm-transforms

Author: Paul Kirth (ilovepi)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/96524.diff


3 Files Affected:

- (modified) llvm/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp (+18) 
- (modified) llvm/lib/Transforms/Utils/MisExpect.cpp (+1-2) 
- (modified) llvm/test/Transforms/PGOProfile/missing-annotation.ll (+1-1) 


``````````diff
diff --git a/llvm/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp b/llvm/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp
index 17c5a4ee1fd0b..4075749d0d574 100644
--- a/llvm/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp
+++ b/llvm/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp
@@ -369,9 +369,21 @@ static bool lowerExpectIntrinsic(Function &F) {
     if (BranchInst *BI = dyn_cast<BranchInst>(BB.getTerminator())) {
       if (handleBranchExpect(*BI))
         ExpectIntrinsicsHandled++;
+      else {
+        SmallVector<uint32_t> Weights;
+        if (extractBranchWeights(*BI, Weights))
+          misexpect::checkMissingAnnotations(*BI, Weights,
+                                             /*IsFrontendInstr=*/false);
+      }
     } else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB.getTerminator())) {
       if (handleSwitchExpect(*SI))
         ExpectIntrinsicsHandled++;
+      else {
+        SmallVector<uint32_t> Weights;
+        if (extractBranchWeights(*SI, Weights))
+          misexpect::checkMissingAnnotations(*SI, Weights,
+                                             /*isFrontend=*/false);
+      }
     }
 
     // Remove llvm.expect intrinsics. Iterate backwards in order
@@ -383,6 +395,12 @@ static bool lowerExpectIntrinsic(Function &F) {
         if (SelectInst *SI = dyn_cast<SelectInst>(&Inst)) {
           if (handleBrSelExpect(*SI))
             ExpectIntrinsicsHandled++;
+          else {
+            SmallVector<uint32_t> Weights;
+            if (extractBranchWeights(*SI, Weights))
+              misexpect::checkMissingAnnotations(*SI, Weights,
+                                                 /*isFrontend=*/false);
+          }
         }
         continue;
       }
diff --git a/llvm/lib/Transforms/Utils/MisExpect.cpp b/llvm/lib/Transforms/Utils/MisExpect.cpp
index 933d9a146533d..1d88f867971e8 100644
--- a/llvm/lib/Transforms/Utils/MisExpect.cpp
+++ b/llvm/lib/Transforms/Utils/MisExpect.cpp
@@ -302,8 +302,7 @@ void checkMissingAnnotations(Instruction &I,
     return;
 
   if (IsFrontendInstr) {
-    // TODO: Frontend checking will have to be thought through, since we need
-    // to do the check on branches that don't have expect intrinsics
+    verifyMissingAnnotations(I, ExistingWeights);
   } else {
     SmallVector<uint32_t> ExpectedWeights;
     if (extractBranchWeights(I, ExpectedWeights))
diff --git a/llvm/test/Transforms/PGOProfile/missing-annotation.ll b/llvm/test/Transforms/PGOProfile/missing-annotation.ll
index 6b52302449900..03b0b3bb5cc54 100644
--- a/llvm/test/Transforms/PGOProfile/missing-annotation.ll
+++ b/llvm/test/Transforms/PGOProfile/missing-annotation.ll
@@ -3,7 +3,7 @@
 
 ; RUN: llvm-profdata merge %S/Inputs/misexpect-branch-correct.proftext -o %t.profdata
 
-; RUN: opt < %s -passes="function(lower-expect),pgo-instr-use" -pgo-test-profile-file=%t.profdata -pgo-missing-annotations -pass-remarks=missing-annotation -S 2>&1 | FileCheck %s --check-prefix=MISSING_ANNOTATION
+; RUN: opt < %s -passes="function(lower-expect),pgo-instr-use" -pgo-test-profile-file=%t.profdata -pgo-missing-annotations -pass-remarks=missing-annotations -S 2>&1 | FileCheck %s --check-prefix=MISSING_ANNOTATION
 
 ; MISSING_ANNOTATION: remark: misexpect-branch.c:22:0:  Extremely hot condition. Consider adding llvm.expect intrinsic
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/96524


More information about the llvm-branch-commits mailing list