RFR(S): 8205515: assert(opcode == Op_RangeCheck) failed: no other if variant here

Tobias Hartmann tobias.hartmann at oracle.com
Mon Jul 2 09:32:36 UTC 2018


Hi Roland,

that seems reasonable to me. I've re-submitted testing.

Best regards,
Tobias

On 02.07.2018 10:44, Roland Westrelin wrote:
> 
>> Tobias already started testing and I see new crashes. It was Kitchensink 
>> test running with ZGC.
> 
> I managed to reproduce it. New webrev:
> 
> http://cr.openjdk.java.net/~roland/8205515/webrev.02/
> 
> change from previous webrev:
> 
> diff --git a/src/hotspot/share/opto/loopPredicate.cpp b/src/hotspot/share/opto/loopPredicate.cpp
> --- a/src/hotspot/share/opto/loopPredicate.cpp
> +++ b/src/hotspot/share/opto/loopPredicate.cpp
> @@ -1283,7 +1283,7 @@
>      Node* n = skip_loop_predicates(entry);
>      // Check if predicates were already added to the profile predicate
>      // block
> -    if (n != entry->in(0)->in(0)) {
> +    if (n != entry->in(0)->in(0) || n->outcnt() != 1) {
>        has_profile_predicates = true;
>      }
>      entry = n;
> 
> Once we have started adding predicates as profile predicates we can't
> add regular predicates because 2 predicates can be dependent through a
> data node. To guarantee that, the loop predication checks for no profile
> predicates. In my previous email, I described how we could end up with:
> 
>   predicate added at parse time (with Opaque1 node)
> 
>   some data node
> 
>   profile predicate added at parse time (with Opaque1 node)
> 
> With that pattern, the check for no profile predicates succeeds, new
> regular predicates are allowed and some predicate that dependent on the
> data node can be hoisted above the data node.
> 
> Roland.
> 


More information about the hotspot-compiler-dev mailing list