mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Switch some getAliasSet clients to MCRegAliasIterator.
MCRegAliasIterator can optionally visit the register itself, allowing for simpler code. llvm-svn: 157837
This commit is contained in:
parent
74ccc117d5
commit
1ab123a8d4
@ -1491,9 +1491,8 @@ MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB,
|
||||
if (!Reg)
|
||||
continue;
|
||||
if (MO.isUse()) {
|
||||
Uses.insert(Reg);
|
||||
for (const uint16_t *AS = TRI->getAliasSet(Reg); *AS; ++AS)
|
||||
Uses.insert(*AS);
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
|
||||
Uses.insert(*AI);
|
||||
} else if (!MO.isDead())
|
||||
// Don't try to hoist code in the rare case the terminator defines a
|
||||
// register that is later used.
|
||||
@ -1553,18 +1552,16 @@ MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB,
|
||||
if (!Reg)
|
||||
continue;
|
||||
if (MO.isUse()) {
|
||||
Uses.insert(Reg);
|
||||
for (const uint16_t *AS = TRI->getAliasSet(Reg); *AS; ++AS)
|
||||
Uses.insert(*AS);
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
|
||||
Uses.insert(*AI);
|
||||
} else {
|
||||
if (Uses.count(Reg)) {
|
||||
Uses.erase(Reg);
|
||||
for (const uint16_t *SR = TRI->getSubRegisters(Reg); *SR; ++SR)
|
||||
Uses.erase(*SR); // Use getSubRegisters to be conservative
|
||||
}
|
||||
Defs.insert(Reg);
|
||||
for (const uint16_t *AS = TRI->getAliasSet(Reg); *AS; ++AS)
|
||||
Defs.insert(*AS);
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
|
||||
Defs.insert(*AI);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,17 +62,11 @@ void CriticalAntiDepBreaker::StartBlock(MachineBasicBlock *BB) {
|
||||
// In a return block, examine the function live-out regs.
|
||||
for (MachineRegisterInfo::liveout_iterator I = MRI.liveout_begin(),
|
||||
E = MRI.liveout_end(); I != E; ++I) {
|
||||
unsigned Reg = *I;
|
||||
Classes[Reg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[Reg] = BBSize;
|
||||
DefIndices[Reg] = ~0u;
|
||||
|
||||
// Repeat, for all aliases.
|
||||
for (const uint16_t *Alias = TRI->getAliasSet(Reg); *Alias; ++Alias) {
|
||||
unsigned AliasReg = *Alias;
|
||||
Classes[AliasReg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[AliasReg] = BBSize;
|
||||
DefIndices[AliasReg] = ~0u;
|
||||
for (MCRegAliasIterator AI(*I, TRI, true); AI.isValid(); ++AI) {
|
||||
unsigned Reg = *AI;
|
||||
Classes[Reg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[Reg] = BBSize;
|
||||
DefIndices[Reg] = ~0u;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -84,17 +78,11 @@ void CriticalAntiDepBreaker::StartBlock(MachineBasicBlock *BB) {
|
||||
SE = BB->succ_end(); SI != SE; ++SI)
|
||||
for (MachineBasicBlock::livein_iterator I = (*SI)->livein_begin(),
|
||||
E = (*SI)->livein_end(); I != E; ++I) {
|
||||
unsigned Reg = *I;
|
||||
Classes[Reg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[Reg] = BBSize;
|
||||
DefIndices[Reg] = ~0u;
|
||||
|
||||
// Repeat, for all aliases.
|
||||
for (const uint16_t *Alias = TRI->getAliasSet(Reg); *Alias; ++Alias) {
|
||||
unsigned AliasReg = *Alias;
|
||||
Classes[AliasReg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[AliasReg] = BBSize;
|
||||
DefIndices[AliasReg] = ~0u;
|
||||
for (MCRegAliasIterator AI(*I, TRI, true); AI.isValid(); ++AI) {
|
||||
unsigned Reg = *AI;
|
||||
Classes[Reg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[Reg] = BBSize;
|
||||
DefIndices[Reg] = ~0u;
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,18 +92,12 @@ void CriticalAntiDepBreaker::StartBlock(MachineBasicBlock *BB) {
|
||||
const MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
BitVector Pristine = MFI->getPristineRegs(BB);
|
||||
for (const uint16_t *I = TRI->getCalleeSavedRegs(&MF); *I; ++I) {
|
||||
unsigned Reg = *I;
|
||||
if (!IsReturnBlock && !Pristine.test(Reg)) continue;
|
||||
Classes[Reg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[Reg] = BBSize;
|
||||
DefIndices[Reg] = ~0u;
|
||||
|
||||
// Repeat, for all aliases.
|
||||
for (const uint16_t *Alias = TRI->getAliasSet(Reg); *Alias; ++Alias) {
|
||||
unsigned AliasReg = *Alias;
|
||||
Classes[AliasReg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[AliasReg] = BBSize;
|
||||
DefIndices[AliasReg] = ~0u;
|
||||
if (!IsReturnBlock && !Pristine.test(*I)) continue;
|
||||
for (MCRegAliasIterator AI(*I, TRI, true); AI.isValid(); ++AI) {
|
||||
unsigned Reg = *AI;
|
||||
Classes[Reg] = reinterpret_cast<TargetRegisterClass *>(-1);
|
||||
KillIndices[Reg] = BBSize;
|
||||
DefIndices[Reg] = ~0u;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -187,10 +187,8 @@ bool DeadMachineInstructionElim::runOnMachineFunction(MachineFunction &MF) {
|
||||
if (MO.isReg() && MO.isUse()) {
|
||||
unsigned Reg = MO.getReg();
|
||||
if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
|
||||
LivePhysRegs.set(Reg);
|
||||
for (const uint16_t *AliasSet = TRI->getAliasSet(Reg);
|
||||
*AliasSet; ++AliasSet)
|
||||
LivePhysRegs.set(*AliasSet);
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
|
||||
LivePhysRegs.set(*AI);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -216,11 +216,10 @@ bool MachineCSE::hasLivePhysRegDefUses(const MachineInstr *MI,
|
||||
if (MO.isDef() &&
|
||||
(MO.isDead() || isPhysDefTriviallyDead(Reg, I, MBB->end())))
|
||||
continue;
|
||||
PhysRefs.insert(Reg);
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
|
||||
PhysRefs.insert(*AI);
|
||||
if (MO.isDef())
|
||||
PhysDefs.push_back(Reg);
|
||||
for (const uint16_t *Alias = TRI->getAliasSet(Reg); *Alias; ++Alias)
|
||||
PhysRefs.insert(*Alias);
|
||||
}
|
||||
|
||||
return !PhysRefs.empty();
|
||||
|
@ -62,26 +62,14 @@ void
|
||||
MachineCopyPropagation::SourceNoLongerAvailable(unsigned Reg,
|
||||
SourceMap &SrcMap,
|
||||
DenseMap<unsigned, MachineInstr*> &AvailCopyMap) {
|
||||
SourceMap::iterator SI = SrcMap.find(Reg);
|
||||
if (SI != SrcMap.end()) {
|
||||
const DestList& Defs = SI->second;
|
||||
for (DestList::const_iterator I = Defs.begin(), E = Defs.end();
|
||||
I != E; ++I) {
|
||||
unsigned MappedDef = *I;
|
||||
// Source of copy is no longer available for propagation.
|
||||
if (AvailCopyMap.erase(MappedDef)) {
|
||||
for (const uint16_t *SR = TRI->getSubRegisters(MappedDef); *SR; ++SR)
|
||||
AvailCopyMap.erase(*SR);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const uint16_t *AS = TRI->getAliasSet(Reg); *AS; ++AS) {
|
||||
SI = SrcMap.find(*AS);
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI) {
|
||||
SourceMap::iterator SI = SrcMap.find(*AI);
|
||||
if (SI != SrcMap.end()) {
|
||||
const DestList& Defs = SI->second;
|
||||
for (DestList::const_iterator I = Defs.begin(), E = Defs.end();
|
||||
I != E; ++I) {
|
||||
unsigned MappedDef = *I;
|
||||
// Source of copy is no longer available for propagation.
|
||||
if (AvailCopyMap.erase(MappedDef)) {
|
||||
for (const uint16_t *SR = TRI->getSubRegisters(MappedDef); *SR; ++SR)
|
||||
AvailCopyMap.erase(*SR);
|
||||
@ -188,11 +176,8 @@ bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) {
|
||||
}
|
||||
|
||||
// If Src is defined by a previous copy, it cannot be eliminated.
|
||||
CI = CopyMap.find(Src);
|
||||
if (CI != CopyMap.end())
|
||||
MaybeDeadCopies.remove(CI->second);
|
||||
for (const uint16_t *AS = TRI->getAliasSet(Src); *AS; ++AS) {
|
||||
CI = CopyMap.find(*AS);
|
||||
for (MCRegAliasIterator AI(Src, TRI, true); AI.isValid(); ++AI) {
|
||||
CI = CopyMap.find(*AI);
|
||||
if (CI != CopyMap.end())
|
||||
MaybeDeadCopies.remove(CI->second);
|
||||
}
|
||||
@ -256,11 +241,8 @@ bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) {
|
||||
|
||||
// If 'Reg' is defined by a copy, the copy is no longer a candidate
|
||||
// for elimination.
|
||||
DenseMap<unsigned, MachineInstr*>::iterator CI = CopyMap.find(Reg);
|
||||
if (CI != CopyMap.end())
|
||||
MaybeDeadCopies.remove(CI->second);
|
||||
for (const uint16_t *AS = TRI->getAliasSet(Reg); *AS; ++AS) {
|
||||
CI = CopyMap.find(*AS);
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI) {
|
||||
DenseMap<unsigned, MachineInstr*>::iterator CI = CopyMap.find(*AI);
|
||||
if (CI != CopyMap.end())
|
||||
MaybeDeadCopies.remove(CI->second);
|
||||
}
|
||||
@ -296,11 +278,9 @@ bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) {
|
||||
unsigned Reg = Defs[i];
|
||||
|
||||
// No longer defined by a copy.
|
||||
CopyMap.erase(Reg);
|
||||
AvailCopyMap.erase(Reg);
|
||||
for (const uint16_t *AS = TRI->getAliasSet(Reg); *AS; ++AS) {
|
||||
CopyMap.erase(*AS);
|
||||
AvailCopyMap.erase(*AS);
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI) {
|
||||
CopyMap.erase(*AI);
|
||||
AvailCopyMap.erase(*AI);
|
||||
}
|
||||
|
||||
// If 'Reg' is previously source of a copy, it is no longer available for
|
||||
|
@ -56,11 +56,8 @@ void Hexagon_CCState::HandleByVal(unsigned ValNo, EVT ValVT,
|
||||
|
||||
/// MarkAllocated - Mark a register and all of its aliases as allocated.
|
||||
void Hexagon_CCState::MarkAllocated(unsigned Reg) {
|
||||
UsedRegs[Reg/32] |= 1 << (Reg&31);
|
||||
|
||||
if (const uint16_t *RegAliases = TRI.getAliasSet(Reg))
|
||||
for (; (Reg = *RegAliases); ++RegAliases)
|
||||
UsedRegs[Reg/32] |= 1 << (Reg&31);
|
||||
for (MCRegAliasIterator AI(Reg, &TRI, true); AI.isValid(); ++AI)
|
||||
UsedRegs[*AI/32] |= 1 << (*AI&31);
|
||||
}
|
||||
|
||||
/// AnalyzeFormalArguments - Analyze an ISD::FORMAL_ARGUMENTS node,
|
||||
|
@ -251,13 +251,10 @@ void Filler::insertDefsUses(MachineBasicBlock::iterator MI,
|
||||
|
||||
//returns true if the Reg or its alias is in the RegSet.
|
||||
bool Filler::IsRegInSet(SmallSet<unsigned, 32>& RegSet, unsigned Reg) {
|
||||
if (RegSet.count(Reg))
|
||||
return true;
|
||||
// check Aliased Registers
|
||||
for (const uint16_t *Alias = TM.getRegisterInfo()->getAliasSet(Reg);
|
||||
*Alias; ++Alias)
|
||||
if (RegSet.count(*Alias))
|
||||
// Check Reg and all aliased Registers.
|
||||
for (MCRegAliasIterator AI(Reg, TM.getRegisterInfo(), true);
|
||||
AI.isValid(); ++AI)
|
||||
if (RegSet.count(*AI))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -279,14 +279,11 @@ void Filler::insertDefsUses(MachineBasicBlock::iterator MI,
|
||||
//returns true if the Reg or its alias is in the RegSet.
|
||||
bool Filler::IsRegInSet(SmallSet<unsigned, 32>& RegSet, unsigned Reg)
|
||||
{
|
||||
if (RegSet.count(Reg))
|
||||
return true;
|
||||
// check Aliased Registers
|
||||
for (const uint16_t *Alias = TM.getRegisterInfo()->getAliasSet(Reg);
|
||||
*Alias; ++ Alias)
|
||||
if (RegSet.count(*Alias))
|
||||
// Check Reg and all aliased Registers.
|
||||
for (MCRegAliasIterator AI(Reg, TM.getRegisterInfo(), true);
|
||||
AI.isValid(); ++AI)
|
||||
if (RegSet.count(*AI))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user