RFR(S): type system fix
Roland Westrelin
rwestrel at redhat.com
Tue Jun 5 12:20:44 UTC 2018
Hi Tobias,
> I think it's too strong, here's the fix:
>
> --- a/src/hotspot/share/opto/graphKit.cpp Mon Jun 04 16:49:10 2018 +0200
> +++ b/src/hotspot/share/opto/graphKit.cpp Tue Jun 05 10:25:52 2018 +0200
> @@ -1797,9 +1797,8 @@
> // Pass value type argument via oop to callee
> arg = vt->allocate(this)->get_oop();
> }
> - } else if (t->is_valuetypeptr()) {
> + } else if (t->is_valuetypeptr() && arg->bottom_type()->remove_speculative() == TypePtr::NULL_PTR) {
> // Constant null passed for a value type argument
> - assert(arg->bottom_type()->remove_speculative() == TypePtr::NULL_PTR, "Anything other than
> null?");
>
> With that and your fix, all tests pass on my machine as well.
We have a nice invariant that values are either constant null or a value
type node. I think we should try to keep it that way. What about this:
http://cr.openjdk.java.net/~roland/valhalla/lworld-typesystem-fix/webrev.01/
The interface call resolution code needed some adjustment too.
Roland.
More information about the valhalla-dev
mailing list