@@ -455,12 +455,14 @@ static unsigned EstimateRuntime(MachineBasicBlock::iterator I,
455
455
// with a conditional branch to the next block, optimize by reversing the
456
456
// test and conditionally branching to SuccMBB instead.
457
457
static void FixTail (MachineBasicBlock *CurMBB, MachineBasicBlock *SuccBB,
458
- const TargetInstrInfo *TII) {
458
+ const TargetInstrInfo *TII, const DebugLoc &BranchDL ) {
459
459
MachineFunction *MF = CurMBB->getParent ();
460
460
MachineFunction::iterator I = std::next (MachineFunction::iterator (CurMBB));
461
461
MachineBasicBlock *TBB = nullptr , *FBB = nullptr ;
462
462
SmallVector<MachineOperand, 4 > Cond;
463
463
DebugLoc dl = CurMBB->findBranchDebugLoc ();
464
+ if (!dl)
465
+ dl = BranchDL;
464
466
if (I != MF->end () && !TII->analyzeBranch (*CurMBB, TBB, FBB, Cond, true )) {
465
467
MachineBasicBlock *NextBB = &*I;
466
468
if (TBB == NextBB && !Cond.empty () && !FBB) {
@@ -686,15 +688,16 @@ unsigned BranchFolder::ComputeSameTails(unsigned CurHash,
686
688
687
689
void BranchFolder::RemoveBlocksWithHash (unsigned CurHash,
688
690
MachineBasicBlock *SuccBB,
689
- MachineBasicBlock *PredBB) {
691
+ MachineBasicBlock *PredBB,
692
+ const DebugLoc &BranchDL) {
690
693
MPIterator CurMPIter, B;
691
694
for (CurMPIter = std::prev (MergePotentials.end ()),
692
695
B = MergePotentials.begin ();
693
696
CurMPIter->getHash () == CurHash; --CurMPIter) {
694
697
// Put the unconditional branch back, if we need one.
695
698
MachineBasicBlock *CurMBB = CurMPIter->getBlock ();
696
699
if (SuccBB && CurMBB != PredBB)
697
- FixTail (CurMBB, SuccBB, TII);
700
+ FixTail (CurMBB, SuccBB, TII, BranchDL );
698
701
if (CurMPIter == B)
699
702
break ;
700
703
}
@@ -908,6 +911,7 @@ bool BranchFolder::TryTailMergeBlocks(MachineBasicBlock *SuccBB,
908
911
// Walk through equivalence sets looking for actual exact matches.
909
912
while (MergePotentials.size () > 1 ) {
910
913
unsigned CurHash = MergePotentials.back ().getHash ();
914
+ const DebugLoc &BranchDL = MergePotentials.back ().getBranchDebugLoc ();
911
915
912
916
// Build SameTails, identifying the set of blocks with this hash code
913
917
// and with the maximum number of instructions in common.
@@ -918,7 +922,7 @@ bool BranchFolder::TryTailMergeBlocks(MachineBasicBlock *SuccBB,
918
922
// If we didn't find any pair that has at least MinCommonTailLength
919
923
// instructions in common, remove all blocks with this hash code and retry.
920
924
if (SameTails.empty ()) {
921
- RemoveBlocksWithHash (CurHash, SuccBB, PredBB);
925
+ RemoveBlocksWithHash (CurHash, SuccBB, PredBB, BranchDL );
922
926
continue ;
923
927
}
924
928
@@ -965,7 +969,7 @@ bool BranchFolder::TryTailMergeBlocks(MachineBasicBlock *SuccBB,
965
969
// Split a block so that one does.
966
970
if (!CreateCommonTailOnlyBlock (PredBB, SuccBB,
967
971
maxCommonTailLength, commonTailIndex)) {
968
- RemoveBlocksWithHash (CurHash, SuccBB, PredBB);
972
+ RemoveBlocksWithHash (CurHash, SuccBB, PredBB, BranchDL );
969
973
continue ;
970
974
}
971
975
}
@@ -1013,7 +1017,8 @@ bool BranchFolder::TailMergeBlocks(MachineFunction &MF) {
1013
1017
if (MergePotentials.size () == TailMergeThreshold)
1014
1018
break ;
1015
1019
if (!TriedMerging.count (&MBB) && MBB.succ_empty ())
1016
- MergePotentials.push_back (MergePotentialsElt (HashEndOfMBB (MBB), &MBB));
1020
+ MergePotentials.push_back (MergePotentialsElt (HashEndOfMBB (MBB), &MBB,
1021
+ MBB.findBranchDebugLoc ()));
1017
1022
}
1018
1023
1019
1024
// If this is a large problem, avoid visiting the same basic blocks
@@ -1115,16 +1120,17 @@ bool BranchFolder::TailMergeBlocks(MachineFunction &MF) {
1115
1120
}
1116
1121
1117
1122
// Remove the unconditional branch at the end, if any.
1123
+ DebugLoc dl = PBB->findBranchDebugLoc ();
1118
1124
if (TBB && (Cond.empty () || FBB)) {
1119
- DebugLoc dl = PBB->findBranchDebugLoc ();
1120
1125
TII->removeBranch (*PBB);
1121
1126
if (!Cond.empty ())
1122
1127
// reinsert conditional branch only, for now
1123
1128
TII->insertBranch (*PBB, (TBB == IBB) ? FBB : TBB, nullptr ,
1124
1129
NewCond, dl);
1125
1130
}
1126
1131
1127
- MergePotentials.push_back (MergePotentialsElt (HashEndOfMBB (*PBB), PBB));
1132
+ MergePotentials.push_back (
1133
+ MergePotentialsElt (HashEndOfMBB (*PBB), PBB, dl));
1128
1134
}
1129
1135
}
1130
1136
@@ -1142,7 +1148,8 @@ bool BranchFolder::TailMergeBlocks(MachineFunction &MF) {
1142
1148
PredBB = &*std::prev (I); // this may have been changed in TryTailMergeBlocks
1143
1149
if (MergePotentials.size () == 1 &&
1144
1150
MergePotentials.begin ()->getBlock () != PredBB)
1145
- FixTail (MergePotentials.begin ()->getBlock (), IBB, TII);
1151
+ FixTail (MergePotentials.begin ()->getBlock (), IBB, TII,
1152
+ MergePotentials.begin ()->getBranchDebugLoc ());
1146
1153
}
1147
1154
1148
1155
return MadeChange;
0 commit comments