OPT_BranchOperand top = MIR_Branch.getTarget(targetInst); if (top.similar(MIR_Branch.getTarget(g))) {
OPT_Instruction target2 = firstRealInstructionFollowing(targetInst.getBranchTarget().firstInstruction()); if (target2 == targetInst) {
  private boolean processGoto(OPT_IR ir, OPT_Instruction g, OPT_BasicBlock bb){    OPT_BasicBlock targetBlock = g.getBranchTarget();    OPT_Instruction targetLabel = targetBlock.firstInstruction();    // get the first real instruction at the g target    // NOTE: this instruction is not necessarily in targetBlock,    // iff targetBlock has no real instructions    OPT_Instruction targetInst = firstRealInstructionFollowing(targetLabel);    if (targetInst == null || targetInst == g) {      return false;    }    OPT_Instruction nextLabel = firstLabelFollowing(g);    if (targetLabel == nextLabel) {      // found a GOTO to the next instruction.  just remove it.      g.remove();      return true;    }    if (MIR_Branch.conforms(targetInst)) {      // unconditional branch to unconditional branch.      // replace g with goto to targetInst's target      OPT_BranchOperand top = MIR_Branch.getTarget(targetInst);      if (top.similar(MIR_Branch.getTarget(g))) {	// Avoid an infinite recursion in the following bizarre scenario:	// g: goto L	// ...	// L: goto L	// This happens in jByteMark.EmFloatPnt.denormalize() due to a while(true) {} 	return false;      }      MIR_Branch.setTarget(g, top);      bb.recomputeNormalOut(ir); // fix the CFG       return true;    }    if (targetBlock.isEmpty()) {      // GOTO an empty block.  Change target to the next block.      OPT_BasicBlock nextBlock = targetBlock.getFallThroughBlock();      MIR_Branch.setTarget(g, nextBlock.makeJumpTarget());      bb.recomputeNormalOut(ir); // fix the CFG       return true;    }    return false;  }