[15] RFR(M): 8240227: Loop predicates should be copied to unswitched loops

Christian Hagedorn christian.hagedorn at oracle.com
Tue Mar 17 07:56:14 UTC 2020


Hi Roland

On 16.03.20 17:45, Roland Westrelin wrote:
> 
> Hi Christian,
> 
>> Full: http://cr.openjdk.java.net/~chagedorn/8240227/webrev.01/
> 
> I'm confused by that part of the change:
> 
>   242     if (iff->is_RangeCheck()) {
>   243       // Only need to clone range check predicates as those can be changed and duplicated by inserting pre/main/post loops
>   244       // and doing loop unrolling. Push the original predicate on a list to later process them in reverse order to keep the
>   245       // original predicate order.
>   246       if (predicate->outcnt() == 1) {
>   247         // Clone all range checks that have no control to additional data nodes (like loop limit checks)
>   248         list.push(predicate);
> 
> Comment line 247 mentions loop limit checks but they are not range
> checks?

Yes, that comment seems wrong. What I actually meant was (concrete) 
range check predicates nodes like upper bound checks created in 
PhaseIdealLoop::loop_predication_impl_helper() which do not have 
additional outputs to data nodes (the skeleton predicates have the 
control edges to these data nodes).

I updated these comments in webrev.01 in place to make it clearer. 
Thanks for pointing it out.

Best regards,
Christian


More information about the hotspot-compiler-dev mailing list