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; } }