mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-18 01:54:47 +02:00
8261235: C1 compilation fails with assert(res->vreg_number() == index) failed: conversion check
Reviewed-by: thartmann, kvn
This commit is contained in:
parent
a9308705ff
commit
8418285530
6 changed files with 4150 additions and 15 deletions
|
@ -1049,20 +1049,21 @@ void LIRGenerator::move_to_phi(ValueStack* cur_state) {
|
|||
|
||||
|
||||
LIR_Opr LIRGenerator::new_register(BasicType type) {
|
||||
int vreg = _virtual_register_number;
|
||||
// add a little fudge factor for the bailout, since the bailout is
|
||||
// only checked periodically. This gives a few extra registers to
|
||||
// hand out before we really run out, which helps us keep from
|
||||
// tripping over assertions.
|
||||
if (vreg + 20 >= LIR_OprDesc::vreg_max) {
|
||||
bailout("out of virtual registers");
|
||||
if (vreg + 2 >= LIR_OprDesc::vreg_max) {
|
||||
// wrap it around
|
||||
int vreg_num = _virtual_register_number;
|
||||
// Add a little fudge factor for the bailout since the bailout is only checked periodically. This allows us to hand out
|
||||
// a few extra registers before we really run out which helps to avoid to trip over assertions.
|
||||
if (vreg_num + 20 >= LIR_OprDesc::vreg_max) {
|
||||
bailout("out of virtual registers in LIR generator");
|
||||
if (vreg_num + 2 >= LIR_OprDesc::vreg_max) {
|
||||
// Wrap it around and continue until bailout really happens to avoid hitting assertions.
|
||||
_virtual_register_number = LIR_OprDesc::vreg_base;
|
||||
vreg_num = LIR_OprDesc::vreg_base;
|
||||
}
|
||||
}
|
||||
_virtual_register_number += 1;
|
||||
return LIR_OprFact::virtual_register(vreg, type);
|
||||
LIR_Opr vreg = LIR_OprFact::virtual_register(vreg_num, type);
|
||||
assert(vreg != LIR_OprFact::illegal(), "ran out of virtual registers");
|
||||
return vreg;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue