< prev index next >
src/share/vm/opto/escape.cpp
Print this page
@@ -2014,12 +2014,14 @@
bt = field->layout_type();
} else {
// Check for unsafe oop field access
for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) {
int opcode = n->fast_out(i)->Opcode();
- if (opcode == Op_StoreP || opcode == Op_LoadP ||
- opcode == Op_StoreN || opcode == Op_LoadN) {
+ if (opcode == Op_StoreP || opcode == Op_StoreN ||
+ opcode == Op_LoadP || opcode == Op_LoadN ||
+ opcode == Op_GetAndSetP || opcode == Op_GetAndSetN ||
+ opcode == Op_CompareAndSwapP || opcode == Op_CompareAndSwapN) {
bt = T_OBJECT;
(*unsafe) = true;
break;
}
}
@@ -2035,12 +2037,14 @@
}
} else if (adr_type->isa_rawptr() || adr_type->isa_klassptr()) {
// Allocation initialization, ThreadLocal field access, unsafe access
for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) {
int opcode = n->fast_out(i)->Opcode();
- if (opcode == Op_StoreP || opcode == Op_LoadP ||
- opcode == Op_StoreN || opcode == Op_LoadN) {
+ if (opcode == Op_StoreP || opcode == Op_StoreN ||
+ opcode == Op_LoadP || opcode == Op_LoadN ||
+ opcode == Op_GetAndSetP || opcode == Op_GetAndSetN ||
+ opcode == Op_CompareAndSwapP || opcode == Op_CompareAndSwapN) {
bt = T_OBJECT;
break;
}
}
}
< prev index next >