src/share/vm/opto/parse3.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8073191-work Sdiff src/share/vm/opto

src/share/vm/opto/parse3.cpp

Print this page




  92     return;
  93   }
  94 
  95   if (!is_field && !field_holder->is_initialized()) {
  96     if (!static_field_ok_in_clinit(field, method())) {
  97       uncommon_trap(Deoptimization::Reason_uninitialized,
  98                     Deoptimization::Action_reinterpret,
  99                     NULL, "!static_field_ok_in_clinit");
 100       return;
 101     }
 102   }
 103 
 104   // Deoptimize on putfield writes to call site target field.
 105   if (!is_get && field->is_call_site_target()) {
 106     uncommon_trap(Deoptimization::Reason_unhandled,
 107                   Deoptimization::Action_reinterpret,
 108                   NULL, "put to call site target field");
 109     return;
 110   }
 111 
 112   assert(field->will_link(method()->holder(), bc()), "getfield: typeflow responsibility");
 113 
 114   // Note:  We do not check for an unloaded field type here any more.
 115 
 116   // Generate code for the object pointer.
 117   Node* obj;
 118   if (is_field) {
 119     int obj_depth = is_get ? 0 : field->type()->size();
 120     obj = null_check(peek(obj_depth));
 121     // Compile-time detect of null-exception?
 122     if (stopped())  return;
 123 
 124 #ifdef ASSERT
 125     const TypeInstPtr *tjp = TypeInstPtr::make(TypePtr::NotNull, iter().get_declared_field_holder());
 126     assert(_gvn.type(obj)->higher_equal(tjp), "cast_up is no longer needed");
 127 #endif
 128 
 129     if (is_get) {
 130       (void) pop();  // pop receiver before getting
 131       do_get_xxx(obj, field, is_field);
 132     } else {




  92     return;
  93   }
  94 
  95   if (!is_field && !field_holder->is_initialized()) {
  96     if (!static_field_ok_in_clinit(field, method())) {
  97       uncommon_trap(Deoptimization::Reason_uninitialized,
  98                     Deoptimization::Action_reinterpret,
  99                     NULL, "!static_field_ok_in_clinit");
 100       return;
 101     }
 102   }
 103 
 104   // Deoptimize on putfield writes to call site target field.
 105   if (!is_get && field->is_call_site_target()) {
 106     uncommon_trap(Deoptimization::Reason_unhandled,
 107                   Deoptimization::Action_reinterpret,
 108                   NULL, "put to call site target field");
 109     return;
 110   }
 111 
 112   assert(field->will_link(method(), bc()), "getfield: typeflow responsibility");
 113 
 114   // Note:  We do not check for an unloaded field type here any more.
 115 
 116   // Generate code for the object pointer.
 117   Node* obj;
 118   if (is_field) {
 119     int obj_depth = is_get ? 0 : field->type()->size();
 120     obj = null_check(peek(obj_depth));
 121     // Compile-time detect of null-exception?
 122     if (stopped())  return;
 123 
 124 #ifdef ASSERT
 125     const TypeInstPtr *tjp = TypeInstPtr::make(TypePtr::NotNull, iter().get_declared_field_holder());
 126     assert(_gvn.type(obj)->higher_equal(tjp), "cast_up is no longer needed");
 127 #endif
 128 
 129     if (is_get) {
 130       (void) pop();  // pop receiver before getting
 131       do_get_xxx(obj, field, is_field);
 132     } else {


src/share/vm/opto/parse3.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File