/// <summary> /// Collect the usage range of each temp register used in the given method body. /// </summary> private static Dictionary <Register, RegisterRange> CollectTempRegisterUsageRanges(IEnumerable <BasicBlock> blocks) { var ranges = new Dictionary <Register, RegisterRange>(); foreach (var block in blocks) { foreach (var inst in block.Instructions) { foreach (var reg in inst.Registers) { if (reg.Category == RCategory.Temp) { RegisterRange range; if (ranges.TryGetValue(reg, out range)) { // Extend range range.Range = new InstructionRange(range.Range.First, inst); range.InstructionCount++; } else { // Create range range = new RegisterRange(reg, new InstructionRange(inst, inst)) { InstructionCount = 1 }; ranges.Add(reg, range); } range.AddBlock(block); } } } } return(ranges); }
/// <summary> /// Collect the usage range of each temp register used in the given method body. /// </summary> private static Dictionary<Register, RegisterRange> CollectTempRegisterUsageRanges(IEnumerable<BasicBlock> blocks) { var ranges = new Dictionary<Register, RegisterRange>(); foreach (var block in blocks) { foreach (var inst in block.Instructions) { foreach (var reg in inst.Registers) { if (reg.Category == RCategory.Temp) { RegisterRange range; if (ranges.TryGetValue(reg, out range)) { // Extend range range.Range = new InstructionRange(range.Range.First, inst); range.InstructionCount++; } else { // Create range range = new RegisterRange(reg, new InstructionRange(inst, inst)) { InstructionCount = 1 }; ranges.Add(reg, range); } range.AddBlock(block); } } } } return ranges; }