[PATCH] D152066: The LaneMask of Phi-Def LiveRange should be the union of subranges' LaneMask in which the VNI is live.
michael_zhang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 3 07:53:35 PDT 2023
Michael-Zhang-21 created this revision.
Herald added subscribers: tpr, hiraditya, qcolombet, MatzeB.
Herald added a project: All.
Michael-Zhang-21 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D152066
Files:
llvm/lib/CodeGen/RegisterCoalescer.cpp
Index: llvm/lib/CodeGen/RegisterCoalescer.cpp
===================================================================
--- llvm/lib/CodeGen/RegisterCoalescer.cpp
+++ llvm/lib/CodeGen/RegisterCoalescer.cpp
@@ -2477,8 +2477,11 @@
ValueIn = LRQ.valueIn();
continue;
}
- if (LRQ.valueIn() && ValueIn != LRQ.valueIn())
+ if (LRQ.valueIn() && ValueIn != LRQ.valueIn()) {
+ VNI = LRQ.valueIn();
+ TrackReg = SrcReg;
return std::make_pair(VNI, TrackReg);
+ }
}
}
if (ValueIn == nullptr) {
@@ -2536,6 +2539,16 @@
// Conservatively assume that all lanes in a PHI are valid.
LaneBitmask Lanes = SubRangeJoin ? LaneBitmask::getLane(0)
: TRI->getSubRegIndexLaneMask(SubIdx);
+ if (!SubRangeJoin && LIS->getInterval(Reg).hasSubRanges()) {
+ Lanes = LaneBitmask::getNone();
+ for(auto subrangeIt = LIS->getInterval(Reg).subrange_begin();
+ subrangeIt != LIS->getInterval(Reg).subrange_end();
+ subrangeIt++){
+ if (subrangeIt->liveAt(VNI->def)) {
+ Lanes |= subrangeIt->LaneMask;
+ }
+ }
+ }
V.ValidLanes = V.WriteLanes = Lanes;
} else {
DefMI = Indexes->getInstructionFromIndex(VNI->def);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152066.528108.patch
Type: text/x-patch
Size: 1291 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230603/999df2d2/attachment.bin>
More information about the llvm-commits
mailing list