diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp index e88992693008..30e935ea663f 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 74f1dfd6ac01..4a9a7a4547fd 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 ![[PROF:[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: ![[PROF]] = !{!"branch_weights", i32 1048575, i32 1} + declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1)