From aebae34d38ce13e6ac7435b23f8330fb4c2f67d9 Mon Sep 17 00:00:00 2001 From: mingmingl 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 2f171c3c981d4..aaea67aa8fcb6 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 74f1dfd6ac012..4a1a971177ae6 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 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 4a1a971177ae6..4a9a7a4547fd6 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)