Request for reviews (XL): 7147744: CTW: assert(false) failed: infinite EA connection graph build

Vitaly Davidovich vitalyd at
Thu Feb 23 13:20:24 PST 2012

Thanks Vladimir.  I know the method is new and used only in EA but
GrowableArray is a general purpose class so I thought maybe such a method
doesn't gel that well with it.  I'd use a linked list for such scenarios
(some mem bloat, unless it's intrusive, plus indirection hit though), but
your call of course ...


Sent from my phone
On Feb 23, 2012 3:42 PM, "Vladimir Kozlov" <vladimir.kozlov at>

> It is used only in new code in EA where it removes node from list of non
> escaped objects. The order does not matter there. In initial changes it was
> also used to remove  node's edges where it is also does not matter.
> If you want to preserve order use remove_at(i).
> Vladimir
> Vitaly Davidovich wrote:
>> Vladimir,
>> deleteAt() doesn't violate ordering assumption for elements previously
>> inserted into the array?
>> Vitaly
>> Sent from my phone
>> On Feb 23, 2012 3:00 PM, "Vladimir Kozlov" <vladimir.kozlov at<mailto:
>> vladimir.kozlov@** <vladimir.kozlov at>>> wrote:
>>    <**kvn/7147744/webrev<>
>> >
>>    7147744: CTW: assert(false) failed: infinite EA connection graph build
>>    I rewrote Connection graph construction code in EA to reduce time
>>    spent there. In the bug's test time reduced by 100 (from about 50 to
>>    .5 sec on Nahalem-EX machine).
>>    Connection graph now has specialized classes for nodes and
>>    additional use edges to put on worklist only uses of node which
>>    added new point edge. Field node has also bases edges. Edges never
>>    removed only added.
>>    Instead of looking for Field's bases from the start create simple
>>    base edge to LocalVar during initial graph construction in
>>    build_connection_graph(). Late do several iteration to push all
>>    known JavaObject nodes references through graph. This phase has
>>    limits on number and time. Also on each iteration check if there are
>>    non globally escaped objects and bail out from code if not.
>>    Added additional Arraycopy node to connect source and destination
>>    objects.
>>    I removed uncast() calls so that all LocalVar nodes point to all
>>    related JavaObject nodes.
>>    I combined record_for_escape_analysis() and build_connection_graph()
>>    into one method.
>>    Added TracePhase around Connection graph build code to see how much
>>    time spent there.
>>    This code need addition work since I still saw outlier (10 min in
>>    EA) in sje2010 on SPARC. But I will look on it after this one is done.
>>    I added new GrowableArray method delete_at(i) to avoid shifting
>>    following elements which is done in remove_at(i) method.
>>    Thanks,
>>    Vladimir
-------------- next part --------------
An HTML attachment was scrubbed...

More information about the hotspot-compiler-dev mailing list