private void makeMovesForPhisInternal() throws Exception {
        if(localPass == currentPass) {
            return;
        }
        localPass = currentPass;
        ArrayList<Phi> phis = new ArrayList<Phi>();
        for(Instruction i : instructions) {
            if(i instanceof Phi) {
                phis.add((Phi)i);
            } else {
                break;
            }
        }

        insertTopoOrderedMoves(phis, 1);
        insertTopoOrderedMoves(phis, 2);

        BasicBlock ch1 = getFallThrough();
        BasicBlock ch2 = getBranchTarget();
        if(ch1 != null) {
            ch1.makeMovesForPhisInternal();
        }
        if(ch2 != null) {
            ch2.makeMovesForPhisInternal();
        }

    }