Mosa.Compiler.Framework.RegisterAllocator.VirtualRegister.AddLiveInterval C# (CSharp) Method

AddLiveInterval() public method

public AddLiveInterval ( SlotIndex start, SlotIndex end ) : void
start SlotIndex
end SlotIndex
return void
        public void AddLiveInterval(SlotIndex start, SlotIndex end)
        {
            if (liveIntervals.Count == 0)
            {
                liveIntervals.Add(new LiveInterval(this, start, end));
                return;
            }

            for (int i = 0; i < liveIntervals.Count; i++)
            {
                var liveRange = liveIntervals[i];

                if (liveRange.Start == start && liveRange.End == end)
                    return;

                if (liveRange.IsAdjacent(start, end) || liveRange.Intersects(start, end))
                {
                    liveRange = liveRange.CreateExpandedLiveRange(start, end);
                    liveIntervals[i] = liveRange;

                    for (int z = i + 1; z < liveIntervals.Count; z++)
                    {
                        var nextLiveRange = liveIntervals[z];
                        if (liveRange.IsAdjacent(nextLiveRange) || liveRange.Intersects(nextLiveRange))
                        {
                            liveRange = liveRange.CreateExpandedLiveInterval(nextLiveRange);
                            liveIntervals[i] = liveRange;
                            liveIntervals.RemoveAt(z);

                            continue;
                        }

                        return;
                    }

                    return;
                }

                if (liveRange.Start > end)
                {
                    // new range is before the current range (so insert before)
                    liveIntervals.Insert(i, new LiveInterval(this, start, end));
                    return;
                }
            }

            // new range is after the last range
            liveIntervals.Add(new LiveInterval(this, start, end));
        }

Same methods

VirtualRegister::AddLiveInterval ( Interval interval ) : void