The current implementation of `!DIR IVDEP` leads flang to bypass LLVM cost model and always vectorize the loop carrying `!DIR$ IVDEP`. IVDEP is an extension and its documentation varies, and while it usually leads to vectorization because it is added on loops where it is usually profitable, its documentation only tells it is meant to tell the compiler that there are no loop carried dependencies and that the loop is safe to vectorize. In some application, such directive may have been added to help the compiler proving it is safe to vectorize, but vectorizing is not always the best choice for all architectures. The cost model should still be applied. This is at least the case for classic flang. When users want vectorization to happen, they should use `!DIR$ VECTOR ALWAYS`. This patch updates flang to not emit `llvm.loop.vectorize.enable` just because IVDEP was seen. Instead, IVDEP now only controls the emissions of the access groups to translate the independence of the accesses and leave the vectorization decision up to the cost model. `!DIR$ VECTOR ALWAYS` can be used in combination with IVDEP to force vectorization (it causes the emission of `llvm.loop.vectorize.enable`).
Flang Integration Tests
This directory can be used to add Integration tests involving multiple stages of the compiler (for eg. from Fortran to LLVM IR). It should not contain executable tests. We should only add tests here sparingly and only if there is no other way to test. Repeat this message in each test that is added to this directory and sub-directories.