[PATCH] D81291: [ModuloSchedule] Support instructions with > 1 destination when walking canonical use.
Hendrik Greving via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 5 11:47:16 PDT 2020
hgreving created this revision.
hgreving added reviewers: ThomasRaoux, kariddi.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
Fixes a minor bug that led to finding the wrong register if the definition had more
than one register destination.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D81291
Files:
llvm/lib/CodeGen/ModuloSchedule.cpp
Index: llvm/lib/CodeGen/ModuloSchedule.cpp
===================================================================
--- llvm/lib/CodeGen/ModuloSchedule.cpp
+++ llvm/lib/CodeGen/ModuloSchedule.cpp
@@ -1710,16 +1710,17 @@
MachineInstr *Phi) {
unsigned distance = PhiNodeLoopIteration[Phi];
MachineInstr *CanonicalUse = CanonicalPhi;
+ Register CanonicalUseReg = CanonicalUse->getOperand(0).getReg();
for (unsigned I = 0; I < distance; ++I) {
assert(CanonicalUse->isPHI());
assert(CanonicalUse->getNumOperands() == 5);
unsigned LoopRegIdx = 3, InitRegIdx = 1;
if (CanonicalUse->getOperand(2).getMBB() == CanonicalUse->getParent())
std::swap(LoopRegIdx, InitRegIdx);
- CanonicalUse =
- MRI.getVRegDef(CanonicalUse->getOperand(LoopRegIdx).getReg());
+ CanonicalUseReg = CanonicalUse->getOperand(LoopRegIdx).getReg();
+ CanonicalUse = MRI.getVRegDef(CanonicalUseReg);
}
- return CanonicalUse->getOperand(0).getReg();
+ return CanonicalUseReg;
}
void PeelingModuloScheduleExpander::peelPrologAndEpilogs() {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81291.268897.patch
Type: text/x-patch
Size: 1108 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200605/ae18480f/attachment.bin>
More information about the llvm-commits
mailing list