<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/91309>91309</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Miscompile with slp-vectorizer after "[SLP][NFC]Walk over entries, not single values."
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mikaelholmen
</td>
</tr>
</table>
<pre>
llvm commit: d838e5b3e86e
Reproduce with
```opt -mtriple=aarch64 -passes=slp-vectorizer bbi-95270.ll -S -o - -slp-threshold=-100```
Result:
```
define i16 @foo() {
entry:
%lnot = xor i1 false, true
%lnot.ext = zext i1 %lnot to i16
%add = add nsw i16 0, %lnot.ext
%lnot5 = xor i1 false, true
%lnot.ext6 = zext i1 %lnot5 to i16
%add7 = add nsw i16 %add, %lnot.ext6
ret i16 %add7
}
```
The input program returns 0, but after slp-vectorizer you can see that the function returns 2.
This starts happening with https://github.com/llvm/llvm-project/commit/938a73422e0b964eba16f272acdfae1d0281772c
The patch says "[SLP][NFC]Walk over entries, not single values." but it seems to not be NFC.
Before that patch we get
```
define i16 @foo() {
entry:
%lnot = xor i1 true, true
%lnot.ext = zext i1 %lnot to i16
%add = add nsw i16 0, %lnot.ext
%lnot5 = xor i1 true, true
%lnot.ext6 = zext i1 %lnot5 to i16
%add7 = add nsw i16 %add, %lnot.ext6
ret i16 %add7
}
```
which still returns 0 as it should.
Note the difference in the "xor" instructions.
[bbi-95270.ll.gz](https://github.com/llvm/llvm-project/files/15233200/bbi-95270.ll.gz)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMlVuPqzYQxz-NeRmBzHALDzycLMpTu6p6KvXZmCG4x2Bkm719-sqQza7SvKxaqUeK5MSZy39mfraFc-o8EzWsOLKijcTqR2ObSf0QpEejJ5qjzvSvjdZPE0gzTcqz7Bv0h-xARZfRoSTGW8a__U6LNf0qCZ6VH_c9VvL9YxYP8eStWjSxrBXCyrHMIV6Ec-RY1jq9xE8kvbHqjSx0nYrrAiueaA3xd4gNxBAHIz9acqPRPcvaOOX8muJdhVt1UHgjYP_Z06BmApWWwHI-GMPwwLAGVh13A5q9fb16A8NCz8YDy1p4MRZUCoPQjhg-gLfrpXJ4t0voZbd9C19UevX3JuT8ZC36fjMM6-yeN0U8RP0U6SZ48RUV5T0ZxV0d1T-E7Ps3aq5elvwnq-rS56q92_A_RgI1L6uHxZqzFVNwX-3s9mq71YMYPFm4mf-rWUGKGRwR-FF48CPBsM7SKzNfY2DynkU5cF5Y72AUy0Kzms8bhjB6v7gwUDwxPJ2VH9cukWZieApEX5Z4seYvkp7h6YI4nursIKosRyTe1WVOnUjLASsUsh8EpT3HQ1pVKD8KXYSXIzjx6oAhsuL4_ZffWNGy4vh4emBF-6fQP8A8kYWAmSIXWhDwcGo-a4InoVdyCUPcGqN8KH9yYWrBqiN4PD0k72huy5EGYy8t2tM_E5zJ_yf038N_4-3_pv-OiJ-Q_edRBRy80vqDehBuG-xoVt1fZvloPG2A92oYyNIsw6HZdhjii7GBCDU7b9eNf3fxY8Xx8z2ZnN8CbXj4MvOD0gHGU1pgliHnDE-3gbHec0Z9k_V1VouImrRKC15lnNfR2FBf5VJkZclryRGlTPmQk-ykLPO0rLpINcgx5wWveJ1yXicFTw9ZikQiz3FAYjmnSSidBHWJsedIObdSU6cZryMtOtJue6YQZ3qG7c_tnLWR3Z6nuFvPjuVcK-fdRxSvvKbmV-WkmRal9_fp9sLZb6F_eWyj1ermy93fCgnt3wr9OwAA__-lA0Kh">