forked from OSchip/llvm-project
don't repeat function/variable names in comments; NFC
llvm-svn: 254445
This commit is contained in:
parent
5d1f2524a0
commit
b53791e5a7
|
@ -83,21 +83,20 @@ class TwoAddressInstructionPass : public MachineFunctionPass {
|
|||
// The current basic block being processed.
|
||||
MachineBasicBlock *MBB;
|
||||
|
||||
// DistanceMap - Keep track the distance of a MI from the start of the
|
||||
// current basic block.
|
||||
// Keep track the distance of a MI from the start of the current basic block.
|
||||
DenseMap<MachineInstr*, unsigned> DistanceMap;
|
||||
|
||||
// Set of already processed instructions in the current block.
|
||||
SmallPtrSet<MachineInstr*, 8> Processed;
|
||||
|
||||
// SrcRegMap - A map from virtual registers to physical registers which are
|
||||
// likely targets to be coalesced to due to copies from physical registers to
|
||||
// virtual registers. e.g. v1024 = move r0.
|
||||
// A map from virtual registers to physical registers which are likely targets
|
||||
// to be coalesced to due to copies from physical registers to virtual
|
||||
// registers. e.g. v1024 = move r0.
|
||||
DenseMap<unsigned, unsigned> SrcRegMap;
|
||||
|
||||
// DstRegMap - A map from virtual registers to physical registers which are
|
||||
// likely targets to be coalesced to due to copies to physical registers from
|
||||
// virtual registers. e.g. r1 = move v1024.
|
||||
// A map from virtual registers to physical registers which are likely targets
|
||||
// to be coalesced to due to copies to physical registers from virtual
|
||||
// registers. e.g. r1 = move v1024.
|
||||
DenseMap<unsigned, unsigned> DstRegMap;
|
||||
|
||||
bool sink3AddrInstruction(MachineInstr *MI, unsigned Reg,
|
||||
|
@ -165,7 +164,7 @@ public:
|
|||
MachineFunctionPass::getAnalysisUsage(AU);
|
||||
}
|
||||
|
||||
/// runOnMachineFunction - Pass entry point.
|
||||
/// Pass entry point.
|
||||
bool runOnMachineFunction(MachineFunction&) override;
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
@ -181,10 +180,9 @@ char &llvm::TwoAddressInstructionPassID = TwoAddressInstructionPass::ID;
|
|||
|
||||
static bool isPlainlyKilled(MachineInstr *MI, unsigned Reg, LiveIntervals *LIS);
|
||||
|
||||
/// sink3AddrInstruction - A two-address instruction has been converted to a
|
||||
/// three-address instruction to avoid clobbering a register. Try to sink it
|
||||
/// past the instruction that would kill the above mentioned register to reduce
|
||||
/// register pressure.
|
||||
/// A two-address instruction has been converted to a three-address instruction
|
||||
/// to avoid clobbering a register. Try to sink it past the instruction that
|
||||
/// would kill the above mentioned register to reduce register pressure.
|
||||
bool TwoAddressInstructionPass::
|
||||
sink3AddrInstruction(MachineInstr *MI, unsigned SavedReg,
|
||||
MachineBasicBlock::iterator OldPos) {
|
||||
|
@ -313,8 +311,7 @@ sink3AddrInstruction(MachineInstr *MI, unsigned SavedReg,
|
|||
return true;
|
||||
}
|
||||
|
||||
/// getSingleDef -- return the MachineInstr* if it is the single def of the Reg
|
||||
/// in current BB.
|
||||
/// Return the MachineInstr* if it is the single def of the Reg in current BB.
|
||||
static MachineInstr *getSingleDef(unsigned Reg, MachineBasicBlock *BB,
|
||||
const MachineRegisterInfo *MRI) {
|
||||
MachineInstr *Ret = nullptr;
|
||||
|
@ -352,10 +349,10 @@ bool TwoAddressInstructionPass::isRevCopyChain(unsigned FromReg, unsigned ToReg,
|
|||
return false;
|
||||
}
|
||||
|
||||
/// noUseAfterLastDef - Return true if there are no intervening uses between the
|
||||
/// last instruction in the MBB that defines the specified register and the
|
||||
/// two-address instruction which is being processed. It also returns the last
|
||||
/// def location by reference
|
||||
/// Return true if there are no intervening uses between the last instruction
|
||||
/// in the MBB that defines the specified register and the two-address
|
||||
/// instruction which is being processed. It also returns the last def location
|
||||
/// by reference.
|
||||
bool TwoAddressInstructionPass::noUseAfterLastDef(unsigned Reg, unsigned Dist,
|
||||
unsigned &LastDef) {
|
||||
LastDef = 0;
|
||||
|
@ -376,9 +373,9 @@ bool TwoAddressInstructionPass::noUseAfterLastDef(unsigned Reg, unsigned Dist,
|
|||
return !(LastUse > LastDef && LastUse < Dist);
|
||||
}
|
||||
|
||||
/// isCopyToReg - Return true if the specified MI is a copy instruction or
|
||||
/// a extract_subreg instruction. It also returns the source and destination
|
||||
/// registers and whether they are physical registers by reference.
|
||||
/// Return true if the specified MI is a copy instruction or an extract_subreg
|
||||
/// instruction. It also returns the source and destination registers and
|
||||
/// whether they are physical registers by reference.
|
||||
static bool isCopyToReg(MachineInstr &MI, const TargetInstrInfo *TII,
|
||||
unsigned &SrcReg, unsigned &DstReg,
|
||||
bool &IsSrcPhys, bool &IsDstPhys) {
|
||||
|
@ -398,8 +395,8 @@ static bool isCopyToReg(MachineInstr &MI, const TargetInstrInfo *TII,
|
|||
return true;
|
||||
}
|
||||
|
||||
/// isPLainlyKilled - Test if the given register value, which is used by the
|
||||
// given instruction, is killed by the given instruction.
|
||||
/// Test if the given register value, which is used by the
|
||||
/// given instruction, is killed by the given instruction.
|
||||
static bool isPlainlyKilled(MachineInstr *MI, unsigned Reg,
|
||||
LiveIntervals *LIS) {
|
||||
if (LIS && TargetRegisterInfo::isVirtualRegister(Reg) &&
|
||||
|
@ -425,7 +422,7 @@ static bool isPlainlyKilled(MachineInstr *MI, unsigned Reg,
|
|||
return MI->killsRegister(Reg);
|
||||
}
|
||||
|
||||
/// isKilled - Test if the given register value, which is used by the given
|
||||
/// Test if the given register value, which is used by the given
|
||||
/// instruction, is killed by the given instruction. This looks through
|
||||
/// coalescable copies to see if the original value is potentially not killed.
|
||||
///
|
||||
|
@ -473,8 +470,8 @@ static bool isKilled(MachineInstr &MI, unsigned Reg,
|
|||
}
|
||||
}
|
||||
|
||||
/// isTwoAddrUse - Return true if the specified MI uses the specified register
|
||||
/// as a two-address use. If so, return the destination register by reference.
|
||||
/// Return true if the specified MI uses the specified register as a two-address
|
||||
/// use. If so, return the destination register by reference.
|
||||
static bool isTwoAddrUse(MachineInstr &MI, unsigned Reg, unsigned &DstReg) {
|
||||
for (unsigned i = 0, NumOps = MI.getNumOperands(); i != NumOps; ++i) {
|
||||
const MachineOperand &MO = MI.getOperand(i);
|
||||
|
@ -489,8 +486,8 @@ static bool isTwoAddrUse(MachineInstr &MI, unsigned Reg, unsigned &DstReg) {
|
|||
return false;
|
||||
}
|
||||
|
||||
/// findOnlyInterestingUse - Given a register, if has a single in-basic block
|
||||
/// use, return the use instruction if it's a copy or a two-address use.
|
||||
/// Given a register, if has a single in-basic block use, return the use
|
||||
/// instruction if it's a copy or a two-address use.
|
||||
static
|
||||
MachineInstr *findOnlyInterestingUse(unsigned Reg, MachineBasicBlock *MBB,
|
||||
MachineRegisterInfo *MRI,
|
||||
|
@ -517,8 +514,8 @@ MachineInstr *findOnlyInterestingUse(unsigned Reg, MachineBasicBlock *MBB,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
/// getMappedReg - Return the physical register the specified virtual register
|
||||
/// might be mapped to.
|
||||
/// Return the physical register the specified virtual register might be mapped
|
||||
/// to.
|
||||
static unsigned
|
||||
getMappedReg(unsigned Reg, DenseMap<unsigned, unsigned> &RegMap) {
|
||||
while (TargetRegisterInfo::isVirtualRegister(Reg)) {
|
||||
|
@ -532,8 +529,7 @@ getMappedReg(unsigned Reg, DenseMap<unsigned, unsigned> &RegMap) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
/// regsAreCompatible - Return true if the two registers are equal or aliased.
|
||||
///
|
||||
/// Return true if the two registers are equal or aliased.
|
||||
static bool
|
||||
regsAreCompatible(unsigned RegA, unsigned RegB, const TargetRegisterInfo *TRI) {
|
||||
if (RegA == RegB)
|
||||
|
@ -544,8 +540,8 @@ regsAreCompatible(unsigned RegA, unsigned RegB, const TargetRegisterInfo *TRI) {
|
|||
}
|
||||
|
||||
|
||||
/// isProfitableToCommute - Return true if it's potentially profitable to commute
|
||||
/// the two-address instruction that's being processed.
|
||||
/// Return true if it's potentially profitable to commute the two-address
|
||||
/// instruction that's being processed.
|
||||
bool
|
||||
TwoAddressInstructionPass::
|
||||
isProfitableToCommute(unsigned regA, unsigned regB, unsigned regC,
|
||||
|
@ -643,9 +639,8 @@ isProfitableToCommute(unsigned regA, unsigned regB, unsigned regC,
|
|||
return LastDefB && LastDefC && LastDefC > LastDefB;
|
||||
}
|
||||
|
||||
/// commuteInstruction - Commute a two-address instruction and update the basic
|
||||
/// block, distance map, and live variables if needed. Return true if it is
|
||||
/// successful.
|
||||
/// Commute a two-address instruction and update the basic block, distance map,
|
||||
/// and live variables if needed. Return true if it is successful.
|
||||
bool TwoAddressInstructionPass::commuteInstruction(MachineInstr *MI,
|
||||
unsigned RegBIdx,
|
||||
unsigned RegCIdx,
|
||||
|
@ -674,8 +669,8 @@ bool TwoAddressInstructionPass::commuteInstruction(MachineInstr *MI,
|
|||
return true;
|
||||
}
|
||||
|
||||
/// isProfitableToConv3Addr - Return true if it is profitable to convert the
|
||||
/// given 2-address instruction to a 3-address one.
|
||||
/// Return true if it is profitable to convert the given 2-address instruction
|
||||
/// to a 3-address one.
|
||||
bool
|
||||
TwoAddressInstructionPass::isProfitableToConv3Addr(unsigned RegA,unsigned RegB){
|
||||
// Look for situations like this:
|
||||
|
@ -691,8 +686,8 @@ TwoAddressInstructionPass::isProfitableToConv3Addr(unsigned RegA,unsigned RegB){
|
|||
return (ToRegA && !regsAreCompatible(FromRegB, ToRegA, TRI));
|
||||
}
|
||||
|
||||
/// convertInstTo3Addr - Convert the specified two-address instruction into a
|
||||
/// three address one. Return true if this transformation was successful.
|
||||
/// Convert the specified two-address instruction into a three address one.
|
||||
/// Return true if this transformation was successful.
|
||||
bool
|
||||
TwoAddressInstructionPass::convertInstTo3Addr(MachineBasicBlock::iterator &mi,
|
||||
MachineBasicBlock::iterator &nmi,
|
||||
|
@ -733,8 +728,8 @@ TwoAddressInstructionPass::convertInstTo3Addr(MachineBasicBlock::iterator &mi,
|
|||
return true;
|
||||
}
|
||||
|
||||
/// scanUses - Scan forward recursively for only uses, update maps if the use
|
||||
/// is a copy or a two-address instruction.
|
||||
/// Scan forward recursively for only uses, update maps if the use is a copy or
|
||||
/// a two-address instruction.
|
||||
void
|
||||
TwoAddressInstructionPass::scanUses(unsigned DstReg) {
|
||||
SmallVector<unsigned, 4> VirtRegPairs;
|
||||
|
@ -780,8 +775,8 @@ TwoAddressInstructionPass::scanUses(unsigned DstReg) {
|
|||
}
|
||||
}
|
||||
|
||||
/// processCopy - If the specified instruction is not yet processed, process it
|
||||
/// if it's a copy. For a copy instruction, we find the physical registers the
|
||||
/// If the specified instruction is not yet processed, process it if it's a
|
||||
/// copy. For a copy instruction, we find the physical registers the
|
||||
/// source and destination registers might be mapped to. These are kept in
|
||||
/// point-to maps used to determine future optimizations. e.g.
|
||||
/// v1024 = mov r0
|
||||
|
@ -816,9 +811,9 @@ void TwoAddressInstructionPass::processCopy(MachineInstr *MI) {
|
|||
return;
|
||||
}
|
||||
|
||||
/// rescheduleMIBelowKill - If there is one more local instruction that reads
|
||||
/// 'Reg' and it kills 'Reg, consider moving the instruction below the kill
|
||||
/// instruction in order to eliminate the need for the copy.
|
||||
/// If there is one more local instruction that reads 'Reg' and it kills 'Reg,
|
||||
/// consider moving the instruction below the kill instruction in order to
|
||||
/// eliminate the need for the copy.
|
||||
bool TwoAddressInstructionPass::
|
||||
rescheduleMIBelowKill(MachineBasicBlock::iterator &mi,
|
||||
MachineBasicBlock::iterator &nmi,
|
||||
|
@ -987,8 +982,8 @@ rescheduleMIBelowKill(MachineBasicBlock::iterator &mi,
|
|||
return true;
|
||||
}
|
||||
|
||||
/// isDefTooClose - Return true if the re-scheduling will put the given
|
||||
/// instruction too close to the defs of its register dependencies.
|
||||
/// Return true if the re-scheduling will put the given instruction too close
|
||||
/// to the defs of its register dependencies.
|
||||
bool TwoAddressInstructionPass::isDefTooClose(unsigned Reg, unsigned Dist,
|
||||
MachineInstr *MI) {
|
||||
for (MachineInstr &DefMI : MRI->def_instructions(Reg)) {
|
||||
|
@ -1007,10 +1002,9 @@ bool TwoAddressInstructionPass::isDefTooClose(unsigned Reg, unsigned Dist,
|
|||
return false;
|
||||
}
|
||||
|
||||
/// rescheduleKillAboveMI - If there is one more local instruction that reads
|
||||
/// 'Reg' and it kills 'Reg, consider moving the kill instruction above the
|
||||
/// current two-address instruction in order to eliminate the need for the
|
||||
/// copy.
|
||||
/// If there is one more local instruction that reads 'Reg' and it kills 'Reg,
|
||||
/// consider moving the kill instruction above the current two-address
|
||||
/// instruction in order to eliminate the need for the copy.
|
||||
bool TwoAddressInstructionPass::
|
||||
rescheduleKillAboveMI(MachineBasicBlock::iterator &mi,
|
||||
MachineBasicBlock::iterator &nmi,
|
||||
|
@ -1213,13 +1207,13 @@ bool TwoAddressInstructionPass::tryInstructionCommute(MachineInstr *MI,
|
|||
return false;
|
||||
}
|
||||
|
||||
/// tryInstructionTransform - For the case where an instruction has a single
|
||||
/// pair of tied register operands, attempt some transformations that may
|
||||
/// either eliminate the tied operands or improve the opportunities for
|
||||
/// coalescing away the register copy. Returns true if no copy needs to be
|
||||
/// inserted to untie mi's operands (either because they were untied, or
|
||||
/// because mi was rescheduled, and will be visited again later). If the
|
||||
/// shouldOnlyCommute flag is true, only instruction commutation is attempted.
|
||||
/// For the case where an instruction has a single pair of tied register
|
||||
/// operands, attempt some transformations that may either eliminate the tied
|
||||
/// operands or improve the opportunities for coalescing away the register copy.
|
||||
/// Returns true if no copy needs to be inserted to untie mi's operands
|
||||
/// (either because they were untied, or because mi was rescheduled, and will
|
||||
/// be visited again later). If the shouldOnlyCommute flag is true, only
|
||||
/// instruction commutation is attempted.
|
||||
bool TwoAddressInstructionPass::
|
||||
tryInstructionTransform(MachineBasicBlock::iterator &mi,
|
||||
MachineBasicBlock::iterator &nmi,
|
||||
|
@ -1618,8 +1612,7 @@ TwoAddressInstructionPass::processTiedPairs(MachineInstr *MI,
|
|||
}
|
||||
}
|
||||
|
||||
/// runOnMachineFunction - Reduce two-address instructions to two operands.
|
||||
///
|
||||
/// Reduce two-address instructions to two operands.
|
||||
bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &Func) {
|
||||
MF = &Func;
|
||||
const TargetMachine &TM = MF->getTarget();
|
||||
|
|
Loading…
Reference in New Issue