Details
Description
Due to missing implementation of far virtual calls from nmethod to aot methods we have huge number of IC misses because of next code in generate_i2c2i_adapters():
// Method might have been compiled since the call site was patched to
// interpreted if that is the case treat it as a miss so we can get
// the call site corrected.
__ cmpptr(Address(rbx, in_bytes(Method::code_offset())), (int32_t)NULL_WORD);
__ jcc(Assembler::equal, skip_fixup);
__ jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub()));
These cause big performance regression with AOT when aot libraries are loaded far from codecache (usually happens on solaris-x86):
Tiered C1/C2 (compiling jvmci: 207 classes):
8.924
9.019
8.697
8.495
8.991
Tiered AOT (compiling jvmci: 207 classes):
43.170
49.613
48.459
42.117
49.339
// Method might have been compiled since the call site was patched to
// interpreted if that is the case treat it as a miss so we can get
// the call site corrected.
__ cmpptr(Address(rbx, in_bytes(Method::code_offset())), (int32_t)NULL_WORD);
__ jcc(Assembler::equal, skip_fixup);
__ jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub()));
These cause big performance regression with AOT when aot libraries are loaded far from codecache (usually happens on solaris-x86):
Tiered C1/C2 (compiling jvmci: 207 classes):
8.924
9.019
8.697
8.495
8.991
Tiered AOT (compiling jvmci: 207 classes):
43.170
49.613
48.459
42.117
49.339