mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 03:24:09 +00:00
Switch some getAliasSet clients to MCRegAliasIterator.
MCRegAliasIterator can optionally visit the register itself, allowing for simpler code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157837 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user