<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67060>67060</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
miscompile of store to element of <i1 x N>
</td>
</tr>
<tr>
<th>Labels</th>
<td>
OpenCL,
miscompilation
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zygoloid
</td>
</tr>
</table>
<pre>
LLVM is optimizing a store to an element of an `<i1 x N>` into an `i1` store, which then gets lowered to a byte store, clobbering adjacent vector elements.
[Testcae](https://godbolt.org/z/dPeKErroY):
```c++
typedef __attribute__((ext_vector_type(32))) bool v32bool;
v32bool v32b;
void set() {
v32b[0] = true;
}
```
is lowered by Clang to
```llvm
@v32b = dso_local global i32 0, align 4
define dso_local void @set()() {
entry:
%0 = load i32, ptr @v32b, align 4
%1 = bitcast i32 %0 to <32 x i1>
%vecins = insertelement <32 x i1> %1, i1 true, i32 0
%2 = bitcast <32 x i1> %vecins to i32
store i32 %2, ptr @v32b, align 4
ret void
}
```
and then incorrectly optimized into
```llvm
define dso_local void @set()() local_unnamed_addr {
entry:
store i1 true, ptr @v32b, align 4
ret void
}
```
The transform would be correct if the vector elements were byte-aligned, but is not correct in this case.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVE1vIykQ_TX0pRSLpj_iPvRhbI8vm_04jFbakwVNuc0IgwXVSZxfvwJ3Yo9nV5vDSigdA--9ehQ8GaMZHWLPmhVrNoWc6OBD_3YevfVGF8rrc__09OevYCL4E5mjeTNuBAmRfEAgD9IBWjyiI_D79Iu1nFVrU8Ir_Maqr6zlYNxlI2u5KdNERjOxhpeDGQ5AB3QwIkWw_gUD6kwM6kx43TpYrxSGLK-_yyEpPuNAPrwXEBeMbxj_Mv9tVt8w0iCRNRsmlgeiU2TVFya2TGxHr5W3tPBhZGL7xsRW_4G_fA3B_8VEl7bdUrX8MgYmVmnkWTqfUOMedjtJFIyaCHc7JpZMLPGVdpfadmkXE8tKJNo8QHlv4bkS6cuq1a3SPJtX75e80RCRskIH7HFeBYDL9mbFWbMBVm2AwoRX-OPmzsYtrbkeujrD2ko3Avl_dG_t83GeqnmSzFo6-p31g7QwWq-kBVMJ4Klj0prRQX3LpXFvHN5gsitW8w9j9_bQUTh_9AOAiYZnXeulTlpJ6UQB5pp-Es6QMkOUoUFGyhVmHvLAqnUl4BVMmS7rFfGMg3Exw4yLGOj9lv8AyNxJ0pSXQ0__Zv9XJvGD9k_wWYh8NjPDLs9rrvMTFgNSPsrPdFw6fXlxxg0-BBzInt8fN-r8WP-j_Z_uYl7dTc7JI-qd1Dr8e2Nny9dz_P8cfzsgUJAu7n04woufrAaFMLsHs0_ncR8mkB5FzqCHLI06VaEmSlnoPF3hDuhgIgwy4qLQfaW7qpMF9mXbNZVYNm1dHHpeLUuturbWYq8bUUpZd53W5RLbpRqEKEwvuKh4J0rBq5bXC9FiLYe6U0KoRgvNao5HaewiNSIFV2FinLBvH3nLCysV2piDXIjfT-jWT0ykm8OEOJo4-OPJWEnGuzTdbIrQJ54HNY2R1dyaSPHKTIYs9h84TNn-Efk3eX-b9MUUbH-XsoYOk1oM_sjENt-fy-fhFPx3HIiJbfYQmdhmG38HAAD__5XQ7fU">