public void IsNotEmptyTest()
        {
            var queue = new SimpleKeyPriorityQueue<int>();
            queue.Enqueue(1, 1);

            Assert.False(queue.IsEmpty);
        }
Beispiel #2
0
        public void IsNotEmptyTest()
        {
            var queue = new SimpleKeyPriorityQueue <int>();

            queue.Enqueue(1, 1);

            Assert.False(queue.IsEmpty);
        }
        public void EnqueueDequeueTest()
        {
            var queue = new SimpleKeyPriorityQueue<int>();
            queue.Enqueue(21, 21);
            queue.Enqueue(100, 100);
            queue.Enqueue(3, 3);

            Assert.Equal(100, queue.Dequeue());
            Assert.Equal(21, queue.Dequeue());
            Assert.Equal(3, queue.Dequeue());
        }
Beispiel #4
0
        public void EnqueueDequeueTest()
        {
            var queue = new SimpleKeyPriorityQueue <int>();

            queue.Enqueue(21, 21);
            queue.Enqueue(100, 100);
            queue.Enqueue(3, 3);

            Assert.Equal(100, queue.Dequeue());
            Assert.Equal(21, queue.Dequeue());
            Assert.Equal(3, queue.Dequeue());
        }
        public void IsEmptyTest()
        {
            var queue = new SimpleKeyPriorityQueue<int>();

            Assert.True(queue.IsEmpty);
        }
Beispiel #6
0
        public void IsEmptyTest()
        {
            var queue = new SimpleKeyPriorityQueue <int>();

            Assert.True(queue.IsEmpty);
        }
        public GreedyRegisterAllocator(BasicBlocks basicBlocks, VirtualRegisters compilerVirtualRegisters, InstructionSet instructionSet, StackLayout stackLayout, BaseArchitecture architecture, CompilerTrace trace)
        {
            this.trace = trace;

            this.basicBlocks = basicBlocks;
            this.instructionSet = instructionSet;
            this.stackLayout = stackLayout;
            this.architecture = architecture;

            this.virtualRegisterCount = compilerVirtualRegisters.Count;
            this.physicalRegisterCount = architecture.RegisterSet.Length;
            this.registerCount = virtualRegisterCount + physicalRegisterCount;

            this.liveIntervalTracks = new List<LiveIntervalTrack>(physicalRegisterCount);
            this.virtualRegisters = new List<VirtualRegister>(registerCount);
            this.extendedBlocks = new List<ExtendedBlock>(basicBlocks.Count);

            stackFrameRegister = architecture.StackFrameRegister;
            stackPointerRegister = architecture.StackPointerRegister;
            programCounter = architecture.ProgramCounter;

            // Setup extended physical registers
            foreach (var physicalRegister in architecture.RegisterSet)
            {
                Debug.Assert(physicalRegister.Index == virtualRegisters.Count);
                Debug.Assert(physicalRegister.Index == liveIntervalTracks.Count);

                bool reserved = (physicalRegister == stackFrameRegister
                    || physicalRegister == stackPointerRegister
                    || (programCounter != null && physicalRegister == programCounter));

                this.virtualRegisters.Add(new VirtualRegister(physicalRegister, reserved));
                this.liveIntervalTracks.Add(new LiveIntervalTrack(physicalRegister, reserved));
            }

            // Setup extended virtual registers
            foreach (var virtualRegister in compilerVirtualRegisters)
            {
                Debug.Assert(virtualRegister.Index == virtualRegisters.Count - physicalRegisterCount + 1);

                this.virtualRegisters.Add(new VirtualRegister(virtualRegister));
            }

            priorityQueue = new SimpleKeyPriorityQueue<LiveInterval>();
            spilledIntervals = new List<LiveInterval>();

            callSlots = new List<SlotIndex>();

            moveHints = new Dictionary<SlotIndex, MoveHint>();

            Start();
        }