[PATCH] D30558: Fix subreg value numbers in handleMoveUp
Stanislav Mekhanoshin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 10 15:28:13 PST 2017
rampitec updated this revision to Diff 91429.
rampitec retitled this revision from "Fix value numbers in successor blocks if liveout number has changed" to "Fix subreg value numbers in handleMoveUp".
rampitec edited the summary of this revision.
rampitec added a comment.
Removed post-processing and updated handleMoveUp.
Test renamed to SubRegMoveUp.
Repository:
rL LLVM
https://reviews.llvm.org/D30558
Files:
lib/CodeGen/LiveIntervalAnalysis.cpp
unittests/MI/LiveIntervalTest.cpp
Index: unittests/MI/LiveIntervalTest.cpp
===================================================================
--- unittests/MI/LiveIntervalTest.cpp
+++ unittests/MI/LiveIntervalTest.cpp
@@ -382,6 +382,24 @@
});
}
+TEST(LiveIntervalTest, SubRegMoveUp) {
+ // handleMoveUp had a bug not updating valno of segment incoming to bb.2
+ // after swapping subreg definitions.
+ liveIntervalTest(R"MIR(
+ successors: %bb.1, %bb.2
+ undef %0.sub0 = IMPLICIT_DEF
+ %0.sub1 = IMPLICIT_DEF
+ S_CBRANCH_VCCNZ %bb.2, implicit undef %vcc
+ S_BRANCH %bb.1
+ bb.1:
+ S_NOP 0, implicit %0.sub1
+ bb.2:
+ S_NOP 0, implicit %0.sub1
+)MIR", [](MachineFunction &MF, LiveIntervals &LIS) {
+ testHandleMove(MF, LIS, 1, 0);
+ });
+}
+
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
initLLVM();
Index: lib/CodeGen/LiveIntervalAnalysis.cpp
===================================================================
--- lib/CodeGen/LiveIntervalAnalysis.cpp
+++ lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -1232,10 +1232,12 @@
LiveRange::iterator NewIdxIn = NewIdxOut;
assert(NewIdxIn == LR.find(NewIdx.getBaseIndex()));
const SlotIndex SplitPos = NewIdxDef;
+ OldIdxVNI = OldIdxIn->valno;
// Merge the OldIdxIn and OldIdxOut segments into OldIdxOut.
+ OldIdxOut->valno->def = OldIdxIn->start;
*OldIdxOut = LiveRange::Segment(OldIdxIn->start, OldIdxOut->end,
- OldIdxIn->valno);
+ OldIdxOut->valno);
// OldIdxIn and OldIdxVNI are now undef and can be overridden.
// We Slide [NewIdxIn, OldIdxIn) down one position.
// |- X0/NewIdxIn -| ... |- Xn-1 -||- Xn/OldIdxIn -||- OldIdxOut -|
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D30558.91429.patch
Type: text/x-patch
Size: 1804 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170310/3d48457b/attachment.bin>
More information about the llvm-commits
mailing list