8163150: SA: CLHSDB printmdo throws an exception with "java.lang.InternalError: missing reason for 22"

Accounted for the new JVMCI related Deoptimization Reasons.

Reviewed-by: dsamersoff, sla
This commit is contained in:
Jini George 2016-08-31 11:47:14 +03:00 committed by Dmitry Samersoff
parent 66706edf15
commit ab538ab5ed
4 changed files with 44 additions and 10 deletions

View File

@ -36,6 +36,7 @@ import sun.jvm.hotspot.utilities.*;
public class MethodData extends Metadata implements MethodDataInterface<Klass,Method> {
static int TypeProfileWidth = 2;
static int BciProfileWidth = 2;
static int MethodProfileWidth = 0;
static int CompileThreshold;
static int Reason_many; // indicates presence of several reasons
@ -142,6 +143,8 @@ public class MethodData extends Metadata implements MethodDataInterface<Klass,Me
TypeProfileWidth = (int)flag.getIntx();
} else if (flag.getName().equals("BciProfileWidth")) {
BciProfileWidth = (int)flag.getIntx();
} else if (flag.getName().equals("MethodProfileWidth")) {
MethodProfileWidth = (int)flag.getIntx();
} else if (flag.getName().equals("CompileThreshold")) {
CompileThreshold = (int)flag.getIntx();
}
@ -154,7 +157,7 @@ public class MethodData extends Metadata implements MethodDataInterface<Klass,Me
parametersTypeDataDi = new CIntField(type.getCIntegerField("_parameters_type_data_di"), 0);
sizeofMethodDataOopDesc = (int)type.getSize();;
sizeofMethodDataOopDesc = (int)type.getSize();
Reason_many = db.lookupIntConstant("Deoptimization::Reason_many").intValue();
Reason_none = db.lookupIntConstant("Deoptimization::Reason_none").intValue();
@ -257,7 +260,7 @@ public class MethodData extends Metadata implements MethodDataInterface<Klass,Me
ParametersTypeData<Klass,Method> parametersTypeData() {
int di = (int)parametersTypeDataDi.getValue(getAddress());
if (di == -1) {
if (di == -1 || di == -2) {
return null;
}
DataLayout dataLayout = new DataLayout(this, di + (int)data.getOffset());

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -38,9 +38,21 @@ import sun.jvm.hotspot.utilities.*;
// that the check is reached, and a series of (Klass, count) pairs
// which are used to store a type profile for the receiver of the check.
public class ReceiverTypeData<K,M> extends CounterData {
static final int receiver0Offset = counterCellCount;
static final int count0Offset = receiver0Offset + 1;
static final int receiverTypeRowCellCount = (count0Offset + 1) - receiver0Offset;
static final int INCLUDE_JVMCI;
static final int nonProfiledCountOffset = counterCellCount;
static final int receiver0Offset;
static final int count0Offset;
static final int receiverTypeRowCellCount;
static {
INCLUDE_JVMCI = VM.getVM().getTypeDataBase().lookupIntConstant("INCLUDE_JVMCI");
if (INCLUDE_JVMCI == 1) {
receiver0Offset = nonProfiledCountOffset + 1;
} else {
receiver0Offset = counterCellCount;
}
count0Offset = receiver0Offset + 1;
receiverTypeRowCellCount = (count0Offset + 1) - receiver0Offset;
}
final MethodDataInterface<K,M> methodData;
public ReceiverTypeData(MethodDataInterface<K,M> methodData, DataLayout layout) {
@ -53,7 +65,11 @@ public class ReceiverTypeData<K,M> extends CounterData {
boolean isReceivertypedata() { return true; }
static int staticCellCount() {
return counterCellCount + MethodData.TypeProfileWidth * receiverTypeRowCellCount;
int cellCount = counterCellCount + MethodData.TypeProfileWidth * receiverTypeRowCellCount;
if (INCLUDE_JVMCI == 1) {
cellCount += 1;
}
return cellCount;
}
public int cellCount() {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -44,7 +44,11 @@ public class VirtualCallData<K,M> extends ReceiverTypeData<K,M> {
static int staticCellCount() {
// At this point we could add more profile state, e.g., for arguments.
// But for now it's the same size as the base record type.
return ReceiverTypeData.staticCellCount();
int cellCount = ReceiverTypeData.staticCellCount();
if (INCLUDE_JVMCI == 1) {
cellCount += MethodData.MethodProfileWidth * receiverTypeRowCellCount;
}
return cellCount;
}
public int cellCount() {

View File

@ -2626,6 +2626,11 @@ typedef CompactHashtable<Symbol*, char> SymbolCompactHashTable;
declare_constant(Deoptimization::Reason_rtm_state_change) \
declare_constant(Deoptimization::Reason_unstable_if) \
declare_constant(Deoptimization::Reason_unstable_fused_if) \
NOT_ZERO(JVMCI_ONLY(declare_constant(Deoptimization::Reason_aliasing))) \
NOT_ZERO(JVMCI_ONLY(declare_constant(Deoptimization::Reason_transfer_to_interpreter))) \
NOT_ZERO(JVMCI_ONLY(declare_constant(Deoptimization::Reason_not_compiled_exception_handler))) \
NOT_ZERO(JVMCI_ONLY(declare_constant(Deoptimization::Reason_unresolved))) \
NOT_ZERO(JVMCI_ONLY(declare_constant(Deoptimization::Reason_jsr_mismatch))) \
declare_constant(Deoptimization::Reason_tenured) \
declare_constant(Deoptimization::Reason_LIMIT) \
declare_constant(Deoptimization::Reason_RECORDED_LIMIT) \
@ -2750,7 +2755,13 @@ typedef CompactHashtable<Symbol*, char> SymbolCompactHashTable;
declare_constant(ConcreteRegisterImpl::number_of_registers) \
declare_preprocessor_constant("REG_COUNT", REG_COUNT) \
declare_c2_preprocessor_constant("SAVED_ON_ENTRY_REG_COUNT", SAVED_ON_ENTRY_REG_COUNT) \
declare_c2_preprocessor_constant("C_SAVED_ON_ENTRY_REG_COUNT", C_SAVED_ON_ENTRY_REG_COUNT)
declare_c2_preprocessor_constant("C_SAVED_ON_ENTRY_REG_COUNT", C_SAVED_ON_ENTRY_REG_COUNT) \
\
/****************/ \
/* JVMCI */ \
/****************/ \
\
declare_preprocessor_constant("INCLUDE_JVMCI", INCLUDE_JVMCI)
//--------------------------------------------------------------------------------