Integrated: 8261235: C1 compilation fails with assert(res->vreg_number() == index) failed: conversion check
Christian Hagedorn
chagedorn at openjdk.java.net
Wed Feb 17 09:03:43 UTC 2021
On Fri, 12 Feb 2021 10:03:25 GMT, Christian Hagedorn <chagedorn 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
This pull request has now been integrated.
Changeset: 84182855
Author: Christian Hagedorn <chagedorn at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/84182855
Stats: 4152 lines in 6 files changed: 4137 ins; 2 del; 13 mod
8261235: C1 compilation fails with assert(res->vreg_number() == index) failed: conversion check
Reviewed-by: thartmann, kvn
-------------
PR: https://git.openjdk.java.net/jdk/pull/2543
More information about the hotspot-compiler-dev
mailing list