review (S) for 6965815: OptimizeStringConcat: assert(!q->is_MergeMem()) failed with specjbb2000

Tom Rodriguez tom.rodriguez at oracle.com
Fri Sep 3 17:37:50 PDT 2010


http://cr.openjdk.java.net/~never/6965815

6965815: OptimizeStringConcat: assert(!q->is_MergeMem()) failed with specjbb2000
Reviewed-by:

OptimizeStringConcat does a bunch of graph surgery to stitch an
inlined call into the graph after normal inlining has completed.
Because of this it can create some unexpected patterns.  In this case
the final memory state of an inline results in a MergeMem that gathers
all the memory effects and inside replace_call it replaces the old
call memory projection.  In the failing case one of the users of that
memory is also a MergeMem which results in a MergeMem feeding a
MergeMem which can make the system unhappy.  The fix is detect this
pattern after replacing the call and call transform to allow the
optimizer to clean it up.  Tested with failing test from report and a
case that Vladimir found.  I also ran full CTW and with
OptimizerStringConcat and it all looks good.


More information about the hotspot-compiler-dev mailing list