[PATCH] D92069: [NFC] [TargetRegisterInfo] add one use check to lookThruCopyLike.
ChenZheng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jan 17 17:01:58 PST 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG3bdf4507b663: [NFC] [TargetRegisterInfo] add one use check to lookThruCopyLike. (authored by shchenz).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92069/new/
https://reviews.llvm.org/D92069
Files:
llvm/include/llvm/CodeGen/TargetRegisterInfo.h
llvm/lib/CodeGen/TargetRegisterInfo.cpp
Index: llvm/lib/CodeGen/TargetRegisterInfo.cpp
===================================================================
--- llvm/lib/CodeGen/TargetRegisterInfo.cpp
+++ llvm/lib/CodeGen/TargetRegisterInfo.cpp
@@ -510,13 +510,19 @@
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 @@
CopySrcReg = MI->getOperand(2).getReg();
}
- if (!CopySrcReg.isVirtual())
+ if (!CopySrcReg.isVirtual()) {
+ if (AllDefHaveOneUser)
+ *AllDefHaveOneUser = false;
return CopySrcReg;
+ }
SrcReg = CopySrcReg;
}
Index: llvm/include/llvm/CodeGen/TargetRegisterInfo.h
===================================================================
--- llvm/include/llvm/CodeGen/TargetRegisterInfo.h
+++ llvm/include/llvm/CodeGen/TargetRegisterInfo.h
@@ -410,10 +410,13 @@
/// 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92069.317249.patch
Type: text/x-patch
Size: 2434 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210118/127516e8/attachment.bin>
More information about the llvm-commits
mailing list