diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 6009558efca06a..299a143f30fe21 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -4351,10 +4351,11 @@ static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI, SmallVector PredWeights; if (!PBI->getMetadata(LLVMContext::MD_unpredictable) && extractBranchWeights(*PBI, PredWeights) && - (PredWeights[0] + PredWeights[1]) != 0) { + (static_cast(PredWeights[0]) + PredWeights[1]) != 0) { BranchProbability CommonDestProb = BranchProbability::getBranchProbability( - PredWeights[PBIOp], PredWeights[0] + PredWeights[1]); + PredWeights[PBIOp], + static_cast(PredWeights[0]) + PredWeights[1]); BranchProbability Likely = TTI.getPredictableBranchThreshold(); if (CommonDestProb >= Likely) diff --git a/llvm/test/Transforms/SimplifyCFG/branch-cond-dont-merge.ll b/llvm/test/Transforms/SimplifyCFG/branch-cond-dont-merge.ll index 5c21f163826ee2..0f540007b242e2 100644 --- a/llvm/test/Transforms/SimplifyCFG/branch-cond-dont-merge.ll +++ b/llvm/test/Transforms/SimplifyCFG/branch-cond-dont-merge.ll @@ -79,6 +79,26 @@ exit: ret void } +define void @uint32_overflow_test(i1 %arg, i1 %arg1) { +; CHECK-LABEL: @uint32_overflow_test( +; CHECK-NEXT: bb: +; CHECK-NEXT: [[BRMERGE:%.*]] = select i1 [[ARG:%.*]], i1 true, i1 [[ARG1:%.*]] +; CHECK-NEXT: ret void +; +bb: + br i1 %arg, label %bb4, label %bb2, !prof !3 + +bb2: + br i1 %arg1, label %bb4, label %bb3 + +bb3: + br label %bb4 + +bb4: + ret void +} + !0 = !{!"branch_weights", i32 1, i32 1000} !1 = !{!"branch_weights", i32 1000, i32 1} !2 = !{!"branch_weights", i32 3, i32 2} +!3 = !{!"branch_weights", i32 -258677585, i32 -1212131848}