Valhalla VM notes Wed Jun 6
Karen Kinnear
karen.kinnear at oracle.com
Wed Jun 13 18:29:28 UTC 2018
Accidentally sent this internally, incorporated Tobias’ corrections from last week:
> On Jun 12, 2018, at 6:01 PM, Karen Kinnear <karen.kinnear at oracle.com> wrote:
>
> Attendees: Mandy, Frederic, Tobias, Harold, Karen, Roland joined (corrections welcome)
>
> 1. Frederic - VTs attribute consistency
> - throws ICCE at mismatch: fields: load time, local methods: preparation time
> - also check against real - at constant pool resolution time - this will cover array creation, checkcast, etc.
>
> was waiting for Srikanth’s updated bytecode APIs - so way to specify VTs attribute in the test
> (Srikanth sent an update after that)
>
> - also need consistency checks between caller/callee for method invocation and remote field reference
>
> goal 1 correctness
> goal 2 avoid mismatches
> longterm picture: VBC migration - will not throw ICCE
>
> 2. static fields:
> John wants value classes without circularity error
> Karen discussed at EG meeting - AI to do an improved writeup - Dan Smith pointed out some issues if the VTs attribute is incorrect,
> I need to walk-through the logic again. My AI.
> Note: will never actually flatten, but need semantics of can not be null
> key: creating default value before class initialization - ensuring never exposed
> (Karen investigating bug found when searching here - JVMTI returns jfieldID/jmethodID without class initialization, and passed
> to JNI which assumes class has already been initialized before returning jfieldID/jmethodID - Dan D also thinks this is a bug -
> trying to catch holes so instance of default value does not escape
>
> (note: LW1: John agreed we could disallow this if we need to - i.e. keep current circularity checks if you try)
>
> 3. verifier for container model: done - checks bytecodes, no nullability checks
> (if we need to change to non-nullable types: 3-4 lines and some additional tests)
>
> 4. interpreter: all set for LW1
>
> 5. Classfileparser: all set for LW1
> (if we need to remove ACC_FLATTENABLE from classfile - fallback - let classfileparser add the information so internal
> vm implementation unchanged after that)
>
> 6. JIT:
>
> Tobias: implementation is good for LW1
> calling convention not needed in 1st EA - we agreed - ok as optimization followup LW 1.1 or whatever
>
> Roland: checked in intrinsics (bugs fixed since meeting)
> 1-2 intrinsics left:
> hashcode/identityhashcode, (1 other maybe?)
>
> 7. Library work:
> Discussion with Mandy:
> prototyping hashcode using indy - waiting on Srikanth to generate compiler support
> initial implementation is using reflection, working with Paul for MH combinators
> model is to allow changing the algorithm in the library
> algorithm: get all values from all fields
>
> Ed Note: one possibility is to have C2 support hashcode intrinsic with default algorithm and use library if user overrides
>
> Proposal from Mandy (correct me if this is inaccurate:)
> LW1: use library only, no C2 fallback hashcode intrinsic - expect this to be slow for LW1
> improve with LW 1.1 or whatever (e.g. with caching)
>
> No other library work outstanding for prototype - Mandy wants to do another pass at Reflection, j.l.invoke for EA - but
> code and tests are there
>
> 7. Work left for LW1:
> 1. enable JIT intrinsics for hashcode/equals for non-value types for performance - Roland
And other Object methods/bytecodes on value types - e.g. monitor enter: JDK-8204615 - Tobias working on
> 2. acmp from experimental tree - Mr Simms
> 3. JIT: aastore/aaload
> - potential future optimizations (replace de-opts by runtime calls) - not required for LW1
> 4. Mandy/Srikanth - hashcode/identityhash/equals
> 5. Frederic - update on VT consistency
>
> 8. Testing and stability:
> Harold ran jck, jtreg without EnableValhalla - occasional small issues
> Harold offered to run with EnableValhalla (he sent email update
> Test with enableValhalla vs. not
>
> 9. Longer-term:
> LW1: ship sooner - no value types as type parameters, no value-based-class migration
>
> LW10: 1st preview
> - support for erased generics
> “working” means - e.g. pass in an array of Point and not get NPE when storing null, and not NPE when returning null and expecting Point
> - language support - e.g. constructors
> - preview quality: e.g. JNI, JVMTI, … - fully featured
> - open question: are atomics required?
>
> we would like to target JDK12 for LW10 - this may be a stretch goal - but we need to figure out what it will take
>
> LW100: VBC migration (also requires handling nulls)
> generic specialization for optimizations
> primitives as value types
>
> Between LW1 and LW10: may have performance optimization incremental EAs (periodically)
>
> 10. JIT performance today relative to null handling:
> null for value type dynamic argument: catch in i2c adaptor and jump to interpreter
> null for value type return: deopt (do not throw away compiled code)
> check null at checklists to a value type for scalarization within a method
> array store: throws ASE/NPE
>
> 11. Longer term proposals:
> Frederic is writing up a Container Model proposal - will send in email
>
> thanks,
> Karen
>
>
>
>
>
>
More information about the valhalla-dev
mailing list