void (int insn, @Nullable Subroutine subroutine) { Subroutine oldSubroutine = subroutines[insn]; boolean changes = false; if (!wasQueued[insn]) { wasQueued[insn] = true; changes = true; } if (oldSubroutine == null) { if (subroutine != null) { subroutines[insn] = subroutine.copy(); changes = true; } } else if (subroutine != null) { changes |= oldSubroutine.merge(subroutine); } if (changes && !queued[insn]) { queued[insn] = true; queue[top++] = insn; } }