@@ -3005,13 +3005,11 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI, DomTreeUpdater *DTU,
3005
3005
PBI->setCondition (NewCond);
3006
3006
3007
3007
uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
3008
- bool HasWeights =
3009
- extractPredSuccWeights (PBI, BI, PredTrueWeight, PredFalseWeight,
3010
- SuccTrueWeight, SuccFalseWeight);
3011
- SmallVector<uint64_t , 8 > NewWeights;
3008
+ if (extractPredSuccWeights (PBI, BI, PredTrueWeight, PredFalseWeight,
3009
+ SuccTrueWeight, SuccFalseWeight)) {
3010
+ SmallVector<uint64_t , 8 > NewWeights;
3012
3011
3013
- if (PBI->getSuccessor (0 ) == BB) {
3014
- if (HasWeights) {
3012
+ if (PBI->getSuccessor (0 ) == BB) {
3015
3013
// PBI: br i1 %x, BB, FalseDest
3016
3014
// BI: br i1 %y, UniqueSucc, FalseDest
3017
3015
// TrueWeight is TrueWeight for PBI * TrueWeight for BI.
@@ -3023,11 +3021,7 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI, DomTreeUpdater *DTU,
3023
3021
NewWeights.push_back (PredFalseWeight *
3024
3022
(SuccFalseWeight + SuccTrueWeight) +
3025
3023
PredTrueWeight * SuccFalseWeight);
3026
- }
3027
- PBI->setSuccessor (0 , UniqueSucc);
3028
- }
3029
- if (PBI->getSuccessor (1 ) == BB) {
3030
- if (HasWeights) {
3024
+ } else {
3031
3025
// PBI: br i1 %x, TrueDest, BB
3032
3026
// BI: br i1 %y, TrueDest, UniqueSucc
3033
3027
// TrueWeight is TrueWeight for PBI * TotalWeight for BI +
@@ -3038,17 +3032,20 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI, DomTreeUpdater *DTU,
3038
3032
// FalseWeight is FalseWeight for PBI * FalseWeight for BI.
3039
3033
NewWeights.push_back (PredFalseWeight * SuccFalseWeight);
3040
3034
}
3041
- PBI->setSuccessor (1 , UniqueSucc);
3042
- }
3043
- if (NewWeights.size () == 2 ) {
3035
+
3044
3036
// Halve the weights if any of them cannot fit in an uint32_t
3045
3037
FitWeights (NewWeights);
3046
3038
3047
3039
SmallVector<uint32_t , 8 > MDWeights (NewWeights.begin (), NewWeights.end ());
3048
3040
setBranchWeights (PBI, MDWeights[0 ], MDWeights[1 ]);
3041
+
3042
+ // TODO: If BB is reachable from all paths through PredBlock, then we
3043
+ // could replace PBI's branch probabilities with BI's.
3049
3044
} else
3050
3045
PBI->setMetadata (LLVMContext::MD_prof, nullptr );
3051
3046
3047
+ PBI->setSuccessor (PBI->getSuccessor (0 ) != BB, UniqueSucc);
3048
+
3052
3049
if (DTU)
3053
3050
DTU->applyUpdates ({{DominatorTree::Insert, PredBlock, UniqueSucc},
3054
3051
{DominatorTree::Delete, PredBlock, BB}});
@@ -3058,9 +3055,6 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI, DomTreeUpdater *DTU,
3058
3055
if (MDNode *LoopMD = BI->getMetadata (LLVMContext::MD_loop))
3059
3056
PBI->setMetadata (LLVMContext::MD_loop, LoopMD);
3060
3057
3061
- // TODO: If BB is reachable from all paths through PredBlock, then we
3062
- // could replace PBI's branch probabilities with BI's.
3063
-
3064
3058
// Copy any debug value intrinsics into the end of PredBlock.
3065
3059
for (Instruction &I : *BB) {
3066
3060
if (isa<DbgInfoIntrinsic>(I)) {
0 commit comments