dom1 prevents vectorization via partial loop peeling?

Alan Lawrence alan.lawrence@arm.com
Thu Apr 30 06:46:00 GMT 2015


Richard Biener wrote:
> 
> Well.  In this case we hit
> 
>   /* If one of the loop header's edge is an exit edge then do not
>      apply if-conversion.  */
>   FOR_EACH_EDGE (e, ei, loop->header->succs)
>     if (loop_exit_edge_p (loop, e))
>       return false;
> 
> which is simply because even after if-conversion we'll at least end up
> with a non-empty latch block which is what the vectorizer doesn't support.
> DOM rotated the loop into this non-canonical form.  Running loop header
> copying again would probably undo this.

Indeed - header copying causes the loop to be if-converted, and then actually 
vectorized, too. (Well, I had to make do_while_loop_p a bit more aggressive in 
saying things weren't do-while loops.)

I merely moved pass_ch to immediately after pass_dominator, a few stages later; 
I have also tried cloning it, but do you foresee any problems with just moving 
it? (It passes bootstrap, I'm running the full testsuite atm).

Cheers,
Alan



More information about the Gcc mailing list