mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-21 08:49:39 +01:00
8229416: Shenandoah: Demote or remove ShenandoahOptimize*Final optimizations
Reviewed-by: rkennke
This commit is contained in:
@@ -179,10 +179,6 @@ bool ShenandoahBarrierC2Support::verify_helper(Node* in, Node_Stack& phis, Vecto
|
|||||||
if (trace) {tty->print_cr("NULL");}
|
if (trace) {tty->print_cr("NULL");}
|
||||||
} else if (!in->bottom_type()->make_ptr()->make_oopptr()) {
|
} else if (!in->bottom_type()->make_ptr()->make_oopptr()) {
|
||||||
if (trace) {tty->print_cr("Non oop");}
|
if (trace) {tty->print_cr("Non oop");}
|
||||||
} else if (t == ShenandoahLoad && ShenandoahOptimizeStableFinals &&
|
|
||||||
in->bottom_type()->make_ptr()->isa_aryptr() &&
|
|
||||||
in->bottom_type()->make_ptr()->is_aryptr()->is_stable()) {
|
|
||||||
if (trace) {tty->print_cr("Stable array load");}
|
|
||||||
} else {
|
} else {
|
||||||
if (in->is_ConstraintCast()) {
|
if (in->is_ConstraintCast()) {
|
||||||
in = in->in(1);
|
in = in->in(1);
|
||||||
@@ -323,34 +319,8 @@ void ShenandoahBarrierC2Support::verify(RootNode* root) {
|
|||||||
adr_type->is_instptr()->klass()->is_subtype_of(Compile::current()->env()->Reference_klass()) &&
|
adr_type->is_instptr()->klass()->is_subtype_of(Compile::current()->env()->Reference_klass()) &&
|
||||||
adr_type->is_instptr()->offset() == java_lang_ref_Reference::referent_offset) {
|
adr_type->is_instptr()->offset() == java_lang_ref_Reference::referent_offset) {
|
||||||
if (trace) {tty->print_cr("Reference.get()");}
|
if (trace) {tty->print_cr("Reference.get()");}
|
||||||
} else {
|
} else if (!verify_helper(n->in(MemNode::Address), phis, visited, ShenandoahLoad, trace, barriers_used)) {
|
||||||
bool verify = true;
|
report_verify_failure("Shenandoah verification: Load should have barriers", n);
|
||||||
if (adr_type->isa_instptr()) {
|
|
||||||
const TypeInstPtr* tinst = adr_type->is_instptr();
|
|
||||||
ciKlass* k = tinst->klass();
|
|
||||||
assert(k->is_instance_klass(), "");
|
|
||||||
ciInstanceKlass* ik = (ciInstanceKlass*)k;
|
|
||||||
int offset = adr_type->offset();
|
|
||||||
|
|
||||||
if ((ik->debug_final_field_at(offset) && ShenandoahOptimizeInstanceFinals) ||
|
|
||||||
(ik->debug_stable_field_at(offset) && ShenandoahOptimizeStableFinals)) {
|
|
||||||
if (trace) {tty->print_cr("Final/stable");}
|
|
||||||
verify = false;
|
|
||||||
} else if (k == ciEnv::current()->Class_klass() &&
|
|
||||||
tinst->const_oop() != NULL &&
|
|
||||||
tinst->offset() >= (ik->size_helper() * wordSize)) {
|
|
||||||
ciInstanceKlass* k = tinst->const_oop()->as_instance()->java_lang_Class_klass()->as_instance_klass();
|
|
||||||
ciField* field = k->get_field_by_offset(tinst->offset(), true);
|
|
||||||
if ((ShenandoahOptimizeStaticFinals && field->is_final()) ||
|
|
||||||
(ShenandoahOptimizeStableFinals && field->is_stable())) {
|
|
||||||
verify = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (verify && !verify_helper(n->in(MemNode::Address), phis, visited, ShenandoahLoad, trace, barriers_used)) {
|
|
||||||
report_verify_failure("Shenandoah verification: Load should have barriers", n);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (n->is_Store()) {
|
} else if (n->is_Store()) {
|
||||||
@@ -3215,36 +3185,20 @@ ShenandoahLoadReferenceBarrierNode::Strength ShenandoahLoadReferenceBarrierNode:
|
|||||||
ciField* field = alias_type->field();
|
ciField* field = alias_type->field();
|
||||||
bool is_static = field != NULL && field->is_static();
|
bool is_static = field != NULL && field->is_static();
|
||||||
bool is_final = field != NULL && field->is_final();
|
bool is_final = field != NULL && field->is_final();
|
||||||
bool is_stable = field != NULL && field->is_stable();
|
|
||||||
if (ShenandoahOptimizeStaticFinals && is_static && is_final) {
|
if (ShenandoahOptimizeStaticFinals && is_static && is_final) {
|
||||||
// Leave strength as is.
|
// Leave strength as is.
|
||||||
} else if (ShenandoahOptimizeInstanceFinals && !is_static && is_final) {
|
|
||||||
// Leave strength as is.
|
|
||||||
} else if (ShenandoahOptimizeStableFinals && (is_stable || (adr_type->isa_aryptr() && adr_type->isa_aryptr()->is_stable()))) {
|
|
||||||
// Leave strength as is.
|
|
||||||
} else {
|
} else {
|
||||||
strength = WEAK;
|
strength = WEAK;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Op_AryEq: {
|
case Op_AryEq:
|
||||||
Node* n1 = n->in(2);
|
|
||||||
Node* n2 = n->in(3);
|
|
||||||
if (!ShenandoahOptimizeStableFinals ||
|
|
||||||
!n1->bottom_type()->isa_aryptr() || !n1->bottom_type()->isa_aryptr()->is_stable() ||
|
|
||||||
!n2->bottom_type()->isa_aryptr() || !n2->bottom_type()->isa_aryptr()->is_stable()) {
|
|
||||||
strength = WEAK;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Op_StrEquals:
|
case Op_StrEquals:
|
||||||
case Op_StrComp:
|
case Op_StrComp:
|
||||||
case Op_StrIndexOf:
|
case Op_StrIndexOf:
|
||||||
case Op_StrIndexOfChar:
|
case Op_StrIndexOfChar:
|
||||||
case Op_HasNegatives:
|
case Op_HasNegatives:
|
||||||
if (!ShenandoahOptimizeStableFinals) {
|
strength = WEAK;
|
||||||
strength = WEAK;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case Op_Conv2B:
|
case Op_Conv2B:
|
||||||
case Op_LoadRange:
|
case Op_LoadRange:
|
||||||
|
|||||||
@@ -378,21 +378,11 @@
|
|||||||
" 1 - parallel iterator;" \
|
" 1 - parallel iterator;" \
|
||||||
" 2 - parallel iterator with cset filters;") \
|
" 2 - parallel iterator with cset filters;") \
|
||||||
\
|
\
|
||||||
experimental(bool, ShenandoahOptimizeStaticFinals, true, \
|
diagnostic(bool, ShenandoahOptimizeStaticFinals, true, \
|
||||||
"Optimize barriers on static final fields. " \
|
"Optimize barriers on static final fields. " \
|
||||||
"Turn it off for maximum compatibility with reflection or JNI " \
|
"Turn it off for maximum compatibility with reflection or JNI " \
|
||||||
"code that manipulates final fields.") \
|
"code that manipulates final fields.") \
|
||||||
\
|
\
|
||||||
experimental(bool, ShenandoahOptimizeInstanceFinals, false, \
|
|
||||||
"Optimize barriers on final instance fields." \
|
|
||||||
"Turn it off for maximum compatibility with reflection or JNI " \
|
|
||||||
"code that manipulates final fields.") \
|
|
||||||
\
|
|
||||||
experimental(bool, ShenandoahOptimizeStableFinals, false, \
|
|
||||||
"Optimize barriers on stable fields." \
|
|
||||||
"Turn it off for maximum compatibility with reflection or JNI " \
|
|
||||||
"code that manipulates final fields.") \
|
|
||||||
\
|
|
||||||
experimental(bool, ShenandoahCommonGCStateLoads, false, \
|
experimental(bool, ShenandoahCommonGCStateLoads, false, \
|
||||||
"Enable commonming for GC state loads in generated code.") \
|
"Enable commonming for GC state loads in generated code.") \
|
||||||
\
|
\
|
||||||
|
|||||||
Reference in New Issue
Block a user