mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-11 17:08:42 +00:00
[NFC] [TargetRegisterInfo] add one use check to lookThruCopyLike.
add one use check to lookThruCopyLike. The root node is safe to be deleted if we are sure that every definition in the copy chain only has one use. Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D92069
This commit is contained in:
parent
f855751c12
commit
3bdf4507b6
@ -410,10 +410,13 @@ public:
|
||||
|
||||
/// Returns the original SrcReg unless it is the target of a copy-like
|
||||
/// operation, in which case we chain backwards through all such operations
|
||||
/// to the ultimate source register. If a physical register is encountered,
|
||||
/// to the ultimate source register. If a physical register is encountered,
|
||||
/// we stop the search.
|
||||
/// If one definition in the copy chain has multiple uses, set \p
|
||||
/// AllDefHaveOneUser to false, otherwise set it to true.
|
||||
virtual Register lookThruCopyLike(Register SrcReg,
|
||||
const MachineRegisterInfo *MRI) const;
|
||||
const MachineRegisterInfo *MRI,
|
||||
bool *AllDefHaveOneUser = nullptr) const;
|
||||
|
||||
/// Return a null-terminated list of all of the callee-saved registers on
|
||||
/// this target. The register should be in the order of desired callee-save
|
||||
|
@ -510,13 +510,19 @@ TargetRegisterInfo::getRegSizeInBits(Register Reg,
|
||||
return getRegSizeInBits(*RC);
|
||||
}
|
||||
|
||||
Register
|
||||
TargetRegisterInfo::lookThruCopyLike(Register SrcReg,
|
||||
const MachineRegisterInfo *MRI) const {
|
||||
Register TargetRegisterInfo::lookThruCopyLike(Register SrcReg,
|
||||
const MachineRegisterInfo *MRI,
|
||||
bool *AllDefHaveOneUser) const {
|
||||
if (AllDefHaveOneUser)
|
||||
*AllDefHaveOneUser = true;
|
||||
|
||||
while (true) {
|
||||
const MachineInstr *MI = MRI->getVRegDef(SrcReg);
|
||||
if (!MI->isCopyLike())
|
||||
if (!MI->isCopyLike()) {
|
||||
if (AllDefHaveOneUser && !MRI->hasOneNonDBGUse(SrcReg))
|
||||
*AllDefHaveOneUser = false;
|
||||
return SrcReg;
|
||||
}
|
||||
|
||||
Register CopySrcReg;
|
||||
if (MI->isCopy())
|
||||
@ -526,8 +532,11 @@ TargetRegisterInfo::lookThruCopyLike(Register SrcReg,
|
||||
CopySrcReg = MI->getOperand(2).getReg();
|
||||
}
|
||||
|
||||
if (!CopySrcReg.isVirtual())
|
||||
if (!CopySrcReg.isVirtual()) {
|
||||
if (AllDefHaveOneUser)
|
||||
*AllDefHaveOneUser = false;
|
||||
return CopySrcReg;
|
||||
}
|
||||
|
||||
SrcReg = CopySrcReg;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user