<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/65212>65212</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Vetorization of loop reduction introduces an aligned store incorrectly
</td>
</tr>
<tr>
<th>Labels</th>
<td>
miscompilation,
vectorization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nunoplopes
</td>
</tr>
</table>
<pre>
```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @fn(ptr %hbuf, ptr %ref, i32 %height) {
entry:
store i16 0, ptr %hbuf, align 1
br label %for.cond
for.cond:
%i = phi i32 [ 0, %entry ], [ %inc, %for.body ]
%cmp = icmp slt i32 %i, %height
br i1 %cmp, label %for.body, label %for.end
for.body:
%0 = load i16, ptr %ref, align 1
%1 = load i16, ptr %hbuf, align 1
%add = add i16 %1, %0
store i16 %add, ptr %hbuf, align 1
%inc = add i32 %i, 1
br label %for.cond
for.end:
ret void
}
```
All memory accesses above have align=1, but the loop vectorizer produces a store with align=2:
```llvm
middle.block:
%bin.rdx = add <8 x i16> %2, %1
%4 = tail call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %bin.rdx)
store i16 %4, ptr %hbuf, align 2 ; <------------------- should be align 1
%cmp.n = icmp eq i32 %n.vec, %height
br i1 %cmp.n, label %for.end, label %for.body.preheader7
```
cc @fhan @david-arm @igogo-x86 @lucic71
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVcuSszgPfRqzcUGBuGbBorvz9wv8VbOdMrYCns_YjDH5knn6KRtIOpP0XLq6wDbS0ZGO5LB5lr1GbEn5TspjxBY3GNvqRZtJmQnnqDPi2pIqXf-VOo8kPZL0zTHbo6OCOabY1SyOkvxICQDGI8nfMJ6gTkn-lkN4-G32uPWrqgiPWO6LU-OdMmhi3fhFtftURfz_DBoC8BDfWTkp3GNfmurXqogX_UObnzpWUi-XuNfLzWt9CjxJjfRspKCkSE-aQDM5SwmUQ7ecCHzQbWsx7GQO4SPKfnAEDpTU7ysUamevJN-AKZ2dsUhlVtH0C8yOypTsNc12485SxTpU3uRkbMKNFl953s7u-ARKGbKdBrnSKt_XUATKQIaS8hj25Xuw1nz76tG8msHgDsfHKQBKv5iV25OVm9uW9J2yzDY3b_DA36M_HeJzTsHuIac0UFCGCV-7ZwH-UjgCZfadxze1JlAyIYKTf3uFPMqWZLqZ3eVb7f8VrtT8jvuleP9JZ3yQ2aIL7blZ1Ztgtzn86v2mFB1xNPZKGec4zzhT1pkz0oGdceVL8mNItVscdQNSZcxEz8idsfIPtHSyRizcO24l-CndcHOFG7MXF8EohVCYdMrwH4-idlInVlxutSH5R0MvQa78f94AturvhSJQFsHaMakoZ0qtUhQhXLLyTSx6qgkTIjk3QfvmCXkLTeDwStjiW1mBkvzdE42f_yidB7MoQTt80QR8nBJ9HyT8fW8F7Xn_4ywl-uXgvJqwZLI4IBNo67_pCs7D1TYw7d-CnaWImR39RvamN_GlWSu7cMnrLBJtLg75gUXYZtUhr5oDVBAN7eGEIj3VadExwLwuMmRYZ4LVaQVdXkIkW0ghTw8pQJYVAInAsq4alpeHHBoUjBQpjkyqJIhobB_JeV6wrUrIIArpzeH3B2CUMzfjJBVz0mh_a8MHAdgb9XZaHiPberi4W_rZZyFnN98DOOkUtr_g3Yua09r0oXvCidTu1vV6VRTF3iiaG2uRO3WNFqvawblp9t0NnwQ-e-mGpUu4GQl8hklYX_FkzW_IHYHPkOJM4DNk-WcAAAD__0ZNHBA">