if (loc == null || loc.isFieldAccess() && loc.getField().isVolatile()){
if (loc == null || loc.isFieldAccess() && (!loc.getField().isLoaded() || loc.getField().isVolatile())) {
  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.isFieldAccess() && loc.getField().isVolatile()){	  //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;  }