mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
Add MachineRegisterInfo::hasOneUse and hasOneNonDBGUse.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97663 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
14c85cbf54
commit
1423c70b8f
@ -115,6 +115,10 @@ public:
|
||||
/// register.
|
||||
bool use_empty(unsigned RegNo) const { return use_begin(RegNo) == use_end(); }
|
||||
|
||||
/// hasOneUse - Return true if there is exactly one instruction using the
|
||||
/// specified register.
|
||||
bool hasOneUse(unsigned RegNo) const;
|
||||
|
||||
/// use_nodbg_iterator/use_nodbg_begin/use_nodbg_end - Walk all uses of the
|
||||
/// specified register, skipping those marked as Debug.
|
||||
typedef defusechain_iterator<true,false,true> use_nodbg_iterator;
|
||||
@ -129,6 +133,10 @@ public:
|
||||
return use_nodbg_begin(RegNo) == use_nodbg_end();
|
||||
}
|
||||
|
||||
/// hasOneNonDBGUse - Return true if there is exactly one non-Debug
|
||||
/// instruction using the specified register.
|
||||
bool hasOneNonDBGUse(unsigned RegNo) const;
|
||||
|
||||
/// replaceRegWith - Replace all instances of FromReg with ToReg in the
|
||||
/// machine function. This is like llvm-level X->replaceAllUsesWith(Y),
|
||||
/// except that it also changes any definitions of the register as well.
|
||||
|
@ -116,6 +116,19 @@ MachineInstr *MachineRegisterInfo::getVRegDef(unsigned Reg) const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool MachineRegisterInfo::hasOneUse(unsigned RegNo) const {
|
||||
use_iterator UI = use_begin(RegNo);
|
||||
if (UI == use_end())
|
||||
return false;
|
||||
return ++UI == use_end();
|
||||
}
|
||||
|
||||
bool MachineRegisterInfo::hasOneNonDBGUse(unsigned RegNo) const {
|
||||
use_nodbg_iterator UI = use_nodbg_begin(RegNo);
|
||||
if (UI == use_nodbg_end())
|
||||
return false;
|
||||
return ++UI == use_nodbg_end();
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
void MachineRegisterInfo::dumpUses(unsigned Reg) const {
|
||||
|
@ -454,13 +454,10 @@ MachineInstr *findOnlyInterestingUse(unsigned Reg, MachineBasicBlock *MBB,
|
||||
const TargetInstrInfo *TII,
|
||||
bool &IsCopy,
|
||||
unsigned &DstReg, bool &IsDstPhys) {
|
||||
MachineRegisterInfo::use_nodbg_iterator UI = MRI->use_nodbg_begin(Reg);
|
||||
if (UI == MRI->use_nodbg_end())
|
||||
return 0;
|
||||
MachineInstr &UseMI = *UI;
|
||||
if (++UI != MRI->use_nodbg_end())
|
||||
// More than one use.
|
||||
if (!MRI->hasOneNonDBGUse(Reg))
|
||||
// None or more than one use.
|
||||
return 0;
|
||||
MachineInstr &UseMI = *MRI->use_nodbg_begin(Reg);
|
||||
if (UseMI.getParent() != MBB)
|
||||
return 0;
|
||||
unsigned SrcReg;
|
||||
|
Loading…
Reference in New Issue
Block a user