<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/76069>76069</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang][LoopVectorize] Inccorrect code generation in case of vectorize_predicate(enable)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          futog
      </td>
    </tr>
</table>

<pre>
    Configuration:
 --target=armv7a-none-eabihf -march=v7-a -mthumb -mfloat-abi=hard -mfpu=neon -O3

In vectorize.c:
[vectorize.zip](https://github.com/llvm/llvm-project/files/13729421/vectorize.zip)

 var_27 will be set to '1', which is not correct.

The reason is that in BasicBlock for.cond.for.cond.cleanup_crit_edge (pred is middle.block) the arr_14 array is overindexed.

I think that the problem is that tail-fold by masking happens, even though the invariant is used outside of the loop.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUU8GOrDYQ_BpzaYHADMNw4PDmoZFWipRLlOuobTfYWWMj2_Cy-_URTHZ29_guGFlVRTVVjTGayRH1rLmyZshwTdqHflyTnzLh1Vv_07vRTGvAZLxj9Q9WDqz8AXmeMEyUWD1gmLcWc-cd5YTC6BHyGYPUrB62NkfI56TXWUA-j9ZjylEYVg8ag9qvlpXVgyPvIP-zfqg_ni8ONpLJB_NOhXx-mjXXz-t3s7BmYPyiU1rijuE3xm-TSXoVhfQz4zdrt48jX4L_h2Ri_DYaS5HxW1W3vDvxivHbd1nefTUDG4Y7b-GXsRYEQaQEyQPjbcV4y_hP-KWN1GAiOJ9A-hBIpuKrxF-aIBBG73ZU0pjAOLhiNPJqvXyF0YdCeqeK54u0hG5d7jKYdCc1ETB-WQKpXWE2SlkqxM5lvIOkCTCEe3XaD3zbMX6jYJyif0l98_ICSRv3-nCxE5fghaX56SyhsfnorQLxBjPGV-Mm0Lgs5OI-LW3kIGm_TvrgG7dhMOjSrrBGUuDXFI0i8OMBsN4v3yxkqq9VV3eYUV-1ZV1e2qatMt1j2wglBKrqLCtFHdXlqcNOjBd1wuosMtPzktcV52XVNLypiq4-10hy5O1Zqk5V7FTSjMYWe-aFD1NmYlypb8_lucssCrLxaDzn0qKbGOd7-UN_dESsU2Sn0pqY4qdCMskea_JgNANrrn94v_z9URrWDPDi5P_Jg_SKYCJHj83Zo5YYj9_x7Nl9j9JITMT4hRwKS4x32Rps_9t9PibcC30M-V8AAAD___TqQL4">