Mosa.Compiler.Framework.RegisterAllocator.GreedyRegisterAllocator.CollectMoveHints C# (CSharp) Method

CollectMoveHints() private method

private CollectMoveHints ( ) : void
return void
        private void CollectMoveHints()
        {
            foreach (var block in BasicBlocks)
            {
                for (var context = new Context(block); !context.IsBlockEndInstruction; context.GotoNext())
                {
                    if (context.IsEmpty || context.IsBlockStartInstruction || context.IsBlockEndInstruction)
                        continue;

                    if (!Architecture.IsInstructionMove(context.Instruction))
                        continue;

                    if (!((context.Result.IsVirtualRegister && context.Operand1.IsVirtualRegister)
                        || (context.Result.IsVirtualRegister && context.Operand1.IsCPURegister)
                        || (context.Result.IsCPURegister && context.Operand1.IsVirtualRegister)))
                        continue;

                    var from = VirtualRegisters[GetIndex(context.Operand1)];
                    var to = VirtualRegisters[GetIndex(context.Result)];

                    var slot = new SlotIndex(context);

                    int factor = (from.IsPhysicalRegister || to.IsPhysicalRegister) ? 150 : 125;

                    int bonus = GetLoopDepth(slot);

                    moveHints.Add(slot, new MoveHint(slot, from, to, bonus));
                }
            }
        }