< prev index next >

src/hotspot/share/ci/ciMethodData.cpp

Print this page
*** 329,16 ***
        TypeStackSlotEntries::set_type(i, translate_klass(k));
      }
    }
  }
  
! void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {
    intptr_t k = ret->type();
    Klass* klass = (Klass*)klass_part(k);
    if (klass != nullptr && !klass->is_loader_alive()) {
      // With concurrent class unloading, the MDO could have stale metadata; override it
!     set_type(ReturnTypeEntry::with_status((Klass*)nullptr, k));
    } else {
      set_type(translate_klass(k));
    }
  }
  
--- 329,16 ---
        TypeStackSlotEntries::set_type(i, translate_klass(k));
      }
    }
  }
  
! void ciSingleTypeEntry::translate_type_data_from(const SingleTypeEntry* ret) {
    intptr_t k = ret->type();
    Klass* klass = (Klass*)klass_part(k);
    if (klass != nullptr && !klass->is_loader_alive()) {
      // With concurrent class unloading, the MDO could have stale metadata; override it
!     set_type(SingleTypeEntry::with_status((Klass*)nullptr, k));
    } else {
      set_type(translate_klass(k));
    }
  }
  

*** 385,10 ***
--- 385,16 ---
      return new ciCallTypeData(data_layout);
    case DataLayout::virtual_call_type_data_tag:
      return new ciVirtualCallTypeData(data_layout);
    case DataLayout::parameters_type_data_tag:
      return new ciParametersTypeData(data_layout);
+   case DataLayout::array_store_data_tag:
+     return new ciArrayStoreData(data_layout);
+   case DataLayout::array_load_data_tag:
+     return new ciArrayLoadData(data_layout);
+   case DataLayout::acmp_data_tag:
+     return new ciACmpData(data_layout);
    };
  }
  
  // Iteration over data.
  ciProfileData* ciMethodData::next_data(ciProfileData* current) {

*** 802,16 ***
          dump_replay_data_receiver_type_helper<ciVirtualCallData>(out, round, count, vdata);
          if (pdata->is_VirtualCallTypeData()) {
            ciVirtualCallTypeData* call_type_data = (ciVirtualCallTypeData*)pdata;
            dump_replay_data_call_type_helper<ciVirtualCallTypeData>(out, round, count, call_type_data);
          }
        } else if (pdata->is_ReceiverTypeData()) {
          ciReceiverTypeData* vdata = (ciReceiverTypeData*)pdata;
          dump_replay_data_receiver_type_helper<ciReceiverTypeData>(out, round, count, vdata);
-       } else if (pdata->is_CallTypeData()) {
-           ciCallTypeData* call_type_data = (ciCallTypeData*)pdata;
-           dump_replay_data_call_type_helper<ciCallTypeData>(out, round, count, call_type_data);
        }
      }
      if (parameters != nullptr) {
        for (int i = 0; i < parameters->number_of_parameters(); i++) {
          dump_replay_data_type_helper(out, round, count, parameters, ParametersTypeData::type_offset(i), parameters->valid_parameter_type(i));
--- 808,33 ---
          dump_replay_data_receiver_type_helper<ciVirtualCallData>(out, round, count, vdata);
          if (pdata->is_VirtualCallTypeData()) {
            ciVirtualCallTypeData* call_type_data = (ciVirtualCallTypeData*)pdata;
            dump_replay_data_call_type_helper<ciVirtualCallTypeData>(out, round, count, call_type_data);
          }
+       } else if (pdata->is_CallTypeData()) {
+         ciCallTypeData* call_type_data = (ciCallTypeData*)pdata;
+         dump_replay_data_call_type_helper<ciCallTypeData>(out, round, count, call_type_data);
+       } else if (pdata->is_ArrayStoreData()) {
+         ciArrayStoreData* array_store_data = (ciArrayStoreData*)pdata;
+         dump_replay_data_type_helper(out, round, count, array_store_data, ciArrayStoreData::array_offset(),
+                                      array_store_data->array()->valid_type());
+         dump_replay_data_receiver_type_helper<ciArrayStoreData>(out, round, count, array_store_data);
+       } else if (pdata->is_ArrayLoadData()) {
+         ciArrayLoadData* array_load_data = (ciArrayLoadData*)pdata;
+         dump_replay_data_type_helper(out, round, count, array_load_data, ciArrayLoadData::array_offset(),
+                                      array_load_data->array()->valid_type());
+         dump_replay_data_type_helper(out, round, count, array_load_data, ciArrayLoadData::element_offset(),
+                                      array_load_data->element()->valid_type());
+       } else if (pdata->is_ACmpData()) {
+         ciACmpData* acmp_data = (ciACmpData*)pdata;
+         dump_replay_data_type_helper(out, round, count, acmp_data, ciACmpData::left_offset(),
+                                      acmp_data->left()->valid_type());
+         dump_replay_data_type_helper(out, round, count, acmp_data, ciACmpData::right_offset(),
+                                      acmp_data->right()->valid_type());
        } else if (pdata->is_ReceiverTypeData()) {
          ciReceiverTypeData* vdata = (ciReceiverTypeData*)pdata;
          dump_replay_data_receiver_type_helper<ciReceiverTypeData>(out, round, count, vdata);
        }
      }
      if (parameters != nullptr) {
        for (int i = 0; i < parameters->number_of_parameters(); i++) {
          dump_replay_data_type_helper(out, round, count, parameters, ParametersTypeData::type_offset(i), parameters->valid_parameter_type(i));

*** 890,11 ***
      print_ciklass(st, type(i));
      st->cr();
    }
  }
  
! void ciReturnTypeEntry::print_data_on(outputStream* st) const {
    _pd->tab(st);
    st->print("ret ");
    print_ciklass(st, type());
    st->cr();
  }
--- 913,11 ---
      print_ciklass(st, type(i));
      st->cr();
    }
  }
  
! void ciSingleTypeEntry::print_data_on(outputStream* st) const {
    _pd->tab(st);
    st->print("ret ");
    print_ciklass(st, type());
    st->cr();
  }

*** 963,6 ***
--- 986,37 ---
    st->print_cr("ciSpeculativeTrapData");
    tab(st);
    method()->print_short_name(st);
    st->cr();
  }
+ 
+ void ciArrayStoreData::print_data_on(outputStream* st, const char* extra) const {
+   print_shared(st, "ciArrayStoreData", extra);
+   tab(st, true);
+   st->print("array");
+   array()->print_data_on(st);
+   tab(st, true);
+   st->print("element");
+   rtd_super()->print_receiver_data_on(st);
+ }
+ 
+ void ciArrayLoadData::print_data_on(outputStream* st, const char* extra) const {
+   print_shared(st, "ciArrayLoadData", extra);
+   tab(st, true);
+   st->print("array");
+   array()->print_data_on(st);
+   tab(st, true);
+   st->print("element");
+   element()->print_data_on(st);
+ }
+ 
+ void ciACmpData::print_data_on(outputStream* st, const char* extra) const {
+   BranchData::print_data_on(st, extra);
+   st->cr();
+   tab(st, true);
+   st->print("left");
+   left()->print_data_on(st);
+   tab(st, true);
+   st->print("right");
+   right()->print_data_on(st);
+ }
  #endif
< prev index next >