aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2016-05-24 21:54:01 +0000
committerMatthias Braun <matze@braunis.de>2016-05-24 21:54:01 +0000
commitfc4c8a1e46ea2d92c0093b44d800955c2b87cdc0 (patch)
tree102f1f1f39bd198348714ca49a1ae97547e47fe7 /llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
parent94ddce2c0e27d40813086823487eaabcccd97b7b (diff)
downloadllvm-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.cpp10
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 {