On Aug 28, 2014, at 7:38 AM, Paul Sandoz <paul.san...@oracle.com> wrote:

> On Jul 8, 2014, at 9:09 PM, John Rose <john.r.r...@oracle.com> wrote:
> 
>> Regarding the extra cast in accessor logic that Paul picked up on:  That may 
>> be a left-over from obsolete versions of the code, or it may cover for some 
>> corner cases, or it could possibly be a re-assurance to the JIT.
>> 
> 
> I had some enlightening discussions with Roland on this.
> 
> It seems quite tricky to solve in general the removal of the null check due 
> to the aggressive nature in which the null branch is reduce to a trap, but 
> IIUC may be possible to turn Class.cast into an intrinsic to handle the 
> specific case (although that seems costly).
> 
> I was labouring under the misapprehension that an explicit Class.cast was a 
> profiling point but now i realize it's only certain byte codes (like 
> checkcast/invokehandle). Nothing specific to the DHM access logic showed up 
> with regards to type profiling when analysing the MethodData output from some 
> simple examples [*]. Therefore i presume it's more likely to be the first or 
> third reason you state.
> 
> So i propose to proceed with the experiment with a patch to replace the casts 
> with asserts in the accessor logic and run that through the usual tests.
> 
> Paul.
> 
> 
> [*] Also i have so far failed to concoct a simple example for VarHandles 
> where i can trigger profile pollution and failed inlining

Here's something to try first:  Force a profile point before Class.cast, even 
without Roland's enhancements.
You should be able to type-profile "x" by inserting "push x; checkcast 
java/lang/Object; pop".
See last line of https://wiki.openjdk.java.net/display/HotSpot/MethodData

— John

Reply via email to