Adds new optimization remarks when vectorization fails.
More specifically, new remarks are added for following 5 cases:
- Backward dependency
- Backward dependency that prevents Store-to-load forwarding
- Forward dependency that prevents Store-to-load forwarding
- Unknown dependency
- Unknown array bounds
The failures are classified mainly into 2 categories
based on whether it is an aliased memory access
that is unsafe, and whether a bound can be computed for an array.
It is important to note that only one of the sources
of failures (to vectorize) is reported by the remarks.
This source of failure may not be first in program order.
In the future if may be possible to report all sources
of failure (and in program order).
A regression test has been added to test the following cases:
a) Loop can be vectorized: An optimization remark is
emitted indicating that vectorization was successful.
(note that this functionality was already present, ie.
has not been added as part of this patch.)
b) Loop can not be vectorized: In this case an optimization
remark will be emitted for one source of failure.