<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">