[LiveIntervals] Fix incorrect range (re)construction from subranges.
authorDaniil Fukalov <1671137+dfukalov@users.noreply.github.com>
Fri, 8 Jul 2022 13:06:45 +0000 (16:06 +0300)
committerDaniil Fukalov <1671137+dfukalov@users.noreply.github.com>
Fri, 8 Jul 2022 13:07:19 +0000 (16:07 +0300)
commit6858a17f66f6d609e2d801c443da951c391636a0
tree6b9c1843fffb388d2a503a399b2d47dbd995ae3a
parentfad7d53a5f57f0b04b1d5bf5c3296fd41ac694a2
[LiveIntervals] Fix incorrect range (re)construction from subranges.

After D82916 `updateAllRanges()` started to fix holes in main range with
subranges but it fails on instructions with two subregs def which are parts of
one reg. The main range constructed with //all// subranges of subregs just after
processing the first operand. So the main range gets intervals from subranges
those are not updated yet.

The patch takes into account lane mask to update the main range.

Reviewed By: rampitec, arsenm

Differential Revision: https://reviews.llvm.org/D128553
llvm/lib/CodeGen/LiveIntervals.cpp
llvm/unittests/MI/LiveIntervalTest.cpp