execute(inlDec, ir.gc, bb.exceptionHandlers, callSite);
execute(inlDec, ir.gc, bag, callSite);
  public static void execute (OPT_InlineDecision inlDec, OPT_IR ir, 			      OPT_Instruction callSite) {    // Find out where the call site is and isolate it in its own basic block.    OPT_BasicBlock bb =       callSite.getBasicBlock().segregateInstruction(callSite, ir);    OPT_BasicBlock in = bb.prevBasicBlockInCodeOrder();    OPT_BasicBlock out = bb.nextBasicBlockInCodeOrder();    // Clear the sratch object of any register operands being     // passed as parameters.    // BC2IR uses this field for its own purposes, and will be confused     // if the scratch object has been used by someone else and not cleared.    for (int i = 0; i < Call.getNumberOfParams(callSite); i++) {      OPT_Operand arg = Call.getParam(callSite, i);      if (arg instanceof OPT_RegisterOperand) {        ((OPT_RegisterOperand)arg).scratchObject = null;      }    }    // Execute the inlining decision, updating ir.gc's state.    OPT_GenerationContext childgc =       execute(inlDec, ir.gc, bb.exceptionHandlers, callSite);    // Splice the callee into the caller's code order    ir.cfg.removeFromCFGAndCodeOrder(bb);    ir.cfg.breakCodeOrder(in, out);    ir.cfg.linkInCodeOrder(in, childgc.cfg.firstInCodeOrder());    ir.cfg.linkInCodeOrder(childgc.cfg.lastInCodeOrder(), out);    // Splice the callee into the caller's CFG    in.insertOut(childgc.prologue);    if (childgc.epilogue != null) {      childgc.epilogue.insertOut(out);    }  }