[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