mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01: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. llvm-svn: 106243
This commit is contained in:
parent
40c17ca0db
commit
bd7194d21c
@ -286,7 +286,7 @@ protected:
|
||||
/// FastEmitBranch - Emit an unconditional branch to the given block,
|
||||
/// unless it is the immediate (fall-through) successor, and update
|
||||
/// the CFG.
|
||||
void FastEmitBranch(MachineBasicBlock *MBB);
|
||||
void FastEmitBranch(MachineBasicBlock *MBB, DebugLoc DL);
|
||||
|
||||
unsigned UpdateValueMap(const Value* I, unsigned Reg);
|
||||
|
||||
|
@ -315,8 +315,9 @@ public:
|
||||
/// branch to analyze. At least this much must be implemented, else tail
|
||||
/// merging needs to be disabled.
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
assert(0 && "Target didn't implement TargetInstrInfo::InsertBranch!");
|
||||
return 0;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -347,11 +347,9 @@ unsigned ARMBaseInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
|
||||
unsigned
|
||||
ARMBaseInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc argument
|
||||
DebugLoc dl;
|
||||
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
ARMFunctionInfo *AFI = MBB.getParent()->getInfo<ARMFunctionInfo>();
|
||||
int BOpc = !AFI->isThumbFunction()
|
||||
? ARM::B : (AFI->isThumb2Function() ? ARM::t2B : ARM::tB);
|
||||
@ -365,17 +363,17 @@ ARMBaseInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
|
||||
if (FBB == 0) {
|
||||
if (Cond.empty()) // Unconditional branch?
|
||||
BuildMI(&MBB, dl, get(BOpc)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(BOpc)).addMBB(TBB);
|
||||
else
|
||||
BuildMI(&MBB, dl, get(BccOpc)).addMBB(TBB)
|
||||
BuildMI(&MBB, DL, get(BccOpc)).addMBB(TBB)
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg());
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Two-way conditional branch.
|
||||
BuildMI(&MBB, dl, get(BccOpc)).addMBB(TBB)
|
||||
BuildMI(&MBB, DL, get(BccOpc)).addMBB(TBB)
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg());
|
||||
BuildMI(&MBB, dl, get(BOpc)).addMBB(FBB);
|
||||
BuildMI(&MBB, DL, get(BOpc)).addMBB(FBB);
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
@ -225,7 +225,8 @@ public:
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
|
||||
virtual
|
||||
bool ReverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
|
@ -110,9 +110,8 @@ static bool isAlphaIntCondCode(unsigned Opcode) {
|
||||
unsigned AlphaInstrInfo::InsertBranch(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc argument
|
||||
DebugLoc dl;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 2 || Cond.size() == 0) &&
|
||||
"Alpha branch conditions have two components!");
|
||||
@ -120,25 +119,25 @@ unsigned AlphaInstrInfo::InsertBranch(MachineBasicBlock &MBB,
|
||||
// One-way branch.
|
||||
if (FBB == 0) {
|
||||
if (Cond.empty()) // Unconditional branch
|
||||
BuildMI(&MBB, dl, get(Alpha::BR)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(Alpha::BR)).addMBB(TBB);
|
||||
else // Conditional branch
|
||||
if (isAlphaIntCondCode(Cond[0].getImm()))
|
||||
BuildMI(&MBB, dl, get(Alpha::COND_BRANCH_I))
|
||||
BuildMI(&MBB, DL, get(Alpha::COND_BRANCH_I))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
else
|
||||
BuildMI(&MBB, dl, get(Alpha::COND_BRANCH_F))
|
||||
BuildMI(&MBB, DL, get(Alpha::COND_BRANCH_F))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Two-way Conditional Branch.
|
||||
if (isAlphaIntCondCode(Cond[0].getImm()))
|
||||
BuildMI(&MBB, dl, get(Alpha::COND_BRANCH_I))
|
||||
BuildMI(&MBB, DL, get(Alpha::COND_BRANCH_I))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
else
|
||||
BuildMI(&MBB, dl, get(Alpha::COND_BRANCH_F))
|
||||
BuildMI(&MBB, DL, get(Alpha::COND_BRANCH_F))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
BuildMI(&MBB, dl, get(Alpha::BR)).addMBB(FBB);
|
||||
BuildMI(&MBB, DL, get(Alpha::BR)).addMBB(FBB);
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
@ -42,8 +42,9 @@ public:
|
||||
int &FrameIndex) const;
|
||||
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
virtual bool copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
unsigned DestReg, unsigned SrcReg,
|
||||
|
@ -104,10 +104,8 @@ unsigned BlackfinInstrInfo::
|
||||
InsertBranch(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc operand
|
||||
DebugLoc DL;
|
||||
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 1 || Cond.size() == 0) &&
|
||||
|
@ -44,7 +44,8 @@ namespace llvm {
|
||||
InsertBranch(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
|
||||
virtual bool copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
|
@ -554,9 +554,8 @@ SPUInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
unsigned
|
||||
SPUInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc argument
|
||||
DebugLoc dl;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 2 || Cond.size() == 0) &&
|
||||
@ -566,14 +565,14 @@ SPUInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
if (FBB == 0) {
|
||||
if (Cond.empty()) {
|
||||
// Unconditional branch
|
||||
MachineInstrBuilder MIB = BuildMI(&MBB, dl, get(SPU::BR));
|
||||
MachineInstrBuilder MIB = BuildMI(&MBB, DL, get(SPU::BR));
|
||||
MIB.addMBB(TBB);
|
||||
|
||||
DEBUG(errs() << "Inserted one-way uncond branch: ");
|
||||
DEBUG((*MIB).dump());
|
||||
} else {
|
||||
// Conditional branch
|
||||
MachineInstrBuilder MIB = BuildMI(&MBB, dl, get(Cond[0].getImm()));
|
||||
MachineInstrBuilder MIB = BuildMI(&MBB, DL, get(Cond[0].getImm()));
|
||||
MIB.addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
|
||||
DEBUG(errs() << "Inserted one-way cond branch: ");
|
||||
@ -581,8 +580,8 @@ SPUInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
}
|
||||
return 1;
|
||||
} else {
|
||||
MachineInstrBuilder MIB = BuildMI(&MBB, dl, get(Cond[0].getImm()));
|
||||
MachineInstrBuilder MIB2 = BuildMI(&MBB, dl, get(SPU::BR));
|
||||
MachineInstrBuilder MIB = BuildMI(&MBB, DL, get(Cond[0].getImm()));
|
||||
MachineInstrBuilder MIB2 = BuildMI(&MBB, DL, get(SPU::BR));
|
||||
|
||||
// Two-way Conditional Branch.
|
||||
MIB.addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
|
@ -94,8 +94,9 @@ namespace llvm {
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -185,10 +185,11 @@ foldMemoryOperandImpl(MachineFunction &MF,
|
||||
unsigned MBlazeInstrInfo::
|
||||
InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Can only insert uncond branches so far.
|
||||
assert(Cond.empty() && !FBB && TBB && "Can only handle uncond branches!");
|
||||
BuildMI(&MBB, DebugLoc(), get(MBlaze::BRI)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(MBlaze::BRI)).addMBB(TBB);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -198,7 +198,8 @@ public:
|
||||
/// Branch Analysis
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
virtual bool copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
unsigned DestReg, unsigned SrcReg,
|
||||
|
@ -330,10 +330,8 @@ bool MSP430InstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,
|
||||
unsigned
|
||||
MSP430InstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc operand
|
||||
DebugLoc DL;
|
||||
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 1 || Cond.size() == 0) &&
|
||||
|
@ -93,7 +93,8 @@ public:
|
||||
unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
|
||||
};
|
||||
|
||||
|
@ -520,9 +520,8 @@ bool MipsInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,
|
||||
unsigned MipsInstrInfo::
|
||||
InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc argument
|
||||
DebugLoc dl;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 3 || Cond.size() == 2 || Cond.size() == 0) &&
|
||||
@ -531,18 +530,18 @@ InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
if (FBB == 0) { // One way branch.
|
||||
if (Cond.empty()) {
|
||||
// Unconditional branch?
|
||||
BuildMI(&MBB, dl, get(Mips::J)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(Mips::J)).addMBB(TBB);
|
||||
} else {
|
||||
// Conditional branch.
|
||||
unsigned Opc = GetCondBranchFromCond((Mips::CondCode)Cond[0].getImm());
|
||||
const TargetInstrDesc &TID = get(Opc);
|
||||
|
||||
if (TID.getNumOperands() == 3)
|
||||
BuildMI(&MBB, dl, TID).addReg(Cond[1].getReg())
|
||||
BuildMI(&MBB, DL, TID).addReg(Cond[1].getReg())
|
||||
.addReg(Cond[2].getReg())
|
||||
.addMBB(TBB);
|
||||
else
|
||||
BuildMI(&MBB, dl, TID).addReg(Cond[1].getReg())
|
||||
BuildMI(&MBB, DL, TID).addReg(Cond[1].getReg())
|
||||
.addMBB(TBB);
|
||||
|
||||
}
|
||||
@ -554,12 +553,12 @@ InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
const TargetInstrDesc &TID = get(Opc);
|
||||
|
||||
if (TID.getNumOperands() == 3)
|
||||
BuildMI(&MBB, dl, TID).addReg(Cond[1].getReg()).addReg(Cond[2].getReg())
|
||||
BuildMI(&MBB, DL, TID).addReg(Cond[1].getReg()).addReg(Cond[2].getReg())
|
||||
.addMBB(TBB);
|
||||
else
|
||||
BuildMI(&MBB, dl, TID).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, TID).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
|
||||
BuildMI(&MBB, dl, get(Mips::J)).addMBB(FBB);
|
||||
BuildMI(&MBB, DL, get(Mips::J)).addMBB(FBB);
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
@ -204,7 +204,8 @@ public:
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
virtual bool copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
unsigned DestReg, unsigned SrcReg,
|
||||
|
@ -196,15 +196,15 @@ bool PIC16InstrInfo::isMoveInstr(const MachineInstr &MI,
|
||||
unsigned PIC16InstrInfo::
|
||||
InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
|
||||
if (FBB == 0) { // One way branch.
|
||||
if (Cond.empty()) {
|
||||
// Unconditional branch?
|
||||
DebugLoc dl;
|
||||
BuildMI(&MBB, dl, get(PIC16::br_uncond)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(PIC16::br_uncond)).addMBB(TBB);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -70,7 +70,8 @@ public:
|
||||
virtual
|
||||
unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
virtual bool AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
|
||||
MachineBasicBlock *&FBB,
|
||||
SmallVectorImpl<MachineOperand> &Cond,
|
||||
|
@ -316,9 +316,8 @@ unsigned PPCInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
unsigned
|
||||
PPCInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc argument
|
||||
DebugLoc dl;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 2 || Cond.size() == 0) &&
|
||||
@ -327,17 +326,17 @@ PPCInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
// One-way branch.
|
||||
if (FBB == 0) {
|
||||
if (Cond.empty()) // Unconditional branch
|
||||
BuildMI(&MBB, dl, get(PPC::B)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(PPC::B)).addMBB(TBB);
|
||||
else // Conditional branch
|
||||
BuildMI(&MBB, dl, get(PPC::BCC))
|
||||
BuildMI(&MBB, DL, get(PPC::BCC))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Two-way Conditional Branch.
|
||||
BuildMI(&MBB, dl, get(PPC::BCC))
|
||||
BuildMI(&MBB, DL, get(PPC::BCC))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
BuildMI(&MBB, dl, get(PPC::B)).addMBB(FBB);
|
||||
BuildMI(&MBB, DL, get(PPC::B)).addMBB(FBB);
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,8 @@ public:
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
virtual bool copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
unsigned DestReg, unsigned SrcReg,
|
||||
|
@ -109,12 +109,11 @@ unsigned SparcInstrInfo::isStoreToStackSlot(const MachineInstr *MI,
|
||||
unsigned
|
||||
SparcInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond)const{
|
||||
// FIXME this should probably take a DebugLoc argument
|
||||
DebugLoc dl;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL)const{
|
||||
// Can only insert uncond branches so far.
|
||||
assert(Cond.empty() && !FBB && TBB && "Can only handle uncond branches!");
|
||||
BuildMI(&MBB, dl, get(SP::BA)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(SP::BA)).addMBB(TBB);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,8 @@ public:
|
||||
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
|
||||
virtual bool copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
|
@ -521,9 +521,8 @@ unsigned SystemZInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
unsigned
|
||||
SystemZInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME: this should probably have a DebugLoc operand
|
||||
DebugLoc DL;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 1 || Cond.size() == 0) &&
|
||||
|
@ -102,7 +102,8 @@ public:
|
||||
bool AllowModify) const;
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
|
||||
SystemZCC::CondCodes getOppositeCondition(SystemZCC::CondCodes CC) const;
|
||||
|
@ -891,7 +891,7 @@ bool X86FastISel::X86SelectBranch(const Instruction *I) {
|
||||
BuildMI(MBB, DL, TII.get(X86::JP_4)).addMBB(TrueMBB);
|
||||
}
|
||||
|
||||
FastEmitBranch(FalseMBB);
|
||||
FastEmitBranch(FalseMBB, DL);
|
||||
MBB->addSuccessor(TrueMBB);
|
||||
return true;
|
||||
}
|
||||
@ -946,7 +946,7 @@ bool X86FastISel::X86SelectBranch(const Instruction *I) {
|
||||
BuildMI(MBB, DL, TII.get(OpCode == X86::SETOr ?
|
||||
X86::JO_4 : X86::JB_4))
|
||||
.addMBB(TrueMBB);
|
||||
FastEmitBranch(FalseMBB);
|
||||
FastEmitBranch(FalseMBB, DL);
|
||||
MBB->addSuccessor(TrueMBB);
|
||||
return true;
|
||||
}
|
||||
@ -961,7 +961,7 @@ bool X86FastISel::X86SelectBranch(const Instruction *I) {
|
||||
|
||||
BuildMI(MBB, DL, TII.get(X86::TEST8rr)).addReg(OpReg).addReg(OpReg);
|
||||
BuildMI(MBB, DL, TII.get(X86::JNE_4)).addMBB(TrueMBB);
|
||||
FastEmitBranch(FalseMBB);
|
||||
FastEmitBranch(FalseMBB, DL);
|
||||
MBB->addSuccessor(TrueMBB);
|
||||
return true;
|
||||
}
|
||||
|
@ -1839,9 +1839,8 @@ unsigned X86InstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
unsigned
|
||||
X86InstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc operand
|
||||
DebugLoc dl;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const {
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 1 || Cond.size() == 0) &&
|
||||
@ -1850,7 +1849,7 @@ X86InstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
if (Cond.empty()) {
|
||||
// Unconditional branch?
|
||||
assert(!FBB && "Unconditional branch with multiple successors!");
|
||||
BuildMI(&MBB, dl, get(X86::JMP_4)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(X86::JMP_4)).addMBB(TBB);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -1860,27 +1859,27 @@ X86InstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
switch (CC) {
|
||||
case X86::COND_NP_OR_E:
|
||||
// Synthesize NP_OR_E with two branches.
|
||||
BuildMI(&MBB, dl, get(X86::JNP_4)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(X86::JNP_4)).addMBB(TBB);
|
||||
++Count;
|
||||
BuildMI(&MBB, dl, get(X86::JE_4)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(X86::JE_4)).addMBB(TBB);
|
||||
++Count;
|
||||
break;
|
||||
case X86::COND_NE_OR_P:
|
||||
// Synthesize NE_OR_P with two branches.
|
||||
BuildMI(&MBB, dl, get(X86::JNE_4)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(X86::JNE_4)).addMBB(TBB);
|
||||
++Count;
|
||||
BuildMI(&MBB, dl, get(X86::JP_4)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(X86::JP_4)).addMBB(TBB);
|
||||
++Count;
|
||||
break;
|
||||
default: {
|
||||
unsigned Opc = GetCondBranchFromCond(CC);
|
||||
BuildMI(&MBB, dl, get(Opc)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(Opc)).addMBB(TBB);
|
||||
++Count;
|
||||
}
|
||||
}
|
||||
if (FBB) {
|
||||
// Two-way Conditional branch. Insert the second branch.
|
||||
BuildMI(&MBB, dl, get(X86::JMP_4)).addMBB(FBB);
|
||||
BuildMI(&MBB, DL, get(X86::JMP_4)).addMBB(FBB);
|
||||
++Count;
|
||||
}
|
||||
return Count;
|
||||
|
@ -612,7 +612,8 @@ public:
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
virtual bool copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
unsigned DestReg, unsigned SrcReg,
|
||||
|
@ -299,9 +299,8 @@ XCoreInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
|
||||
unsigned
|
||||
XCoreInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond)const{
|
||||
// FIXME there should probably be a DebugLoc argument here
|
||||
DebugLoc dl;
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL)const{
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
assert((Cond.size() == 2 || Cond.size() == 0) &&
|
||||
@ -310,11 +309,11 @@ XCoreInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
if (FBB == 0) { // One way branch.
|
||||
if (Cond.empty()) {
|
||||
// Unconditional branch
|
||||
BuildMI(&MBB, dl, get(XCore::BRFU_lu6)).addMBB(TBB);
|
||||
BuildMI(&MBB, DL, get(XCore::BRFU_lu6)).addMBB(TBB);
|
||||
} else {
|
||||
// Conditional branch.
|
||||
unsigned Opc = GetCondBranchFromCond((XCore::CondCode)Cond[0].getImm());
|
||||
BuildMI(&MBB, dl, get(Opc)).addReg(Cond[1].getReg())
|
||||
BuildMI(&MBB, DL, get(Opc)).addReg(Cond[1].getReg())
|
||||
.addMBB(TBB);
|
||||
}
|
||||
return 1;
|
||||
@ -323,9 +322,9 @@ XCoreInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
// Two-way Conditional branch.
|
||||
assert(Cond.size() == 2 && "Unexpected number of components!");
|
||||
unsigned Opc = GetCondBranchFromCond((XCore::CondCode)Cond[0].getImm());
|
||||
BuildMI(&MBB, dl, get(Opc)).addReg(Cond[1].getReg())
|
||||
BuildMI(&MBB, DL, get(Opc)).addReg(Cond[1].getReg())
|
||||
.addMBB(TBB);
|
||||
BuildMI(&MBB, dl, get(XCore::BRFU_lu6)).addMBB(FBB);
|
||||
BuildMI(&MBB, DL, get(XCore::BRFU_lu6)).addMBB(FBB);
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
@ -58,8 +58,9 @@ public:
|
||||
bool AllowModify) const;
|
||||
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond,
|
||||
DebugLoc DL) const;
|
||||
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user