private void removePhiFunctions() {
    ArrayList<SsaBasicBlock> blocks = ssaMeth.getBlocks();

    for (SsaBasicBlock block : blocks) {
      // Add moves in all the pred blocks for each phi insn.
      block.forEachPhiInsn(new PhiVisitor(blocks));

      // Delete the phi insns.
      block.removeAllPhiInsns();
    }

    /*
     * After all move insns have been added, sort them so they don't
     * destructively interfere.
     */
    for (SsaBasicBlock block : blocks) {
      block.scheduleMovesFromPhis();
    }
  }
See Appel 19.6. To remove the phi instructions in an edge-split SSA representation we know we
can always insert a move in a predecessor block.
android/android_framework/dex-maker/src/main/java/com/android/dx/ssa/back/SsaToRop.java