< prev index next >

src/hotspot/share/c1/c1_LIRGenerator.cpp

Print this page

@@ -1541,11 +1541,11 @@
 #endif
 
   if (x->needs_null_check() &&
       (needs_patching ||
        MacroAssembler::needs_explicit_null_check(x->offset()))) {
-    if (needs_patching && x->field()->is_q_type()) {
+    if (needs_patching && x->field()->is_flattenable()) {
       // We are storing a field of type "QT;" into holder class H, but H is not yet
       // loaded. (If H had been loaded, then T must also have already been loaded
       // due to the "Q" signature, and needs_patching would be false).
       assert(!x->field()->holder()->is_loaded(), "must be");
       // We don't know the offset of this field. Let's deopt and recompile.

@@ -1869,11 +1869,11 @@
   }
 
   return _barrier_set->resolve(this, decorators, obj);
 }
 
-Value LIRGenerator::q_type_load_field_prolog(LoadField* x, CodeEmitInfo* info) {
+Value LIRGenerator::flattenable_load_field_prolog(LoadField* x, CodeEmitInfo* info) {
   ciField* field = x->field();
   ciInstanceKlass* holder = field->holder();
   Value default_value = NULL;
 
   // Unloaded "QV;" klasses are represented by a ciInstanceKlass

@@ -1882,38 +1882,39 @@
   // Check for edge cases (1), (2) and (3) for getstatic and getfield
   bool deopt = false;
   bool need_default = false;
   if (field->is_static()) {
       // (1) holder is unloaded -- no problem: it will be loaded by patching, and field offset will be determined.
+      // No check needed here.
 
     if (field_type_unloaded) {
       // (2) field type is unloaded -- problem: we don't know what the default value is. Let's deopt.
       //                               FIXME: consider getting the default value in patching code.
       deopt = true;
     } else {
       need_default = true;
     }
 
-      // (3) field is not flattenable -- we don't care: static fields are never flattened.
+      // (3) field is not flattened -- we don't care: static fields are never flattened.
+      // No check needed here.
   } else {
     if (!holder->is_loaded()) {
       // (1) holder is unloaded -- problem: we needed the field offset back in GraphBuilder::access_field()
       //                           FIXME: consider getting field offset in patching code (but only if the field
       //                           type was loaded at compilation time).
       deopt = true;
     } else if (field_type_unloaded) {
-      // (2) field type is unloaded -- problem: we don't whether it's flattened or not. Let's deopt
+      // (2) field type is unloaded -- problem: we don't know whether it's flattened or not. Let's deopt
       deopt = true;
     } else if (!field->is_flattened()) {
-      // (3) field is not flattenable -- need default value in cases of uninitialized field
+      // (3) field is not flattened -- need default value in cases of uninitialized field
       need_default = true;
     }
   }
 
-  assert(!(deopt && need_default), "cannot both be true");
-
   if (deopt) {
+    assert(!need_default, "deopt and need_default cannot both be true");
     assert(x->needs_patching(), "must be");
     assert(info != NULL, "must be");
     CodeStub* stub = new DeoptimizeStub(new CodeEmitInfo(info),
                                         Deoptimization::Reason_unloaded,
                                         Deoptimization::Action_make_not_entrant);

@@ -1972,12 +1973,12 @@
                   x->is_static() ?  "static" : "field", x->printable_bci());
   }
 #endif
 
   Value default_value = NULL;
-  if (x->field()->is_q_type()) {
-    default_value = q_type_load_field_prolog(x, info);
+  if (x->field()->is_flattenable()) {
+    default_value = flattenable_load_field_prolog(x, info);
   }
 
   bool stress_deopt = StressLoopInvariantCodeMotion && info && info->deoptimize_on_exception();
   if (x->needs_null_check() &&
       (needs_patching ||
< prev index next >