[llvm] [MachineCopyPropagation][NFC] Refactor EliminateSpillageCopies (PR #192609)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 17 12:29:58 PDT 2026
================
@@ -1367,44 +1380,44 @@ void MachineCopyPropagation::eliminateSpillageCopies(MachineBasicBlock &MBB) {
}
};
- auto IsFoldableCopy = [this](const MachineInstr &MaybeCopy) {
+ auto GetFoldableCopy =
+ [this](const MachineInstr &MaybeCopy) -> std::optional<DestSourcePair> {
if (MaybeCopy.getNumImplicitOperands() > 0)
- return false;
+ return std::nullopt;
std::optional<DestSourcePair> CopyOperands =
isCopyInstr(MaybeCopy, *TII, UseCopyInstr);
if (!CopyOperands)
- return false;
+ return std::nullopt;
auto [Dst, Src] = getDstSrcMCRegs(*CopyOperands);
- return Src && Dst && !TRI->regsOverlap(Src, Dst) &&
- CopyOperands->Source->isRenamable() &&
- CopyOperands->Destination->isRenamable();
+ if (Src && Dst && !TRI->regsOverlap(Src, Dst) &&
+ CopyOperands->Source->isRenamable() &&
+ CopyOperands->Destination->isRenamable())
+ return CopyOperands;
+
+ return std::nullopt;
};
- auto IsSpillReloadPair = [&, this](const MachineInstr &Spill,
- const MachineInstr &Reload) {
- if (!IsFoldableCopy(Spill) || !IsFoldableCopy(Reload))
- return false;
- std::optional<DestSourcePair> SpillCopy =
- isCopyInstr(Spill, *TII, UseCopyInstr);
- std::optional<DestSourcePair> ReloadCopy =
- isCopyInstr(Reload, *TII, UseCopyInstr);
- if (!SpillCopy || !ReloadCopy)
+ auto IsSpillReloadPair = [&](const MachineInstr &Spill,
+ const MachineInstr &Reload) {
+ std::optional<DestSourcePair> FoldableSpillCopy = GetFoldableCopy(Spill);
+ std::optional<DestSourcePair> FoldableReloadCopy = GetFoldableCopy(Reload);
+ if (!FoldableReloadCopy || !FoldableSpillCopy)
----------------
arsenm wrote:
Early exit after first one fails
https://github.com/llvm/llvm-project/pull/192609
More information about the llvm-commits
mailing list