< prev index next >

src/hotspot/share/ci/ciMethodData.cpp

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

@@ -355,10 +355,14 @@
      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_load_store_data_tag:
+     return new ciArrayLoadStoreData(data_layout);
+   case DataLayout::acmp_data_tag:
+     return new ciACmpData(data_layout);
    };
  }
  
  // Iteration over data.
  ciProfileData* ciMethodData::next_data(ciProfileData* current) {

@@ -746,10 +750,23 @@
          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);
+       } else if (pdata->is_ArrayLoadStoreData()) {
+         ciArrayLoadStoreData* array_load_store_data = (ciArrayLoadStoreData*)pdata;
+         dump_replay_data_type_helper(out, round, count, array_load_store_data, ciArrayLoadStoreData::array_offset(),
+                                      array_load_store_data->array()->valid_type());
+         dump_replay_data_type_helper(out, round, count, array_load_store_data, ciArrayLoadStoreData::element_offset(),
+                                      array_load_store_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());
+ 
        }
      }
      if (parameters != NULL) {
        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));

@@ -828,11 +845,11 @@
      print_ciklass(st, type(i));
      st->cr();
    }
  }
  
- void ciReturnTypeEntry::print_data_on(outputStream* st) const {
+ void ciSingleTypeEntry::print_data_on(outputStream* st) const {
    _pd->tab(st);
    st->print("ret ");
    print_ciklass(st, type());
    st->cr();
  }

@@ -901,6 +918,27 @@
    st->print_cr("ciSpeculativeTrapData");
    tab(st);
    method()->print_short_name(st);
    st->cr();
  }
+ 
+ void ciArrayLoadStoreData::print_data_on(outputStream* st, const char* extra) const {
+   print_shared(st, "ciArrayLoadStoreData", 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 >