void test2(int* A, int Length){
for (int i = 0; i+1 < Length; i++) {
A[i] = A[i+1] + 1;
}
}
void test3(int* A, int Length){
for (int i = 1; i < Length; i++) {
A[i] = A[i-1] + 1;
}
}
給出結果
vector.cpp:12:14: remark: vectorized loop (vectorization width: 4, interleaved count: 2) [-Rpass=loop-vectorize]
A[i] = A[i+1] + 1;
^
vector.cpp:18:17: remark: vectorized loop (vectorization width: 4, interleaved count: 2) [-Rpass=loop-vectorize]
A[i] = A[i-1] + 1;
使用此命令行 clang++-3.8 -O3 -Rpass=loop-vectorize vector.cpp
所以根據鐺他們都自動上O3
這裏開始Auto-Vectorization
編輯:更妙here是一個博客文章,其範例爲
這不是C++代碼,無論你在問什麼。 –
爲了記錄你試圖確定一個編譯器會做什麼或爲什麼會這樣做,因爲後者是一個作業問題。 – West
如果你看看自動矢量化文章,它有選擇。 – West