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)  {    for (int i = Phi.getNumberOfValues (inst) - 1;  i >= 0;  --i) {      if (i == xidx) continue;      OPT_Instruction y = definingInstruction (Phi.getValue (inst, i));      while (y != inst) {	//VM.sysWrite (" y: "+y+"\n");	if (y.isImplicitStore() || y.isPEI() || !LocationCarrier.conforms (y))	  return CL_COMPLEX;		// 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;	}	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]);	}      }    }    return CL_LOADS_ONLY;  }