[PATCH] D92069: [NFC] [TargetRegisterInfo] add one use check to lookThruCopyLike.
Eric Christopher via llvm-commits
llvm-commits at lists.llvm.org
Sun Jan 17 17:18:26 PST 2021
Sorry to point this out now, but taking a bool in/out pointer is some
fairly awkward API. Can we do something else here?
Thanks!
-eric
On Sun, Jan 17, 2021 at 8:01 PM ChenZheng via Phabricator <
reviews at reviews.llvm.org> wrote:
> 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 --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210117/7e798894/attachment-0001.html>
More information about the llvm-commits
mailing list