import type { Loc } from "./ir/loc" import type { SSA } from "./ir/ssa" export type LivenessInfo = Array> export const liveness = (block: Array): LivenessInfo => { const info: LivenessInfo = [] for (let i = block.length - 1; i >= 0; --i) { const insn = block[i] const last = info[i + 1] || new Set() info[i] = new Set() if (typeof insn.source !== "number") { info[i].add(insn.source) } if ("source1" in insn && typeof insn.source1 !== "number") { info[i].add(insn.source1) } last.forEach(loc => { if (loc === insn.dest) { return } info[i].add(loc) }) } return info }