MIR_CondBranch.setTarget(cb, MIR_Branch.getTarget(targetInst));
MIR_CondBranch.setTarget(cb, (OPT_BranchOperand)(MIR_Branch.getTarget(targetInst).copy()));
  private boolean processCondBranch(OPT_IR ir,                                     OPT_Instruction cb,                                     OPT_BasicBlock bb) {    OPT_BasicBlock targetBlock = cb.getBranchTarget();    OPT_Instruction targetLabel = targetBlock.firstInstruction();    // get the first real instruction at the branch target    // NOTE: this instruction is not necessarily in targetBlock,    // iff targetBlock has no real instructions    OPT_Instruction targetInst = firstRealInstructionFollowing(targetLabel);    if (targetInst == null || targetInst == cb) {      return false;    }    boolean endsBlock = cb.nextInstructionInCodeOrder().operator() == BBEND;    if (endsBlock) {      OPT_Instruction nextLabel = firstLabelFollowing(cb);      if (targetLabel == nextLabel) {        // found a conditional branch to the next instruction.  just remove it.        cb.remove();        return true;      }      OPT_Instruction nextI = firstRealInstructionFollowing(nextLabel);      if (nextI != null && MIR_Branch.conforms(nextI)) {        // replicate Goto        cb.insertAfter(nextI.copyWithoutLinks());        bb.recomputeNormalOut(ir); // fix the CFG         return true;      }    }    if (MIR_Branch.conforms(targetInst)) {      // conditional branch to unconditional branch.      // change conditional branch target to latter's target      OPT_Instruction target2 = firstRealInstructionFollowing(targetInst.getBranchTarget().firstInstruction());      if (target2 == targetInst) {        // Avoid an infinite recursion in the following scenario:        // g: if (...) goto L        // ...        // L: goto L        // This happens in VM_GCUtil in some systems due to a while(true) {}         return false;      }      MIR_CondBranch.setTarget(cb, MIR_Branch.getTarget(targetInst));      bb.recomputeNormalOut(ir); // fix the CFG       return true;    }    if (targetBlock.isEmpty()) {      // branch to an empty block.  Change target to the next block.      OPT_BasicBlock nextBlock = targetBlock.getFallThroughBlock();      OPT_BranchOperand newTarget = nextBlock.makeJumpTarget();      MIR_CondBranch.setTarget(cb, newTarget);      bb.recomputeNormalOut(ir); // fix the CFG       return true;    }    if (isFlipCandidate(cb, targetInst)) {      flipConditionalBranch(cb);      bb.recomputeNormalOut(ir); // fix the CFG       return true;    }    return false;  }