Skip to content

Commit 3bdf450

Browse files
author
Chen Zheng
committed
[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
1 parent f855751 commit 3bdf450

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

llvm/include/llvm/CodeGen/TargetRegisterInfo.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,10 +410,13 @@ class TargetRegisterInfo : public MCRegisterInfo {
410410

411411
/// Returns the original SrcReg unless it is the target of a copy-like
412412
/// operation, in which case we chain backwards through all such operations
413-
/// to the ultimate source register. If a physical register is encountered,
413+
/// to the ultimate source register. If a physical register is encountered,
414414
/// we stop the search.
415+
/// If one definition in the copy chain has multiple uses, set \p
416+
/// AllDefHaveOneUser to false, otherwise set it to true.
415417
virtual Register lookThruCopyLike(Register SrcReg,
416-
const MachineRegisterInfo *MRI) const;
418+
const MachineRegisterInfo *MRI,
419+
bool *AllDefHaveOneUser = nullptr) const;
417420

418421
/// Return a null-terminated list of all of the callee-saved registers on
419422
/// this target. The register should be in the order of desired callee-save

llvm/lib/CodeGen/TargetRegisterInfo.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -510,13 +510,19 @@ TargetRegisterInfo::getRegSizeInBits(Register Reg,
510510
return getRegSizeInBits(*RC);
511511
}
512512

513-
Register
514-
TargetRegisterInfo::lookThruCopyLike(Register SrcReg,
515-
const MachineRegisterInfo *MRI) const {
513+
Register TargetRegisterInfo::lookThruCopyLike(Register SrcReg,
514+
const MachineRegisterInfo *MRI,
515+
bool *AllDefHaveOneUser) const {
516+
if (AllDefHaveOneUser)
517+
*AllDefHaveOneUser = true;
518+
516519
while (true) {
517520
const MachineInstr *MI = MRI->getVRegDef(SrcReg);
518-
if (!MI->isCopyLike())
521+
if (!MI->isCopyLike()) {
522+
if (AllDefHaveOneUser && !MRI->hasOneNonDBGUse(SrcReg))
523+
*AllDefHaveOneUser = false;
519524
return SrcReg;
525+
}
520526

521527
Register CopySrcReg;
522528
if (MI->isCopy())
@@ -526,8 +532,11 @@ TargetRegisterInfo::lookThruCopyLike(Register SrcReg,
526532
CopySrcReg = MI->getOperand(2).getReg();
527533
}
528534

529-
if (!CopySrcReg.isVirtual())
535+
if (!CopySrcReg.isVirtual()) {
536+
if (AllDefHaveOneUser)
537+
*AllDefHaveOneUser = false;
530538
return CopySrcReg;
539+
}
531540

532541
SrcReg = CopySrcReg;
533542
}

0 commit comments

Comments
 (0)