[llvm] [CodeGen] Resolve FIXME: Use findPHICopyInsertPoint to find the right place to copy InlineBR blocks (PR #89556)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 21 18:16:03 PDT 2024
https://github.com/AtariDreams updated https://github.com/llvm/llvm-project/pull/89556
>From 6f91c0e07b807459c01ec3933b396c75fcb9d467 Mon Sep 17 00:00:00 2001
From: Rose <gfunni234 at gmail.com>
Date: Sun, 21 Apr 2024 19:37:19 -0400
Subject: [PATCH] [CodeGen] Resolve FIXME: Use findPHICopyInsertPoint to find
the right place to copy InlineBR blocks
---
llvm/include/llvm/CodeGen/TailDuplicator.h | 7 ++++---
llvm/lib/CodeGen/TailDuplicator.cpp | 24 ++++++++++++----------
2 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/TailDuplicator.h b/llvm/include/llvm/CodeGen/TailDuplicator.h
index 8fdce301c0ccb1..1e08a791d53804 100644
--- a/llvm/include/llvm/CodeGen/TailDuplicator.h
+++ b/llvm/include/llvm/CodeGen/TailDuplicator.h
@@ -122,9 +122,10 @@ class TailDuplicator {
SmallVectorImpl<MachineBasicBlock *> &TDBBs,
SmallVectorImpl<MachineInstr *> &Copies,
SmallVectorImpl<MachineBasicBlock *> *CandidatePtr);
- void appendCopies(MachineBasicBlock *MBB,
- SmallVectorImpl<std::pair<Register, RegSubRegPair>> &CopyInfos,
- SmallVectorImpl<MachineInstr *> &Copies);
+ void
+ appendCopies(MachineBasicBlock *MBB, MachineBasicBlock *TailBB,
+ SmallVectorImpl<std::pair<Register, RegSubRegPair>> &CopyInfos,
+ SmallVectorImpl<MachineInstr *> &Copies);
void removeDeadBlock(
MachineBasicBlock *MBB,
diff --git a/llvm/lib/CodeGen/TailDuplicator.cpp b/llvm/lib/CodeGen/TailDuplicator.cpp
index f5dd21cb927012..7da0e76f5bfd6d 100644
--- a/llvm/lib/CodeGen/TailDuplicator.cpp
+++ b/llvm/lib/CodeGen/TailDuplicator.cpp
@@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/CodeGen/TailDuplicator.h"
+#include "PHIEliminationUtils.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
@@ -655,8 +656,6 @@ bool TailDuplicator::shouldTailDuplicate(bool IsSimple,
// TailDuplicator::appendCopies will erroneously place COPYs after
// INLINEASM_BR instructions after 4b0aa5724fea, which demonstrates the same
// bug that was fixed in f7a53d82c090.
- // FIXME: Use findPHICopyInsertPoint() to find the correct insertion point
- // for the COPY when replacing PHIs.
if (MI.getOpcode() == TargetOpcode::INLINEASM_BR)
return false;
@@ -913,7 +912,7 @@ bool TailDuplicator::tailDuplicate(bool IsSimple, MachineBasicBlock *TailBB,
duplicateInstruction(&MI, TailBB, PredBB, LocalVRMap, UsedByPhi);
}
}
- appendCopies(PredBB, CopyInfos, Copies);
+ appendCopies(PredBB, TailBB, CopyInfos, Copies);
NumTailDupAdded += TailBB->size() - 1; // subtract one for removed branch
@@ -981,7 +980,7 @@ bool TailDuplicator::tailDuplicate(bool IsSimple, MachineBasicBlock *TailBB,
duplicateInstruction(MI, TailBB, PrevBB, LocalVRMap, UsedByPhi);
MI->eraseFromParent();
}
- appendCopies(PrevBB, CopyInfos, Copies);
+ appendCopies(PrevBB, TailBB, CopyInfos, Copies);
} else {
TII->removeBranch(*PrevBB);
// No PHIs to worry about, just splice the instructions over.
@@ -1045,7 +1044,7 @@ bool TailDuplicator::tailDuplicate(bool IsSimple, MachineBasicBlock *TailBB,
// from PredBB.
processPHI(&MI, TailBB, PredBB, LocalVRMap, CopyInfos, UsedByPhi, false);
}
- appendCopies(PredBB, CopyInfos, Copies);
+ appendCopies(PredBB, TailBB, CopyInfos, Copies);
}
return Changed;
@@ -1053,14 +1052,17 @@ bool TailDuplicator::tailDuplicate(bool IsSimple, MachineBasicBlock *TailBB,
/// At the end of the block \p MBB generate COPY instructions between registers
/// described by \p CopyInfos. Append resulting instructions to \p Copies.
-void TailDuplicator::appendCopies(MachineBasicBlock *MBB,
- SmallVectorImpl<std::pair<Register, RegSubRegPair>> &CopyInfos,
- SmallVectorImpl<MachineInstr*> &Copies) {
- MachineBasicBlock::iterator Loc = MBB->getFirstTerminator();
+void TailDuplicator::appendCopies(
+ MachineBasicBlock *MBB, MachineBasicBlock *TailBB,
+ SmallVectorImpl<std::pair<Register, RegSubRegPair>> &CopyInfos,
+ SmallVectorImpl<MachineInstr *> &Copies) {
const MCInstrDesc &CopyD = TII->get(TargetOpcode::COPY);
+
for (auto &CI : CopyInfos) {
- auto C = BuildMI(*MBB, Loc, DebugLoc(), CopyD, CI.first)
- .addReg(CI.second.Reg, 0, CI.second.SubReg);
+ MachineBasicBlock::iterator InsertPos =
+ findPHICopyInsertPoint(MBB, TailBB, CI.second.Reg);
+ auto C = BuildMI(*MBB, InsertPos, DebugLoc(), CopyD, CI.first)
+ .addReg(CI.second.Reg, 0, CI.second.SubReg);
Copies.push_back(C);
}
}
More information about the llvm-commits
mailing list