[LiveRange] Reset the VNIs when splitting subranges
authorQuentin Colombet <quentin.colombet@gmail.com>
Tue, 26 Mar 2019 21:27:15 +0000 (21:27 +0000)
committerQuentin Colombet <quentin.colombet@gmail.com>
Tue, 26 Mar 2019 21:27:15 +0000 (21:27 +0000)
commitc74271c5376437fb79f58a33f509babce2ef1e21
tree897b4f07ac244ab00ee558c4f8d9f058fb7b98b2
parent55d495475c955384fdc0c4a18b5670ed8b1dedcf
[LiveRange] Reset the VNIs when splitting subranges

When splitting a subrange we end up with two different subranges covering
two different, non overlapping, lanes.
As part of this splitting the VNIs of the original live-range need
to be dispatched to the subranges according to which lanes they are
actually defining.

Prior to this patch we were assuming that all values were defining
all lanes. This was wrong as demonstrated by llvm.org/PR40835.

Differential Revision: https://reviews.llvm.org/D59731

llvm-svn: 357032
llvm/include/llvm/CodeGen/LiveInterval.h
llvm/lib/CodeGen/LiveInterval.cpp
llvm/lib/CodeGen/LiveRangeCalc.cpp
llvm/lib/CodeGen/RegisterCoalescer.cpp
llvm/lib/CodeGen/SplitKit.cpp
llvm/test/CodeGen/SystemZ/regcoal-subranges-update.mir [new file with mode: 0644]