Fix LiveInterval.Split (#1660)

Before when splitting intervals, the end of the range would be included
in the split check, this can produce empty ranges in the child split.

This in turn can affect spilling decisions since the child split will
have a different start position and this empty range will get a register
and move to the active set for a brief moment.

For example:

  A = [153, 172[; [1899, 1916[; [1991, 2010[; [2397, 2414[; ...

  Split(A, 1916)

  A0 = [153, 172[; [1899, 1916[
  A1 = [1916, 1916[; [1991, 2010[; [2397, 2414[; ...
This commit is contained in:
FICTURE7 2020-11-05 06:09:45 +04:00 committed by GitHub
parent 4c6feb652f
commit 64088f04e3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -287,7 +287,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
{
LiveRange range = _ranges[splitIndex];
if (position > range.Start && position <= range.End)
if (position > range.Start && position < range.End)
{
right._ranges.Add(new LiveRange(position, range.End));