Example #1
0
        private LiveInterval(VirtualRegister virtualRegister, SlotIndex start, SlotIndex end, IList <SlotIndex> uses, IList <SlotIndex> defs)
        {
            LiveRange = new LiveRange(start, end, uses, defs);

            VirtualRegister = virtualRegister;
            SpillValue      = 0;
            Stage           = AllocationStage.Initial;
            ForceSpilled    = false;
            NeverSpill      = false;
        }
Example #2
0
        private LiveInterval(VirtualRegister virtualRegister, SlotIndex start, SlotIndex end, IList<SlotIndex> uses, IList<SlotIndex> defs)
        {
            LiveRange = new LiveRange(start, end, uses, defs);

            VirtualRegister = virtualRegister;
            SpillValue = 0;
            Stage = AllocationStage.Initial;
            ForceSpilled = false;
            NeverSpill = false;
        }
Example #3
0
        public IList <LiveInterval> SplitAt(SlotIndex low, SlotIndex high)
        {
            var liveRanges = LiveRange.SplitAt(low, high);

            var intervals = new List <LiveInterval>(liveRanges.Count);

            foreach (var liveRange in liveRanges)
            {
                intervals.Add(CreateSplit(liveRange));
            }

            return(intervals);
        }
Example #4
0
        public LiveInterval(VirtualRegister virtualRegister, SlotIndex start, SlotIndex end)
        {
            VirtualRegister = virtualRegister;
            Start           = start;
            End             = end;

            LiveRange = new LiveRange(start, end, virtualRegister);

            SpillValue   = 0;
            Stage        = AllocationStage.Initial;
            ForceSpilled = false;
            NeverSpill   = false;

            TooSmallToSplit = IsTooSmallToSplit();
        }
Example #5
0
        public void LiveRangeTest()
        {
            var basicBlocks = CreateBasicBlockInstructionSet();

            GreedyRegisterAllocator.NumberInstructions(basicBlocks);

            var liveRange = new LiveRange(
                new SlotIndex(basicBlocks[0].First),
                new SlotIndex(basicBlocks[0].Last),
                new List<SlotIndex>(),
                new List<SlotIndex>()
            );

            Assert.True(liveRange.IsEmpty);

            //liveRange.SplitAt(basicBlocks.)
        }
Example #6
0
 private LiveInterval CreateSplit(LiveRange liveRange)
 {
     return new LiveInterval(VirtualRegister, liveRange.Start, liveRange.End, LiveRange.UsePositions, LiveRange.DefPositions);
 }
Example #7
0
 private LiveInterval CreateSplit(LiveRange liveRange)
 {
     return(new LiveInterval(VirtualRegister, liveRange.Start, liveRange.End, LiveRange.UsePositions, LiveRange.DefPositions));
 }
Example #8
0
 public override string ToString()
 {
     return(VirtualRegister.ToString() + " between " + LiveRange.ToString());
 }
Example #9
0
 public bool Intersects(LiveInterval other)
 {
     return(LiveRange.Intersects(other.LiveRange));
 }
Example #10
0
 public bool IsAdjacent(LiveInterval other)
 {
     return(LiveRange.IsAdjacent(other.LiveRange));
 }
Example #11
0
 public bool Contains(SlotIndex start)
 {
     return(LiveRange.Contains(start));
 }
Example #12
0
 public bool Intersects(SlotIndex start, SlotIndex end)
 {
     return(LiveRange.Intersects(start, end));
 }
Example #13
0
 public bool IsAdjacent(SlotIndex start, SlotIndex end)
 {
     return(LiveRange.IsAdjacent(start, end));
 }
Example #14
0
 private LiveInterval CreateSplit(LiveRange liveRange)
 {
     return(new LiveInterval(VirtualRegister, liveRange.Start, liveRange.End));
 }