<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/82665>82665</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
WRONG code when enabling Loop Vectorizer with -Os
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JonPsson1
</td>
</tr>
</table>
<pre>
This program should print 1:
cat wrong0.i
```
int printf(const char *, ...);
int *IntPtr = 0;
int Val, ValB;
int *IntPtrArr5[5] = {0, 0, 0, 0, 0};
int *IntPtr2 = &ValB;
int main() {
for (int IV1 = 0; IV1 < 5; IV1++)
IntPtrArr5[IV1] = &Val;
for (int IV2 = 1; IV2 <= 4; IV2 += 1) {
int **PtrPtr = &IntPtr2; // -> IntPtr2
int **PtrPtr2 = &IntPtr; // -> IntPtr
*PtrPtr2 = IntPtrArr5[IV2]; // -> IntPtr -> Val
*IntPtr2 ^= 1; // ValB = 1 Val = 1 (2nd iter)
*PtrPtr = IntPtrArr5[IV2]; // -> IntPtr2 -> Val
}
printf("checksum = %X\n", Val);
}
```
In the first iteration, IntPtr2 points to ValB and sets it to 1. Then, only in the second iteration does IntPtr2 point to Val and set that to 1. I wonder if the loopvectorizer has done something wrong, or if there is some later pass possibly that is messing it up..?
```
rm a.out; clang -O0 -march=z16 wrong0.i -o a.out -w; ./a.out
checksum = 1
rm a.out; clang -Os -march=z16 wrong0.i -o a.out -w -fno-vectorize -fno-slp-vectorize; ./a.out
checksum = 1
rm a.out; clang -Os -march=z16 wrong0.i -o a.out -w -fno-slp-vectorize; ./a.out
checksum = 0
```
@fhahn @david-arm @nilanjana87
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VV2PqzYQ_TXDywgEEyDkgYfN5qbaqupdVVfbvhpwgm-NjWxno72_vjJf-di0VV8aIYexfc4cH9sDs1YcFeclZFvIdgE7uVab8metXq3VKgkq3XyU31phsTf6aFiHttUn2WBvhHKYwOoJ4h3EU1szh2ej1TGOxNSfx9MzhB40QA9ARa2VdVi3zCDQE9AzRlEEtIHV9jIb6OlFuVdnEFY7jG_G3pj0qDcmt48xT8ZkkG0zyHYDHNbb2CM-NevdYwIaYZR_ytExoYAKoI1nHfsRD9qvpfATXt6SRfIUPGM2BUDb4dlMwBu5fnwWPGReEt8lGNUlI6cPnn2cLjFtx_EbjdP6gJ5enZl9BcqnBXswIgLtgfYYwuoLzlYsv1kMfiKjW7a_Jbsw3EHvjCDI_M48YBjf35i8lnO9b9mXxZyb30SFOJyb0cFl0PONPUAFqQaF4-ayTdd6_0nuQ_tmwTOXP3Tj63IjgKhuef2nPXWTkdkfkD0rIJoO-vX1WAjuLtmLQtdyPAhj3bAA5oRWnmCW0muhnEWnRw-YatByZ1E435dE-K3lA0Ar-YFi5LO81pMjAyE2mttbyolxJkTXspnxBc9aNdygOAxsUuv-nddOG_GDG2yZxUYrjlZ33LVCHcdCMoiYQYajsMMMlMxxgz2zFnttrajkx5hNWOy4tZ5AODz1UQSr_XWNujPLdMgifXJ-22rJ1BHDrzGGHTN1C6vdjyRfKhqGepyL4dlPj4D2I3Ysftc7l1ynfJTD_nsODA9Kh4tJY2hlf-n6_1T8p7TxQ6enNo0PLWsVQho37F00ITOdD5SQTH1nihVrDJpy1WxWGxbwMlnHRU5pURRBW7Imr1m1ybJks1nnMR0oydIqXzfVJs3qFQWipJjSmIiSIk6oiKo1FQVVVOWHtDnwNaQx75iQkZTvXaTNMRDWnnhZUJ5ngWQVl3b4HBIpfsZh0F-_bBeY0mPC6nS0kMZSWGcvLE44ycvff_v6609Y64bjueUKuWKV9GfxF617fLuc97Nwrfc_OBlZts711n9Kh6pxFK49VVGtO6C955_-wt7o77x2QPtBlQXaD6r_CgAA__8rBjef">