OPT_BranchOperand top = Goto.getTarget(targetInst); if (top.similar(IfCmp.getTarget(cb))) {      return false; }
  private boolean processConditionalBranch(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.getNext().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 && Goto.conforms(nextI)) {	// replicate Goto	cb.insertAfter(nextI.copyWithoutLinks());	bb.recomputeNormalOut(ir); // fix the CFG 	return true;      }    }    // attempt to generate boolean compare.    if (generateBooleanCompare(ir, bb, cb, targetBlock)) {      // generateBooleanCompare does all necessary CFG fixup.      return true;    }    // attempt to generate a sequence using conditional moves    if (generateCondMove(ir, bb, cb)) {      // generateCondMove does all necessary CFG fixup.      return true;    }    // do we fall through to a block that has only a goto?    OPT_BasicBlock fallThrough = bb.getFallThroughBlock();    if (fallThrough != null) {      OPT_Instruction	fallThroughInstruction = fallThrough.firstRealInstruction();      if ((  fallThroughInstruction != null)	  && Goto.conforms (fallThroughInstruction)) {	// copy goto to bb	bb.appendInstruction (fallThroughInstruction.copyWithoutLinks());	bb.recomputeNormalOut(ir);      }                                                                      }        if (Goto.conforms(targetInst)) {      // conditional branch to unconditional branch.      // change conditional branch target to latter's target      IfCmp.setTarget(cb, Goto.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();      IfCmp.setTarget(cb, nextBlock.makeJumpTarget());      bb.recomputeNormalOut(ir); // fix the CFG       return true;    }    if (isFlipCandidate(cb, targetInst)) {      flipConditionalBranch(cb);      bb.recomputeNormalOut(ir); // fix the CFG       return true;    }    return false;  }