import { HIRFunction, Identifier, InstructionId } from "../HIR/HIR";
import DisjointSet from "../Utils/DisjointSet";
export function inferMutableRangesForAlias(
_fn: HIRFunction,
aliases: DisjointSet<Identifier>
): void {
const aliasSets = aliases.buildSets();
for (const aliasSet of aliasSets) {
const mutatingIdentifiers = [...aliasSet].filter(
(id) => id.mutableRange.end - id.mutableRange.start > 1
);
if (mutatingIdentifiers.length > 0) {
let lastMutatingInstructionId = 0;
for (const id of mutatingIdentifiers) {
if (id.mutableRange.end > lastMutatingInstructionId) {
lastMutatingInstructionId = id.mutableRange.end;
}
}
for (const alias of aliasSet) {
if (alias.mutableRange.end < lastMutatingInstructionId) {
alias.mutableRange.end = lastMutatingInstructionId as InstructionId;
}
}
}
}
}