protected virtual void CloneEdgesForValue( ValueNode val, InstructionGraph clone, IDictionary instructionMap, IDictionary valueMap, IDictionary valueProcessed) { if (!(bool) valueProcessed[val] && !val.IsInputValue()) { valueProcessed[val] = true; ValueNode cloneResValue = (ValueNode) valueMap[val]; InstructionNode cloneInstr = (InstructionNode) instructionMap[val.ProducingInstruction]; clone.AddEdge(cloneInstr, cloneResValue); foreach (ValueNode opVal in val.ProducingInstruction.OperandValues) { ValueNode cloneOpVal = (ValueNode) valueMap[opVal]; clone.AddEdge(cloneOpVal, cloneInstr); CloneEdgesForValue(opVal, clone, instructionMap, valueMap, valueProcessed); } } }