exclusive end doesn't prevent register from being used by another interval ranges within one interval never have rangesi.to == ranges[i+1].from When split prev range's end get's offset by 1 so [0; 10) becomes [0; 3) [4; 10) When looking if instruction is covered by range the end position is inclusive Splits must always occur on odd positions We forbid creation of [10; 10) ranges invariant: from < to [from; to)