RFR: 8220502: Inefficient pre-sizing of PhiResolverState arrays in c1_LIRGenerator

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Mar 13 23:31:16 UTC 2019


Claes, did experiment with reserving more space only for _other_operands(LIR_OprDesc::vreg_base).
It showed that "slight reduction in ::grow calls, but overall more instructions per operation, 
LIRGenerator::move_to_phi".

Based on this I think changes are good. Reviewed.

Thanks,
Vladimir

On 3/13/19 12:22 PM, Claes Redestad wrote:
> On 2019-03-13 19:15, Vladimir Kozlov wrote:
>> By default GrowableArray allocate 2 elements.
>>
>> Looking on C1 code I see that it indeed you can benefit to not resizing by default 
>> _virtual_operands and _vreg_table arrays. But _other_operands may need to be resized to actual 
>> registers numbers I think. But it needs to be verified. Also the code is used only for Phi nodes, 
>> as I understand, that is why it may not have big impact regardless resizing.
> 
> Only used for Phi nodes, yes.
> 
> When instrumenting before/after, we do less than a third as many calls
> to ::grow in create_node than we did from PhiResolverState::reset
> before the patch. Cost of LIRGenerator::move_to_phi, which spans both all ::reset and all 
> ::create_node, drops ~72%.
> 
>>
>> In general I agree with these changes.
> 
> Thanks!
> 
> /Claes


More information about the hotspot-compiler-dev mailing list