[llvm] [WPD]Provide branch weight for checking mode. (PR #124084)

Mingming Liu via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 23 00:31:07 PST 2025


https://github.com/mingmingl-llvm updated https://github.com/llvm/llvm-project/pull/124084

>From aebae34d38ce13e6ac7435b23f8330fb4c2f67d9 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Wed, 22 Jan 2025 23:42:11 -0800
Subject: [PATCH 1/2] [WPD]Provide branch weight for checking mode

---
 llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp | 5 +++--
 llvm/test/ThinLTO/X86/devirt_check.ll          | 4 +++-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
index 2f171c3c981d40..aaea67aa8fcb64 100644
--- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
+++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
@@ -1225,8 +1225,9 @@ void DevirtModule::applySingleImplDevirt(VTableSlotInfo &SlotInfo,
       // perform a debug trap.
       if (DevirtCheckMode == WPDCheckMode::Trap) {
         auto *Cond = Builder.CreateICmpNE(CB.getCalledOperand(), Callee);
-        Instruction *ThenTerm =
-            SplitBlockAndInsertIfThen(Cond, &CB, /*Unreachable=*/false);
+        Instruction *ThenTerm = SplitBlockAndInsertIfThen(
+            Cond, &CB, /*Unreachable=*/false,
+            MDBuilder(M.getContext()).createUnlikelyBranchWeights());
         Builder.SetInsertPoint(ThenTerm);
         Function *TrapFn =
             Intrinsic::getOrInsertDeclaration(&M, Intrinsic::debugtrap);
diff --git a/llvm/test/ThinLTO/X86/devirt_check.ll b/llvm/test/ThinLTO/X86/devirt_check.ll
index 74f1dfd6ac012a..4a1a971177ae68 100644
--- a/llvm/test/ThinLTO/X86/devirt_check.ll
+++ b/llvm/test/ThinLTO/X86/devirt_check.ll
@@ -58,7 +58,7 @@ entry:
   ; Ensure !prof and !callees metadata for indirect call promotion removed.
   ; TRAP-NOT: prof
   ; TRAP-NOT: callees
-  ; TRAP:   br i1 %.not, label %1, label %0
+  ; TRAP:   br i1 %.not, label %1, label %0, !prof ![[UNLIKELY:[0-9]+]]
   ; TRAP: 0:
   ; TRAP:   tail call void @llvm.debugtrap()
   ; TRAP:   br label %1
@@ -89,6 +89,8 @@ entry:
 ; CHECK-LABEL:   ret i32
 ; CHECK-LABEL: }
 
+; TRAP: ![[UNLIKELY]] = !{!"branch_weights", i32 1, i32 1048575}
+
 declare i1 @llvm.type.test(i8*, metadata)
 declare void @llvm.assume(i1)
 

>From 82aeb06850c701d62161ba24617bd663eea285f6 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Thu, 23 Jan 2025 00:30:46 -0800
Subject: [PATCH 2/2] fix test failure

---
 llvm/test/ThinLTO/X86/devirt_check.ll | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/test/ThinLTO/X86/devirt_check.ll b/llvm/test/ThinLTO/X86/devirt_check.ll
index 4a1a971177ae68..4a9a7a4547fd6c 100644
--- a/llvm/test/ThinLTO/X86/devirt_check.ll
+++ b/llvm/test/ThinLTO/X86/devirt_check.ll
@@ -58,7 +58,7 @@ entry:
   ; Ensure !prof and !callees metadata for indirect call promotion removed.
   ; TRAP-NOT: prof
   ; TRAP-NOT: callees
-  ; TRAP:   br i1 %.not, label %1, label %0, !prof ![[UNLIKELY:[0-9]+]]
+  ; TRAP:   br i1 %.not, label %1, label %0, !prof ![[PROF:[0-9]+]]
   ; TRAP: 0:
   ; TRAP:   tail call void @llvm.debugtrap()
   ; TRAP:   br label %1
@@ -89,7 +89,7 @@ entry:
 ; CHECK-LABEL:   ret i32
 ; CHECK-LABEL: }
 
-; TRAP: ![[UNLIKELY]] = !{!"branch_weights", i32 1, i32 1048575}
+; TRAP: ![[PROF]] = !{!"branch_weights", i32 1048575, i32 1}
 
 declare i1 @llvm.type.test(i8*, metadata)
 declare void @llvm.assume(i1)



More information about the llvm-commits mailing list