From 91f543a8f9aadb15f48f174b219a7c4cade7a9e1 Mon Sep 17 00:00:00 2001 From: FICTURE7 Date: Thu, 5 Nov 2020 06:09:45 +0400 Subject: [PATCH] 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[; ... --- ARMeilleure/CodeGen/RegisterAllocators/LiveInterval.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ARMeilleure/CodeGen/RegisterAllocators/LiveInterval.cs b/ARMeilleure/CodeGen/RegisterAllocators/LiveInterval.cs index 6e786061a1..309c5ba306 100644 --- a/ARMeilleure/CodeGen/RegisterAllocators/LiveInterval.cs +++ b/ARMeilleure/CodeGen/RegisterAllocators/LiveInterval.cs @@ -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));