OPT_AvExCache cache = new OPT_AvExCache();
AvExCache cache = new AvExCache();
  private void optimizeBasicBlock(OPT_IR ir, OPT_BasicBlock bb, 				  OPT_Options options) {    OPT_AvExCache cache = new OPT_AvExCache();    // iterate over all instructions in the basic block    for (OPT_Instruction inst = bb.firstRealInstruction(), 	   sentinel = bb.lastInstruction(), 	   nextInstr = null; 	 inst != sentinel; 	 inst = nextInstr) {      nextInstr = inst.nextInstructionInCodeOrder(); // cache before we                                                      // mutate prev/next links      // 1. try and replace this instruction according to      // available expressions in the cache, and update cache      // accordingly.      if (options.LOCAL_SCALAR_REPLACEMENT) {        if (isLoadInstruction(inst)) {          loadHelper(ir, cache, inst);        } else if (isStoreInstruction(inst)) {          storeHelper(cache, inst);        }      }      if (options.LOCAL_CSE) {        if (isExpression(inst)) {          expressionHelper(ir, cache, inst);	}      }      if (options.LOCAL_CHECK) {        if (isCheck(inst)) {          checkHelper(ir, cache, inst);        } else if (isTypeCheck(inst)) {	  typeCheckHelper(ir, cache, inst);	}      }      // 2. update the cache according to which expressions this      // instruction kills      cache.eliminate(inst, options);      if (options.LOCAL_SCALAR_REPLACEMENT) {        // CALL instructions and synchronizations KILL all memory        // locations!        if (Call.conforms(inst) || isSynchronizing(inst)            || inst.isDynamicLinkingPoint()) {          cache.invalidateAllLoads();        }      }    }  }