RFR(S): 8183129: [MVT] Type::get_typeflow_type() doesn't distinguish between TypeValueTypePtr & TypeValueType

Tobias Hartmann tobias.hartmann at oracle.com
Thu Jun 29 09:55:12 UTC 2017


please review the following patch:

We crash during parsing due to mixing TypeValueType and TypeValueTypePtr. The problem is that typeflow analysis incorrectly sets the type of a PhiNode to TypeValueType instead of TypeValueTypePtr for a __Value argument used in a lambda form. When inlining a method handle intrinsic in CallGenerator::for_method_handle_inline() we should cast all arguments to their actual types but we miss the PhiNode because it's already of TypeValueType. We then fail in Parse::do_vunbox() because the input node is a Phi (and not a ValueTypeNode). We may also fail with a typesystem assert.

I fixed typeflow analysis and added a regression test that triggers these problems by using MethodHandles.guardWithTest to merge __Value from two branches. I also added an assert to catch these problems earlier. This depends on the SELECT_ALTERNATIVE intrinsic (GWT) being implemented in the value type LambdaFormBuilder [1].

Thanks to Vladimir Ivanov for reporting this bug and finding the root cause!

Best regards,

[1] http://cr.openjdk.java.net/~vlivanov/valhalla/vectors.mvt/webrev.00/jdk/webrev/

More information about the valhalla-dev mailing list