RFR: JDK-8287061: Support for rematerializing scalar replaced objects participating in allocation merges [v4]

Vladimir Kozlov kvn at openjdk.org
Sat Mar 25 00:11:31 UTC 2023


On Fri, 24 Mar 2023 23:57:07 GMT, Cesar Soares Lucas <cslucas at openjdk.org> wrote:

>> src/hotspot/share/opto/callnode.hpp line 511:
>> 
>>> 509: // by a SafePoint; 2) A scalar replaced object is participating in an allocation
>>> 510: // merge (Phi) and the Phi is referenced by a SafePoint. The schematics of how
>>> 511: // 'spobj' is used in both scenarios are described below.
>> 
>> I am not comfortable with reusing SafePointScalarObjectNode for 2) since it describes totally different information.
>> I think it should be separate Node which points to array of  SFSO  id (in addition to Phis) similar how we do now if SFSO is referenced in other SFSO's field.   SFSO could be created before the merge. Consider:
>> 
>>   Point p = new Point();
>>   Point q = foo();
>>   if (cond) {
>>       q = p;
>>   }
>>   trap(p, q);
>
> I had considered that but decided not to do it to prevent adding a new IR node. I'll give that a shot and update this thread with how it goes.

It **will** complicate your DebugInfo code (packing/unpacking) information. But I think it is right thing to do to avoid duplicated re-allocations during deoptimization - you should have only one new object.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/12897#discussion_r1148154060



More information about the security-dev mailing list