8202565: C1 compilation crashes with "assert(is_double_stack() && !is_virtual()) failed: type check"
Only eagerly resolving the address into a register if the store is precise. Reviewed-by: roland, eosterlund
This commit is contained in:
parent
20324b99d3
commit
29b1984560
@ -87,6 +87,9 @@ LIR_Opr ModRefBarrierSetC1::resolve_address(LIRAccess& access, bool resolve_in_r
|
||||
DecoratorSet decorators = access.decorators();
|
||||
bool needs_patching = (decorators & C1_NEEDS_PATCHING) != 0;
|
||||
bool is_write = (decorators & C1_WRITE_ACCESS) != 0;
|
||||
resolve_in_register |= !needs_patching && is_write && access.is_oop();
|
||||
bool on_array = (decorators & IN_HEAP_ARRAY) != 0;
|
||||
bool on_anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0;
|
||||
bool precise = on_array || on_anonymous;
|
||||
resolve_in_register |= !needs_patching && is_write && access.is_oop() && precise;
|
||||
return BarrierSetC1::resolve_address(access, resolve_in_register);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user