示例#1
0
        public virtual void ComputeAssignableRegisters()
        {
            instructionGraph.AssignableRegisters.Clear();
            Queue registerValues = new Queue();

            foreach (ValueNode val in instructionGraph.GetValueNodes()) {
                if (val is RegisterValueNode)
                    registerValues.Enqueue(val);
            }

            while (registerValues.Count > 0) {

                ValueNode val = (ValueNode) registerValues.Dequeue();
                RegisterSet assignableRegs;

                if (ProgramGraph.PreassignedRegisters[val] != null) {
                    assignableRegs = new RegisterSet();
                    assignableRegs.Add(
                        (Register) ProgramGraph.PreassignedRegisters[val]);

                } else {
                    assignableRegs =
                        ComputeAssignableRegistersForValue(val, registerValues);
                }

                instructionGraph.AssignableRegisters[val] = assignableRegs;
            }
        }