diff options
author | Matthias Braun <matze@braunis.de> | 2016-05-24 21:54:01 +0000 |
---|---|---|
committer | Matthias Braun <matze@braunis.de> | 2016-05-24 21:54:01 +0000 |
commit | fc4c8a1e46ea2d92c0093b44d800955c2b87cdc0 (patch) | |
tree | 102f1f1f39bd198348714ca49a1ae97547e47fe7 /llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | |
parent | 94ddce2c0e27d40813086823487eaabcccd97b7b (diff) | |
download | llvm-fc4c8a1e46ea2d92c0093b44d800955c2b87cdc0.zip llvm-fc4c8a1e46ea2d92c0093b44d800955c2b87cdc0.tar.gz llvm-fc4c8a1e46ea2d92c0093b44d800955c2b87cdc0.tar.bz2 |
LiveIntervalAnalysis: Fix handleMove() re-using the wrong value number
This fixes http://llvm.org/PR27856
llvm-svn: 270619
Diffstat (limited to 'llvm/lib/CodeGen/LiveIntervalAnalysis.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp index 16d0030..2358b0e 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 { |