Request for reviews (M): 7070134: Hotspot crashes with sigsegv from PorterStemmer (original) (raw)

Vladimir Kozlov vladimir.kozlov at oracle.com
Tue Jul 26 14:41:49 PDT 2011


Additional note: the problem appeared before my loop optimization changes. It started after I enabled the code in memnode.cpp that treats fields of constant strings as constants (6942326 changes). In the bug case inlined method ends() has a loop with constant string's length as the limit. After changes in memnode.cpp the limit becomes constant and the loop is fully unrolled. As result loads which were in the loop can be moved to dominating test.

Vladimir

Vladimir Kozlov wrote:

http://cr.openjdk.java.net/~kvn/7070134/webrev

Fixed 7070134: Hotspot crashes with sigsegv from PorterStemmer It is an other case of "6831314: C2 may incorrectly change control of type nodes". Loop predicate RCE upperbound check matches an other dominating RangeCheck and splitif optimization moves loads to dominating test. In the bug case (step4() method) two code branches have the same loads from the same array (b[]) and they are combined and moved above array's index check and above lowerbound predicate check. The fix is band-aid to not move data nodes which are attached to a predicate test to a dominating test. It is allowed to do that during loop peeling and loop predicates generation since they duplicate all checks. I also switched off predicate RCE optimization for counted loops with '!=' test since there is no guarantee that loop index will be in the range [init, limit) if init > limit. Added regression test. Refwokload (x64) shows no affect.



More information about the hotspot-compiler-dev mailing list