RFR: 8261235: C1 compilation fails with assert(res->vreg_number() == index) failed: conversion check

Christian Hagedorn chagedorn at openjdk.java.net
Mon Feb 15 09:57:40 UTC 2021


On Fri, 12 Feb 2021 17:15:01 GMT, Eirik Bjorsnos <github.com+300291+eirbjo at openjdk.org> wrote:

>> The assertion is hit because we run out of virtual registers in the linear scan in C1 and do not handle it. I fixed it by applying the same bailout as in `LIRGenerator::new_register()`. 
>> 
>> There is also a second issue that `LIR_OprDesc::vreg_max` is too big. It is only used in this bailout code. `OprBits::vreg_max` is defined over `OprBits::data_bits` which uses `OprBits::non_data_bits`. But `OprBits::non_data_bits` does not consider `OprBits::pointer_bits` which results in a too large value for `LIR_OprDesc::vreg_max` and the assertion is hit because we don't bail out, yet. This needs to be fixed as well.
>> 
>> Thanks,
>> Christian
>
> I tested this branch on my reproducer and it works like a charm:
> 
>     776  302       3       org.jaxen.saxpath.base.Verifier::isXMLLetter (6130 bytes)
>     [...]
>     compilation bailout: out of virtual registers in linear scan
>     4717  302       3       org.jaxen.saxpath.base.Verifier::isXMLLetter (6130 bytes)   COMPILE SKIPPED: out of virtual registers in linear scan (retry at different tier)
>     4718  334       4       org.jaxen.saxpath.base.Verifier::isXMLLetter (6130 bytes)
> 
> Is it expected that the bailout is logged twice?
> 
> First, a log line says: "compilation bailout: out of virtual registers in linear scan", then at the end of the next line: "COMPILE SKIPPED: out of virtual registers in linear scan (retry at different tier)" ?

Thanks for verifying it!

> Is it expected that the bailout is logged twice?
> 
> First, a log line says: "compilation bailout: out of virtual registers in linear scan", then at the end of the next line: "COMPILE SKIPPED: out of virtual registers in linear scan (retry at different tier)" ?

Yes, that is expected. We first log the bailout alone here:
https://github.com/openjdk/jdk/blob/3882fda83bebf4a8c8100fd59c37f04610491ce7/src/hotspot/share/c1/c1_Compilation.cpp#L620-L627

And then later, we log the entire failed task with the failure reason (in this case the bailout) here:
https://github.com/openjdk/jdk/blob/3882fda83bebf4a8c8100fd59c37f04610491ce7/src/hotspot/share/compiler/compileBroker.cpp#L2347-L2352

-------------

PR: https://git.openjdk.java.net/jdk/pull/2543


More information about the hotspot-compiler-dev mailing list