United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6910664 C2: java/util/Arrays/Sorting.java fails with DeoptimizeALot flag
JDK-6910664 : C2: java/util/Arrays/Sorting.java fails with DeoptimizeALot flag

Details
Type:
Bug
Submit Date:
2009-12-15
Status:
Closed
Updated Date:
2012-02-01
Project Name:
JDK
Resolved Date:
2011-03-08
Component:
hotspot
OS:
generic
Sub-Component:
compiler
CPU:
generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
7
Fixed Versions:
hs17 (b11)

Related Reports
Backport:
Backport:
Backport:
Backport:
Backport:
Backport:

Sub Tasks

Description
The java/util/Arrays/Sorting.java fails when DeoptimizeALot flag is enabled, with the following message: 
FAILED: Array is not sorted at ...-th position: ... and 0.0

Fails only with DeoptimizeALot flag.
The failure is intermittent, but reproduces regularly.
The problem is C2-specific.

Execution results:
http://sqeweb.sfbay/nfs/results/vm/gtee/JDK7/NIGHTLY/VM/2009-12-13/Comp_Baseline/javase/solaris-i586/server/comp/solaris-i586_server_comp_UTIL_REGRESSION/workDir/java/util/Arrays/Sorting.jtr

Affected tests:
nsk/stress/jck60/jck60012

                                    

Comments
SUGGESTED FIX

Add platform specific method to get float stack value from compiled frame.
                                     
2010-02-19
EVALUATION

The test has several java float locals and use XMM registers in debug info.
But the code which restore these values during deoptimization was not
updated for XMM registers usage. It assumes that float values were converted
to double on stack as it was before SSE hardware when FPU was used.
                                     
2010-02-19
EVALUATION

ChangeSet=http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/2883969d09e7,ChangeRequest=6910664
                                     
2010-02-19
PUBLIC COMMENTS

Problem:
The test has several java float locals and the compiled code has XMM  registers which hold their values in debug info.
But the code which restore these values during deoptimization was not updated for XMM registers usage. It assumes that float values were converted to  double on stack during deoptimization as it was before SSE hardware when FPU was  used.

Solution:
Matcher::float_in_double should be true only when FPU is used for floats.
                                     
2010-02-19



Hardware and Software, Engineered to Work Together