From fc4c8a1e46ea2d92c0093b44d800955c2b87cdc0 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Tue, 24 May 2016 21:54:01 +0000 Subject: LiveIntervalAnalysis: Fix handleMove() re-using the wrong value number This fixes http://llvm.org/PR27856 llvm-svn: 270619 --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'llvm/lib') diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp index 16d0030a346..2358b0e7464 100644 --- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -1257,20 +1257,16 @@ private: // value. LiveRange::iterator NewSegment = NewIdxIn; LiveRange::iterator Next = std::next(NewSegment); - NewSegment->valno = OldIdxVNI; if (SlotIndex::isEarlierInstr(Next->start, NewIdx)) { // There is no gap between NewSegment and its predecessor. *NewSegment = LiveRange::Segment(Next->start, SplitPos, - NewSegment->valno); - NewSegment->valno->def = Next->start; - - *Next = LiveRange::Segment(SplitPos, Next->end, Next->valno); + Next->valno); + *Next = LiveRange::Segment(SplitPos, Next->end, OldIdxVNI); Next->valno->def = SplitPos; } else { // There is a gap between NewSegment and its predecessor // Value becomes live in. - *NewSegment = LiveRange::Segment(SplitPos, Next->start, - NewSegment->valno); + *NewSegment = LiveRange::Segment(SplitPos, Next->start, OldIdxVNI); NewSegment->valno->def = SplitPos; } } else { -- cgit v1.2.3