PR21302: Vectorize only bottom-tested loops

Hi,

This patch fixes the problem described in PR21302.

The issue is that currently vectorizer sometimes vectorizes loops that are not bottom-tested, i.e. in which each iteration starts from checking the termination condition. That causes an extra-iteration to be executed in vectorized version in some cases.

The patch consists of two parts:
1) Update three existing tests, that contained loop in such forms. After the fix these loops aren’t vectorized any longer, so I applied loop-rotate+simplifycfg to them. This change is quite mechanical.
2) The fix itself and a regression test.

pr21302-part1.patch (20.4 KB)

pr21302-part2.patch (1.79 KB)

LGTM.

Thanks!

Thanks! Committed in r223170 and r223171.

Michael