mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-03 13:31:05 +00:00
RemoveBranch() and InsertBranch() now returns number of instructions deleted / inserted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37192 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f48ae4630b
commit
b5cdaa257e
@ -350,20 +350,24 @@ public:
|
||||
}
|
||||
|
||||
/// RemoveBranch - Remove the branching code at the end of the specific MBB.
|
||||
/// this is only invoked in cases where AnalyzeBranch returns success.
|
||||
virtual void RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
/// this is only invoked in cases where AnalyzeBranch returns success. It
|
||||
/// returns the number of instructions that were removed.
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
assert(0 && "Target didn't implement TargetInstrInfo::RemoveBranch!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// InsertBranch - Insert a branch into the end of the specified
|
||||
/// MachineBasicBlock. This operands to this method are the same as those
|
||||
/// returned by AnalyzeBranch. This is invoked in cases where AnalyzeBranch
|
||||
/// returns success and when an unconditional branch (TBB is non-null, FBB is
|
||||
/// null, Cond is empty) needs to be inserted.
|
||||
virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
/// null, Cond is empty) needs to be inserted. It returns the number of
|
||||
/// instructions inserted.
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond) const {
|
||||
assert(0 && "Target didn't implement TargetInstrInfo::InsertBranch!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// BlockHasNoFallThrough - Return true if the specified block does not
|
||||
|
@ -99,7 +99,7 @@ static bool isAlphaIntCondCode(unsigned Opcode) {
|
||||
}
|
||||
}
|
||||
|
||||
void AlphaInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
unsigned AlphaInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond)const{
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
@ -117,7 +117,7 @@ void AlphaInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
else
|
||||
BuildMI(&MBB, get(Alpha::COND_BRANCH_F))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Two-way Conditional Branch.
|
||||
@ -128,6 +128,7 @@ void AlphaInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
BuildMI(&MBB, get(Alpha::COND_BRANCH_F))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
BuildMI(&MBB, get(Alpha::BR)).addMBB(FBB);
|
||||
return 2;
|
||||
}
|
||||
|
||||
static unsigned AlphaRevCondCode(unsigned Opcode) {
|
||||
@ -203,28 +204,29 @@ bool AlphaInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TB
|
||||
return true;
|
||||
}
|
||||
|
||||
void AlphaInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
unsigned AlphaInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
MachineBasicBlock::iterator I = MBB.end();
|
||||
if (I == MBB.begin()) return;
|
||||
if (I == MBB.begin()) return 0;
|
||||
--I;
|
||||
if (I->getOpcode() != Alpha::BR &&
|
||||
I->getOpcode() != Alpha::COND_BRANCH_I &&
|
||||
I->getOpcode() != Alpha::COND_BRANCH_F)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
// Remove the branch.
|
||||
I->eraseFromParent();
|
||||
|
||||
I = MBB.end();
|
||||
|
||||
if (I == MBB.begin()) return;
|
||||
if (I == MBB.begin()) return 1;
|
||||
--I;
|
||||
if (I->getOpcode() != Alpha::COND_BRANCH_I &&
|
||||
I->getOpcode() != Alpha::COND_BRANCH_F)
|
||||
return;
|
||||
return 1;
|
||||
|
||||
// Remove the branch.
|
||||
I->eraseFromParent();
|
||||
return 2;
|
||||
}
|
||||
|
||||
void AlphaInstrInfo::insertNoop(MachineBasicBlock &MBB,
|
||||
|
@ -39,13 +39,13 @@ public:
|
||||
virtual unsigned isLoadFromStackSlot(MachineInstr *MI, int &FrameIndex) const;
|
||||
virtual unsigned isStoreToStackSlot(MachineInstr *MI, int &FrameIndex) const;
|
||||
|
||||
virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond) const;
|
||||
bool AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB,
|
||||
MachineBasicBlock *&FBB,
|
||||
std::vector<MachineOperand> &Cond) const;
|
||||
void RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
void insertNoop(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI) const;
|
||||
bool BlockHasNoFallThrough(MachineBasicBlock &MBB) const;
|
||||
|
@ -47,10 +47,12 @@ bool IA64InstrInfo::isMoveInstr(const MachineInstr& MI,
|
||||
// move instruction
|
||||
}
|
||||
|
||||
void IA64InstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond)const {
|
||||
unsigned
|
||||
IA64InstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond)const {
|
||||
// Can only insert uncond branches so far.
|
||||
assert(Cond.empty() && !FBB && TBB && "Can only handle uncond branches!");
|
||||
BuildMI(&MBB, get(IA64::BRL_NOTCALL)).addMBB(TBB);
|
||||
return 1;
|
||||
}
|
||||
|
@ -37,9 +37,9 @@ public:
|
||||
virtual bool isMoveInstr(const MachineInstr& MI,
|
||||
unsigned& sourceReg,
|
||||
unsigned& destReg) const;
|
||||
virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond) const;
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond) const;
|
||||
|
||||
};
|
||||
|
||||
|
@ -224,30 +224,32 @@ bool PPCInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB,
|
||||
return true;
|
||||
}
|
||||
|
||||
void PPCInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
unsigned PPCInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
|
||||
MachineBasicBlock::iterator I = MBB.end();
|
||||
if (I == MBB.begin()) return;
|
||||
if (I == MBB.begin()) return 0;
|
||||
--I;
|
||||
if (I->getOpcode() != PPC::B && I->getOpcode() != PPC::BCC)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
// Remove the branch.
|
||||
I->eraseFromParent();
|
||||
|
||||
I = MBB.end();
|
||||
|
||||
if (I == MBB.begin()) return;
|
||||
if (I == MBB.begin()) return 1;
|
||||
--I;
|
||||
if (I->getOpcode() != PPC::BCC)
|
||||
return;
|
||||
return 1;
|
||||
|
||||
// Remove the branch.
|
||||
I->eraseFromParent();
|
||||
return 2;
|
||||
}
|
||||
|
||||
void PPCInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond) const {
|
||||
unsigned
|
||||
PPCInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond) 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) &&
|
||||
@ -260,13 +262,14 @@ void PPCInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
else // Conditional branch
|
||||
BuildMI(&MBB, get(PPC::BCC))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Two-way Conditional Branch.
|
||||
BuildMI(&MBB, get(PPC::BCC))
|
||||
.addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB);
|
||||
BuildMI(&MBB, get(PPC::B)).addMBB(FBB);
|
||||
return 2;
|
||||
}
|
||||
|
||||
bool PPCInstrInfo::BlockHasNoFallThrough(MachineBasicBlock &MBB) const {
|
||||
|
@ -99,10 +99,10 @@ public:
|
||||
virtual bool AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
|
||||
MachineBasicBlock *&FBB,
|
||||
std::vector<MachineOperand> &Cond) const;
|
||||
virtual void RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond) const;
|
||||
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const;
|
||||
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const std::vector<MachineOperand> &Cond) const;
|
||||
virtual bool BlockHasNoFallThrough(MachineBasicBlock &MBB) const;
|
||||
virtual bool ReverseBranchCondition(std::vector<MachineOperand> &Cond) const;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user