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