mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Add a DebugLoc parameter to TargetInstrInfo::InsertBranch(). This
addresses a longstanding deficiency noted in many FIXMEs scattered across all the targets. This effectively moves the problem up one level, replacing eleven FIXMEs in the targets with eight FIXMEs in CodeGen, plus one path through FastISel where we actually supply a DebugLoc, fixing Radar 7421831. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106243 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -373,7 +373,8 @@ void BranchFolder::ReplaceTailWithBranchTo(MachineBasicBlock::iterator OldInst,
|
||||
|
||||
// If OldBB isn't immediately before OldBB, insert a branch to it.
|
||||
if (++MachineFunction::iterator(OldBB) != MachineFunction::iterator(NewDest))
|
||||
TII->InsertBranch(*OldBB, NewDest, 0, SmallVector<MachineOperand, 0>());
|
||||
TII->InsertBranch(*OldBB, NewDest, 0, SmallVector<MachineOperand, 0>(),
|
||||
OldInst->getDebugLoc());
|
||||
OldBB->addSuccessor(NewDest);
|
||||
++NumTailMerge;
|
||||
}
|
||||
@@ -443,18 +444,20 @@ static void FixTail(MachineBasicBlock *CurMBB, MachineBasicBlock *SuccBB,
|
||||
MachineFunction::iterator I = llvm::next(MachineFunction::iterator(CurMBB));
|
||||
MachineBasicBlock *TBB = 0, *FBB = 0;
|
||||
SmallVector<MachineOperand, 4> Cond;
|
||||
DebugLoc dl; // FIXME: this is nowhere
|
||||
if (I != MF->end() &&
|
||||
!TII->AnalyzeBranch(*CurMBB, TBB, FBB, Cond, true)) {
|
||||
MachineBasicBlock *NextBB = I;
|
||||
if (TBB == NextBB && !Cond.empty() && !FBB) {
|
||||
if (!TII->ReverseBranchCondition(Cond)) {
|
||||
TII->RemoveBranch(*CurMBB);
|
||||
TII->InsertBranch(*CurMBB, SuccBB, NULL, Cond);
|
||||
TII->InsertBranch(*CurMBB, SuccBB, NULL, Cond, dl);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
TII->InsertBranch(*CurMBB, SuccBB, NULL, SmallVector<MachineOperand, 0>());
|
||||
TII->InsertBranch(*CurMBB, SuccBB, NULL,
|
||||
SmallVector<MachineOperand, 0>(), dl);
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -874,10 +877,11 @@ bool BranchFolder::TailMergeBlocks(MachineFunction &MF) {
|
||||
}
|
||||
// Remove the unconditional branch at the end, if any.
|
||||
if (TBB && (Cond.empty() || FBB)) {
|
||||
DebugLoc dl; // FIXME: this is nowhere
|
||||
TII->RemoveBranch(*PBB);
|
||||
if (!Cond.empty())
|
||||
// reinsert conditional branch only, for now
|
||||
TII->InsertBranch(*PBB, (TBB == IBB) ? FBB : TBB, 0, NewCond);
|
||||
TII->InsertBranch(*PBB, (TBB == IBB) ? FBB : TBB, 0, NewCond, dl);
|
||||
}
|
||||
MergePotentials.push_back(MergePotentialsElt(HashEndOfMBB(PBB), *P));
|
||||
}
|
||||
@@ -976,6 +980,7 @@ static bool IsBetterFallthrough(MachineBasicBlock *MBB1,
|
||||
bool BranchFolder::OptimizeBlock(MachineBasicBlock *MBB) {
|
||||
bool MadeChange = false;
|
||||
MachineFunction &MF = *MBB->getParent();
|
||||
DebugLoc dl; // FIXME: this is nowhere
|
||||
ReoptimizeBlock:
|
||||
|
||||
MachineFunction::iterator FallThrough = MBB;
|
||||
@@ -1027,7 +1032,7 @@ ReoptimizeBlock:
|
||||
TII->RemoveBranch(PrevBB);
|
||||
PriorCond.clear();
|
||||
if (PriorTBB != MBB)
|
||||
TII->InsertBranch(PrevBB, PriorTBB, 0, PriorCond);
|
||||
TII->InsertBranch(PrevBB, PriorTBB, 0, PriorCond, dl);
|
||||
MadeChange = true;
|
||||
++NumBranchOpts;
|
||||
goto ReoptimizeBlock;
|
||||
@@ -1066,7 +1071,7 @@ ReoptimizeBlock:
|
||||
// the condition is false, remove the uncond second branch.
|
||||
if (PriorFBB == MBB) {
|
||||
TII->RemoveBranch(PrevBB);
|
||||
TII->InsertBranch(PrevBB, PriorTBB, 0, PriorCond);
|
||||
TII->InsertBranch(PrevBB, PriorTBB, 0, PriorCond, dl);
|
||||
MadeChange = true;
|
||||
++NumBranchOpts;
|
||||
goto ReoptimizeBlock;
|
||||
@@ -1079,7 +1084,7 @@ ReoptimizeBlock:
|
||||
SmallVector<MachineOperand, 4> NewPriorCond(PriorCond);
|
||||
if (!TII->ReverseBranchCondition(NewPriorCond)) {
|
||||
TII->RemoveBranch(PrevBB);
|
||||
TII->InsertBranch(PrevBB, PriorFBB, 0, NewPriorCond);
|
||||
TII->InsertBranch(PrevBB, PriorFBB, 0, NewPriorCond, dl);
|
||||
MadeChange = true;
|
||||
++NumBranchOpts;
|
||||
goto ReoptimizeBlock;
|
||||
@@ -1116,7 +1121,7 @@ ReoptimizeBlock:
|
||||
<< "To make fallthrough to: " << *PriorTBB << "\n");
|
||||
|
||||
TII->RemoveBranch(PrevBB);
|
||||
TII->InsertBranch(PrevBB, MBB, 0, NewPriorCond);
|
||||
TII->InsertBranch(PrevBB, MBB, 0, NewPriorCond, dl);
|
||||
|
||||
// Move this block to the end of the function.
|
||||
MBB->moveAfter(--MF.end());
|
||||
@@ -1145,7 +1150,7 @@ ReoptimizeBlock:
|
||||
SmallVector<MachineOperand, 4> NewCond(CurCond);
|
||||
if (!TII->ReverseBranchCondition(NewCond)) {
|
||||
TII->RemoveBranch(*MBB);
|
||||
TII->InsertBranch(*MBB, CurFBB, CurTBB, NewCond);
|
||||
TII->InsertBranch(*MBB, CurFBB, CurTBB, NewCond, dl);
|
||||
MadeChange = true;
|
||||
++NumBranchOpts;
|
||||
goto ReoptimizeBlock;
|
||||
@@ -1200,7 +1205,7 @@ ReoptimizeBlock:
|
||||
PriorFBB = MBB;
|
||||
}
|
||||
TII->RemoveBranch(PrevBB);
|
||||
TII->InsertBranch(PrevBB, PriorTBB, PriorFBB, PriorCond);
|
||||
TII->InsertBranch(PrevBB, PriorTBB, PriorFBB, PriorCond, dl);
|
||||
}
|
||||
|
||||
// Iterate through all the predecessors, revectoring each in-turn.
|
||||
@@ -1226,7 +1231,7 @@ ReoptimizeBlock:
|
||||
if (!NewCurUnAnalyzable && NewCurTBB && NewCurTBB == NewCurFBB) {
|
||||
TII->RemoveBranch(*PMBB);
|
||||
NewCurCond.clear();
|
||||
TII->InsertBranch(*PMBB, NewCurTBB, 0, NewCurCond);
|
||||
TII->InsertBranch(*PMBB, NewCurTBB, 0, NewCurCond, dl);
|
||||
MadeChange = true;
|
||||
++NumBranchOpts;
|
||||
PMBB->CorrectExtraCFGEdges(NewCurTBB, 0, false);
|
||||
@@ -1246,7 +1251,7 @@ ReoptimizeBlock:
|
||||
}
|
||||
|
||||
// Add the branch back if the block is more than just an uncond branch.
|
||||
TII->InsertBranch(*MBB, CurTBB, 0, CurCond);
|
||||
TII->InsertBranch(*MBB, CurTBB, 0, CurCond, dl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1286,7 +1291,7 @@ ReoptimizeBlock:
|
||||
if (CurFallsThru) {
|
||||
MachineBasicBlock *NextBB = llvm::next(MachineFunction::iterator(MBB));
|
||||
CurCond.clear();
|
||||
TII->InsertBranch(*MBB, NextBB, 0, CurCond);
|
||||
TII->InsertBranch(*MBB, NextBB, 0, CurCond, dl);
|
||||
}
|
||||
MBB->moveAfter(PredBB);
|
||||
MadeChange = true;
|
||||
|
||||
@@ -395,9 +395,10 @@ static MachineBasicBlock *findFalseBlock(MachineBasicBlock *BB,
|
||||
/// ReverseBranchCondition - Reverse the condition of the end of the block
|
||||
/// branch. Swap block's 'true' and 'false' successors.
|
||||
bool IfConverter::ReverseBranchCondition(BBInfo &BBI) {
|
||||
DebugLoc dl; // FIXME: this is nowhere
|
||||
if (!TII->ReverseBranchCondition(BBI.BrCond)) {
|
||||
TII->RemoveBranch(*BBI.BB);
|
||||
TII->InsertBranch(*BBI.BB, BBI.FalseBB, BBI.TrueBB, BBI.BrCond);
|
||||
TII->InsertBranch(*BBI.BB, BBI.FalseBB, BBI.TrueBB, BBI.BrCond, dl);
|
||||
std::swap(BBI.TrueBB, BBI.FalseBB);
|
||||
return true;
|
||||
}
|
||||
@@ -862,8 +863,9 @@ void IfConverter::InvalidatePreds(MachineBasicBlock *BB) {
|
||||
///
|
||||
static void InsertUncondBranch(MachineBasicBlock *BB, MachineBasicBlock *ToBB,
|
||||
const TargetInstrInfo *TII) {
|
||||
DebugLoc dl; // FIXME: this is nowhere
|
||||
SmallVector<MachineOperand, 0> NoCond;
|
||||
TII->InsertBranch(*BB, ToBB, NULL, NoCond);
|
||||
TII->InsertBranch(*BB, ToBB, NULL, NoCond, dl);
|
||||
}
|
||||
|
||||
/// RemoveExtraEdges - Remove true / false edges if either / both are no longer
|
||||
@@ -1014,6 +1016,7 @@ bool IfConverter::IfConvertTriangle(BBInfo &BBI, IfcvtKind Kind) {
|
||||
BBInfo &FalseBBI = BBAnalysis[BBI.FalseBB->getNumber()];
|
||||
BBInfo *CvtBBI = &TrueBBI;
|
||||
BBInfo *NextBBI = &FalseBBI;
|
||||
DebugLoc dl; // FIXME: this is nowhere
|
||||
|
||||
SmallVector<MachineOperand, 4> Cond(BBI.BrCond.begin(), BBI.BrCond.end());
|
||||
if (Kind == ICTriangleFalse || Kind == ICTriangleFRev)
|
||||
@@ -1078,7 +1081,7 @@ bool IfConverter::IfConvertTriangle(BBInfo &BBI, IfcvtKind Kind) {
|
||||
CvtBBI->BrCond.end());
|
||||
if (TII->ReverseBranchCondition(RevCond))
|
||||
assert(false && "Unable to reverse branch condition!");
|
||||
TII->InsertBranch(*BBI.BB, CvtBBI->FalseBB, NULL, RevCond);
|
||||
TII->InsertBranch(*BBI.BB, CvtBBI->FalseBB, NULL, RevCond, dl);
|
||||
BBI.BB->addSuccessor(CvtBBI->FalseBB);
|
||||
}
|
||||
|
||||
|
||||
@@ -245,6 +245,7 @@ void MachineBasicBlock::updateTerminator() {
|
||||
|
||||
MachineBasicBlock *TBB = 0, *FBB = 0;
|
||||
SmallVector<MachineOperand, 4> Cond;
|
||||
DebugLoc dl; // FIXME: this is nowhere
|
||||
bool B = TII->AnalyzeBranch(*this, TBB, FBB, Cond);
|
||||
(void) B;
|
||||
assert(!B && "UpdateTerminators requires analyzable predecessors!");
|
||||
@@ -259,7 +260,7 @@ void MachineBasicBlock::updateTerminator() {
|
||||
// its layout successor, insert a branch.
|
||||
TBB = *succ_begin();
|
||||
if (!isLayoutSuccessor(TBB))
|
||||
TII->InsertBranch(*this, TBB, 0, Cond);
|
||||
TII->InsertBranch(*this, TBB, 0, Cond, dl);
|
||||
}
|
||||
} else {
|
||||
if (FBB) {
|
||||
@@ -270,10 +271,10 @@ void MachineBasicBlock::updateTerminator() {
|
||||
if (TII->ReverseBranchCondition(Cond))
|
||||
return;
|
||||
TII->RemoveBranch(*this);
|
||||
TII->InsertBranch(*this, FBB, 0, Cond);
|
||||
TII->InsertBranch(*this, FBB, 0, Cond, dl);
|
||||
} else if (isLayoutSuccessor(FBB)) {
|
||||
TII->RemoveBranch(*this);
|
||||
TII->InsertBranch(*this, TBB, 0, Cond);
|
||||
TII->InsertBranch(*this, TBB, 0, Cond, dl);
|
||||
}
|
||||
} else {
|
||||
// The block has a fallthrough conditional branch.
|
||||
@@ -284,14 +285,14 @@ void MachineBasicBlock::updateTerminator() {
|
||||
if (TII->ReverseBranchCondition(Cond)) {
|
||||
// We can't reverse the condition, add an unconditional branch.
|
||||
Cond.clear();
|
||||
TII->InsertBranch(*this, MBBA, 0, Cond);
|
||||
TII->InsertBranch(*this, MBBA, 0, Cond, dl);
|
||||
return;
|
||||
}
|
||||
TII->RemoveBranch(*this);
|
||||
TII->InsertBranch(*this, MBBA, 0, Cond);
|
||||
TII->InsertBranch(*this, MBBA, 0, Cond, dl);
|
||||
} else if (!isLayoutSuccessor(MBBA)) {
|
||||
TII->RemoveBranch(*this);
|
||||
TII->InsertBranch(*this, TBB, MBBA, Cond);
|
||||
TII->InsertBranch(*this, TBB, MBBA, Cond, dl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,6 +402,7 @@ MachineBasicBlock *PHIElimination::SplitCriticalEdge(MachineBasicBlock *A,
|
||||
assert(A && B && "Missing MBB end point");
|
||||
|
||||
MachineFunction *MF = A->getParent();
|
||||
DebugLoc dl; // FIXME: this is nowhere
|
||||
|
||||
// We may need to update A's terminator, but we can't do that if AnalyzeBranch
|
||||
// fails. If A uses a jump table, we won't touch it.
|
||||
@@ -427,7 +428,7 @@ MachineBasicBlock *PHIElimination::SplitCriticalEdge(MachineBasicBlock *A,
|
||||
NMBB->addSuccessor(B);
|
||||
if (!NMBB->isLayoutSuccessor(B)) {
|
||||
Cond.clear();
|
||||
MF->getTarget().getInstrInfo()->InsertBranch(*NMBB, B, NULL, Cond);
|
||||
MF->getTarget().getInstrInfo()->InsertBranch(*NMBB, B, NULL, Cond, dl);
|
||||
}
|
||||
|
||||
// Fix PHI nodes in B so they refer to NMBB instead of A
|
||||
|
||||
@@ -655,12 +655,12 @@ FastISel::SelectInstruction(const Instruction *I) {
|
||||
/// unless it is the immediate (fall-through) successor, and update
|
||||
/// the CFG.
|
||||
void
|
||||
FastISel::FastEmitBranch(MachineBasicBlock *MSucc) {
|
||||
FastISel::FastEmitBranch(MachineBasicBlock *MSucc, DebugLoc DL) {
|
||||
if (MBB->isLayoutSuccessor(MSucc)) {
|
||||
// The unconditional fall-through case, which needs no instructions.
|
||||
} else {
|
||||
// The unconditional branch case.
|
||||
TII.InsertBranch(*MBB, MSucc, NULL, SmallVector<MachineOperand, 0>());
|
||||
TII.InsertBranch(*MBB, MSucc, NULL, SmallVector<MachineOperand, 0>(), DL);
|
||||
}
|
||||
MBB->addSuccessor(MSucc);
|
||||
}
|
||||
@@ -763,7 +763,7 @@ FastISel::SelectOperator(const User *I, unsigned Opcode) {
|
||||
if (BI->isUnconditional()) {
|
||||
const BasicBlock *LLVMSucc = BI->getSuccessor(0);
|
||||
MachineBasicBlock *MSucc = MBBMap[LLVMSucc];
|
||||
FastEmitBranch(MSucc);
|
||||
FastEmitBranch(MSucc, BI->getDebugLoc());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user