[prev in list] [next in list] [prev in thread] [next in thread]
List: llvm-bugs
Subject: [llvm-bugs] [Bug 63602] Miscompilation in LoopVectorizer
From: LLVM Bugs via llvm-bugs <llvm-bugs () lists ! llvm ! org>
Date: 2023-06-29 14:25:16
Message-ID: 20230629142516.30bc28a2ebb25cfe () email ! llvm ! org
[Download RAW message or body]
[Attachment #2 (text/html)]
<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63602>63602</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Miscompilation in LoopVectorizer
</td>
</tr>
<tr>
<th>Labels</th>
<td>
miscompilation,
vectorization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
d-makogon
</td>
</tr>
</table>
<pre>
Repro: https://godbolt.org/z/6MxeMx97G
The source IR is for the following code:
```java
int i = 1;
while ((i += 3) < 383) {
arr[i] = 1;
arr[i - 1] &= 1;
arr[i] += 1;
}
```
The `arr` is filled with zeroes initially.
The program just stores `2` in each third element of the array starting from the \
index `4`. After the vectorizer pass however the part of the loop that is processed \
in the vector loop is filled with just ones.
The issue in the vector loop is the following:
First we load the elements for which we need to do the addition of `1` (corresponding \
to the line `arr[i] += 1`) into `%strided.vec3`. Then we store the ones into each \
third index: `store i32 1, ptr %21, align 4`; `store i32 1, ptr %22, align 4`; \
`...`. And then we do the addition of `1` to the **previously loaded** vector of \
values: `%54 = add <8 x i32> %strided.vec3, <i32 1, i32 1, i32 1, i32 1, i32 \
1, i32 1, i32 1, i32 1>`, and after that we perform the stores: ```
%55 = extractelement <8 x i32> %54, i32 0
store i32 %55, ptr %21, align 4
```
```
%56 = extractelement <8 x i32> %54, i32 1
store i32 %56, ptr %22, align 4
```
...
So the issue is that the `+1` is done for the values that are loaded from the memory \
before the stores of `1`. So we end up storing `0+1=1` in each third index starting \
from 4. </pre>
<img width="1px" height="1px" alt="" \
src="http://email.email.llvm.org/o/eJykVVFv4jgQ_jXmZdQosUmAhzxAWU4n3b7sru7diSfEe04msg2 \
0_fUn2ylsabvS6SQExjMef_N9M2PpnD6OiDUrd6zcL-TJ92Rr9TDIf-hI46Ih9Vx_w8kSE1vovZ8cE1vGD4wfj \
qQaMj4je2T88ML4ofr6hF-fNqs_WL5n-TZ9_-gRHJ1si_DnN9AOOrLge4SOjKGLHo_QksIQNp2q8vT5Kc8yben \
RgwYm9lAwsUt7l14bBMbXjK81ML4LZsH4Bph4BLFOy9XsDSCtZeVOs3J_F-hqggcooplXn3gk6-6tla32d8Bve \
bMqD0erPOatjUEFF-17eEFL6ECP2mtpzHN2OzNZOlo5wM-T8-A8WXQhDo9RRkDZ9uB7bRWgwQFHD9RFPqW18hm \
cl9YHUjtLQ9zXo8KnEGLJqny-aNt5TCqcsfVk9QtamKRz0NMFz7NtkvYa3RBN4HvpQyqTpRadQxUQ3aIkp7tUY \
x40osvuq0I7d8JPIrwpkGttHLR1Hi4BjVTRZ-YgVdWl120fzCOiAk-gKDGjlPaaxpALq_IiUMn4uiVr0U00qsC \
XT75Gj1fd7iWv8lBUevQEcV06b7VClZ2xFTdyf_Q4BhRRvBg0pJ_O_SJf1CW0Favy5KoFh4LxR5i8BcZLHv9Io \
48jBPGY2AH8xp1_4p5l2S_Sj5G5iPA3_Mx0ML5lfDtZPGs6OfMcmUeVtl9Fow7O0pzQzdkwXpbL2GZSqdCPa3g \
KaJn4Aves8cfgcE3l_yzEl3j3I8hRgZwrXMZ6mdB2ZFM_pJ6KUD_q2wC-jODxyVvZ-tc2e5dHuXy9ez56kyUG- \
VTJD699j6L6jyiKj1BUnxbIR9eGSomL70n-uUVdItKnkcb4rphnmqIRrwM91UBylRbnUrkNogEHss_QYPfaF_N \
4u5VdBt8p6IWjgtMU7aE3WZWnW8W-eD8H04B7O_iW2ULVQm3ERi6wLqr1Ol-uV0W16OvVSqDabDayLKWSZbcsu \
kYpwbHBbi1Us9A1z7nIK74plrwsqkzkTcvXkmPT8LLtkC1zHKQ2mTHnIbx_i8hTXYkq5wsjGzQuPqmcD9q1NEz \
ayNBgLCrAOH-dutfdcr-wdQj30JyOji1zo513twu89gbrr2-iBRr-Ipr-vo7wxcma-u6V1r4_NVlLA-OHEG7-eZgs_cTWM36I4F14vwP-fwMAAP__06Jnbg">
[Attachment #3 (text/plain)]
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic