private final static void createCheck(OPT_BasicBlock checkBB,
private final void createCheck(OPT_BasicBlock checkBB,
  private final static void createCheck(OPT_BasicBlock checkBB,                                 OPT_BasicBlock noInstBB,                                OPT_BasicBlock instBB,                                boolean fallthroughToInstBB,                                OPT_IR ir) {    appendLoad(checkBB,ir);    // Depending on where you fallthrough, set the condition correctly    OPT_ConditionOperand cond = null;    OPT_BranchOperand target = null;    OPT_BranchProfileOperand profileOperand = null;    if (fallthroughToInstBB) {      // The instrumented basic block is the fallthrough of checkBB,      // so make the branch jump to the non-instrumented block.      cond = OPT_ConditionOperand.GREATER();      target = noInstBB.makeJumpTarget();      profileOperand = new OPT_BranchProfileOperand(1.0f); // Taken frequently    }    else {      // The non-instrumented basic block is the fallthrough of checkBB,      // so make the branch jump to the instrumented block.      cond = OPT_ConditionOperand.LESS_EQUAL();      target = instBB.makeJumpTarget();      profileOperand = new OPT_BranchProfileOperand(0.0f); // Taken infrequently    }    OPT_RegisterOperand guard = ir.regpool.makeTempValidation();    checkBB.appendInstruction(IfCmp.create(INT_IFCMP,                                            guard,                                           cbsReg.copyRO(),                                           new OPT_IntConstantOperand(0),                                           cond,                                           target,                                           profileOperand));    checkBB.recomputeNormalOut(ir);    // Insert the decrement and store in the block that is the    // successor of the check    prependStore(noInstBB,ir);    prependDecrement(noInstBB,ir);        // Insert a counter reset in the duplicated block.    prependCounterReset(instBB,ir);        }