IfCmp2.getVal1(cb), IfCmp2.getCond1(cb),
IfCmp2.getVal2(cb), IfCmp2.getCond1(cb),
  private boolean processTwoTargetConditionalBranch(OPT_IR ir, 						    OPT_Instruction cb, 						    OPT_BasicBlock bb) {    // First condition/target    OPT_Instruction target1Label = IfCmp2.getTarget1(cb).target;     OPT_Instruction target1Inst = firstRealInstructionFollowing(target1Label);    OPT_Instruction nextLabel = firstLabelFollowing(cb);    boolean endsBlock = cb.getNext().operator() == BBEND;    if (target1Inst != null && target1Inst != cb) {      if (Goto.conforms(target1Inst)) {	// conditional branch to unconditional branch.	// change conditional branch target to latter's target	IfCmp2.setTarget1(cb, Goto.getTarget(target1Inst));	bb.recomputeNormalOut(ir); // fix CFG	return true;      }      OPT_BasicBlock target1Block = target1Label.getBasicBlock();      if (target1Block.isEmpty()) {	// branch to an empty block.  Change target to the next block.	OPT_BasicBlock nextBlock = target1Block.getFallThroughBlock();	IfCmp2.setTarget1(cb, nextBlock.makeJumpTarget());	bb.recomputeNormalOut(ir); // fix the CFG 	return true;      }    }          // Second condition/target    OPT_Instruction target2Label = IfCmp2.getTarget2(cb).target;     OPT_Instruction target2Inst = firstRealInstructionFollowing(target2Label);    if (target2Inst != null && target2Inst != cb) {      if (Goto.conforms(target2Inst)) {	// conditional branch to unconditional branch.	// change conditional branch target to latter's target	IfCmp2.setTarget2(cb, Goto.getTarget(target2Inst));	bb.recomputeNormalOut(ir); // fix CFG	return true;      }      if ((target2Label == nextLabel) && endsBlock) {	// found a conditional branch to the next instruction. Reduce to IfCmp	if (VM.VerifyAssertions) VM.assert(cb.operator() == INT_IFCMP2);	IfCmp.mutate(cb, INT_IFCMP,		     IfCmp2.getGuardResult(cb), IfCmp2.getVal1(cb),		     IfCmp2.getVal1(cb), IfCmp2.getCond1(cb), 		     IfCmp2.getTarget1(cb), IfCmp2.getBranchProfile1(cb));	return true;      }      OPT_BasicBlock target2Block = target2Label.getBasicBlock();      if (target2Block.isEmpty()) {	// branch to an empty block.  Change target to the next block.	OPT_BasicBlock nextBlock = target2Block.getFallThroughBlock();	IfCmp2.setTarget2(cb, nextBlock.makeJumpTarget()); 	bb.recomputeNormalOut(ir); // fix the CFG 	return true;      }    }    // if fall through to a goto; replicate the goto    if (endsBlock) {      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;      }    }    return false;  }