-
Enhancement
-
Resolution: Fixed
-
P4
-
11, 12, 13
-
b01
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8226491 | 11.0.5-oracle | Martin Doerr | P4 | Resolved | Fixed | b02 |
JDK-8217505 | 11.0.3 | Martin Doerr | P4 | Resolved | Fixed | master |
We have noticed some C1 compilation bailouts when using a JVMTI agent which enables the capability "can_access_local_variables".
This can be observed when using the following VM options (in debug build):
-XX:+PrintBailouts -agentlib:jdwp=transport=dt_socket,address=80,server=y,suspend=n
For example SPEC JVM98 compress:
2073 408 % 3 spec.benchmarks._201_compress.Compressor::compress @ 72 (328 bytes) COMPILE SKIPPED: block join failed (retry at different tier)
We also see several "compilation bailout: block join failed" when running Octane benchmark.
This happens when BlockBegin::try_merge finds out that a Phi function for a local value in a loop has inputs with different types. We are obviously beyond the life range (out of scope) and the local value is invalid at this point. The bailout can be avoided by invalidating corresponding Phi functions. We just need to skip them when processing exception entries later on.
In very rare cases, we may still bail out from LIRGenerator::move_to_phi where we already check for such Phi functions (sinceJDK-8151818).
This can be observed when using the following VM options (in debug build):
-XX:+PrintBailouts -agentlib:jdwp=transport=dt_socket,address=80,server=y,suspend=n
For example SPEC JVM98 compress:
2073 408 % 3 spec.benchmarks._201_compress.Compressor::compress @ 72 (328 bytes) COMPILE SKIPPED: block join failed (retry at different tier)
We also see several "compilation bailout: block join failed" when running Octane benchmark.
This happens when BlockBegin::try_merge finds out that a Phi function for a local value in a loop has inputs with different types. We are obviously beyond the life range (out of scope) and the local value is invalid at this point. The bailout can be avoided by invalidating corresponding Phi functions. We just need to skip them when processing exception entries later on.
In very rare cases, we may still bail out from LIRGenerator::move_to_phi where we already check for such Phi functions (since
- backported by
-
JDK-8217505 C1: Unnecessary "compilation bailout: block join failed" with JVMTI
- Resolved
-
JDK-8226491 C1: Unnecessary "compilation bailout: block join failed" with JVMTI
- Resolved
- relates to
-
JDK-8299658 C1 compilation crashes in LinearScan::resolve_exception_edge
- Resolved
-
JDK-8233820 Test crashed with assert(phi->operand_count() != 1 || phi->subst() != phi) failed: missed trivial simplification
- Resolved