return state;
return _state;
  private int checkLoop (OPT_Instruction inst, OPT_HeapOperand hop, int xidx,                         OPT_BasicBlock block)  {    HashSet seen = new HashSet();    OPT_Queue workList = new OPT_Queue();    int state = CL_NONE;    int instUses = 0;        seen.add (inst);    for (int i = Phi.getNumberOfValues (inst) - 1;  i >= 0;  --i) {      if (i == xidx) continue;      OPT_Instruction y = definingInstruction (Phi.getValue (inst, i));      if (y == inst) instUses++;      if (!(seen.contains (y))) {        seen.add (y);        workList.insert (y);      }    }        while (!(workList.isEmpty())) {      OPT_Instruction y = (OPT_Instruction) workList.remove();      if (Phi.conforms (y)) {        for (int i = Phi.getNumberOfValues (y) - 1;  i >= 0;  --i) {          OPT_Instruction z = definingInstruction (Phi.getValue (y, i));          if (z == inst) instUses++;          if (!(seen.contains (z))) {            seen.add (z);            workList.insert (z);          }        }      } else if ((  y.isPEI())                 || !LocationCarrier.conforms (y)                 || y.operator.isAcquire()                 || y.operator.isRelease()) {        return CL_COMPLEX;      } else {        // check for access to volatile field        OPT_LocationOperand loc = LocationCarrier.getLocation (y);        if (loc == null || loc.mayBeVolatile()) {          //VM.sysWrite (" no loc or volatile field\n");                    return CL_COMPLEX;        }        if (y.isImplicitStore()) {          // only accept loop-invariant stores          // conservatively estimate loop-invariance by header domination          if (!inVariantLocation (y, block)) return CL_COMPLEX;          state |= CL_STORES_ONLY;        } else {          state |= CL_LOADS_ONLY;        }        OPT_HeapOperand[] ops = ssad.getHeapUses (y);        for (int j = 0;  j < ops.length;  ++j) {          if (ops[j].value.type == ssad.exceptionState) continue;          if (ops[j].value.type != hop.value.type) return CL_COMPLEX;          y = definingInstruction (ops[j]);          if (y == inst) instUses++;          if (!(seen.contains (y))) {            seen.add (y);            workList.insert (y);          }        }      }    }    if (state == CL_STORES_ONLY        && ssad.getNumberOfUses (hop.value) != instUses)      return CL_COMPLEX;        return state;  }