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

    <tr>
        <th>Summary</th>
        <td>
            LLVM generates tail loop after vectorization
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Example on [godbolt](https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQAHZpAAdUBUI7Bhd3Tz04hNsBPwDgljCI6MtMayyGIQImYgIUjy8uYtKkiqqCHKDQ8KjpBUrq2rSG3tb2vILugEpLVDdiZHYOAFINAEEsGgCAanQFVAB9WlRRWk3TVDx0TYABPYAtAGY3GPRlFiE9lggYgmJNhlQxHgmAo/jMGOtNosAEwAVg0pE231%2B/0BwNBbnBmCokNhDU2eAAbJJ0ZjsdCYVCJjj7hpIZEAELLFabHEw4mLe4AEU2YkOokRPwRgOADE2AA4mSzyTDIVyeSYjkwBWR5XgReLJayCbLubzFfiiULaGrRRLVlLYZEdfK%2BUrCdJVeqzczWWLrXr%2BfajSaNebWQBOd0Kz2Gx2mzW9EiYZWs%2BEx8kO4Xhv2R4jRpGsvEZ6Xep0Rohpg3s2FQhHZ2EE3PJl3HE5nC7XEzmAB0xqomFsbGbw2qzZiGgg9vFZZ%2BrMiVOh93u%2BajRc2cfLMMiVd9LpCvwMYRO5K4GiZTN3IBZx5Pp7P54vl%2BPHPpiLTO2t5PupdZ079O641sOTEuXvjlpXZ0LRhLgoS/AFf1DRdKzDVdgK4e5rTwZAWBiTY3FoAg5w/BEdyhTV13xT8d3uBFNxKTMYTIpgt0zSR91WKQjyvFjWLYm870wB8OW5Hc9z9WtTnOS4ribFhWzwdtO0wZtHD7AchzFEdfnJcdqTfNcNxoiinxhBiVi4GFmLYkzTOve5bxie8QR4zN%2BJrXkhIbUSzHEtsOzwLsewIeTByJYd/xhMUJyhKdNR3bVbO/S4kWU1lE2NPN31xK0oogos4tUwDwtxN1bOADsSkwNhBAzfwQjBB8/0XLgYKHHdIhykDAzSn8MsCrglNgoDNlTaN6txf1MthLqkzgzZBPrESxIkqTPJk7zfMU4aYX9EKwuSilaVamLBUCqjuqaqFiLlaL2sXZdDs2qEwPywr6BKggyoYCqMSqqDR3JKE4wGikuCOxCdvOz6SxfMaer67CS1IwKhqul0vvZU70uqkHVuy66ZSB2LAoSn0eq%2ByLkba1GVIA%2BHgKhVK5QKggise57XvBEFSdZWEEV%2BqECRnQtOYdRcqYxhGSzy4nIP5tHRsS6tKZasXlRWg7waamlwJJj6yaXIXgPuE7uVp%2BnGCe0dysqlmNbZuHfppHn%2Bv8r6usXXXtYmxypsbVzZo8rs5P7PziUdtG1vUzVJuEj2W3c6TZPBJb/MDzXgpDv1CPI7dYWffTn2Mszc5YjirK4my5R3PTNqnNXxZWy7lfLpHdXQcXXxh/6UwLO3ixhe4Jc1mvpfG1PtPTkD7KZe4jLzyerwL6zH1xei/TTLCpv3SJOX0pksGQAxC3dlzI8k72Fr6Hy/aHTyWCqYA4v%2BURvlmTB1vw1ZN8wbeqmjPeZqj%2BaY/QOPiQXyvjfRU980xP30kwAgPw8AhDcHTGyoVtolwZJqC0UI%2Bi0wALTIBiG4aE%2BEuQENMFwLBqgxQEiwUSAhaCcQYKvh2LB7YoEPwUDQohN1oT0iJCEQgpAuEKCUPwqE9JBGYHwjdSEL815MigTAuBCDqS3RQbeW%2BvIQhMGQAAa1BFQNM0Z/gKAAJ4MGQCSAA7v4S4liTBL1mKKNgLASBGIgFfRxR40w/nMcQQgj86Tr1WHInxCjMCIIrrZRYDILFWP8UyDgUxaCcBhLwLwHAtCkFQJwHwPgABqABZTYABJAASr1GYcxoyTh4KQAgmh4lTC0SASQkRmw0kkBoSIFJx67n9JEUsiSOCSBSXUjJnBeAKBAPCWpaT4mkDgLAJAaBUJ0HCOQSgSyYgrIiHgOYBgjC1Q0PCLAphkKYByXgTA5iADyMRGCcGqTQTC4QJkQBCCM3hzBiBGPubwD5VQjFXJCNoN%2B0zqlLMelchgtBvkzNIFgOBwAnC8gmdwXgWBL5GHELC/AaYbB4FMKEkZmBVBv3gQsap/g6YDPScadc/yXBYBGTAlgPyphUAMMABQ5zLk3LuaimQggRBiHYFIAV8glBqBGboBoezjCuX0LAiZkApioG%2BEkFFWCrn3F4KgAlxAfFYCVRAKYVgQVJAcOCAY9RSC%2BH8B0fIXQGgZESAIK16R4guoYKMToEQhhFTxQIFo/RXB1D0KagN5QT7eodb6ywJ83VDCjXasYjqTXlPmBIBJSThmwsyRwCasrNi1WbBoEtmwIC4EICQakXAJi8GmVoCYUwECYB/F0Y1pBGkUmbASf0q0oTNKJGKf0GgoRDQGUM0gqT0l5vGZMmpdSm36E4FCHNM6xkLpmUuvVCR7CSCAA%3D).

Example C++ code:

```cpp
void upd(
    uint64_t* __restrict__ a, 
 const uint64_t* __restrict__ b,
    const std::size_t count)
{
 for (std::size_t i = 0; i < count; ++i){
        a[i] += b[i];
 }
}
```
It generates tail loop like:

```asm
.LBB0_6: # =>This Inner Loop Header: Depth=1
        mov rcx, qword ptr [rsi + 8*rax]
        add     qword ptr [rdi + 8*rax], rcx
        inc     rax
        cmp     rdx, rax
        jne .LBB0_6
```

Shouldn't this tail loop be fully unrolled since it can at most be executed 3 times?

For comparison, [gcc](https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGIM6SuADJ4DJgAcj4ARpjEElykAA6oCoRODB7evnrJqY4CIWGRLDFxAMy2mPb5DEIETMQEmT5%2BAXaYDul1DQSFEdGx8bb1jc3ZCQojvaH9JYNlAJS2qF7EyOwc5mWhyN5YANQmZW7Ik/iCR9gmGgCC1zcAbqh46PteiegQ9/s/b6EEADZJAB9AgAKn2wOBxEwk2IeAcUP2TFIh1uv32aAYkz%2BgiBoIhUJhcIRBCRUVI31%2BWJxZxAIFSAC9MKDMStBAsTAB2Kzo35Un78Yj7CB0hl4ZmsvCHMoAEX2GiOFn20qObjZXguZWV1mseE5PIFGORJgArBY8Gb5bq5fsomaLValUbubL7q6OEtaJxTbw/BwtKRUJw3LrLPsFCs1phDmYyjxSARNJ6lgBrEDxgB0klNZhzptNAE4NGUABwAgFlaTejiSP3JoOcXgKEAaRPJpZwWBINAsRJ0WLkSi9/v0OLALjx0hYB4IzAANTwmAA7gB5RKMTgJmi0AixFsQKINqKhBoATy3vBPzGIZ9XUW0HST3F4vbYglXDFoF4DvCwUS8YA3DEWgWxfadMBYQxgHEX9pzwGFOgeWEG0wVQOi8PdL3IQQqgbWg8CiYhzw8LAGwIeEWEvJYqAMYAFEXFd103cD%2BEEEQxHYKQZEERQVHUODdASAwjBQMMbAIqIW0gJZUESGowIAWlXMp9kUlgFCUXhUGQ4h4SwaSICWdpOmcCBXDGPxJ0CBh0D6YpSgkUskhSNIBEsiQKlyNyGHsgY4i4ZyTJqbpRk8FpPMqaouimPy5gCoKpg86zJh6OLHMC4yo3WCQvR9es4ODDh9lUctFKBfZgGQZB9knTMuBFXBCBIWN4wWXhny0BY0wzU1MzMKQBq4DQuQBMxSw0DRTX0Tg61If1AyK5tW3bX9OxgRAUFQPsBzICgIBHXaUBEicAUmiDZ3WRi1w3f1tzoPdiAPI84Ovc9sLe2970fBxsLfRgCE/b8G3/QDgNoUDsKwKCjFgwN8EQxxkLAwM0IwrDwP%2BPC4Mk4jb1IjZAwovAqJfGi6IYpcbpY7dZA48RuLY%2BQlDUBtdACE6xMsax9EIwzZPk9IlJUtSNK0oNdP0lCZKip90hcWzkpsuyZgcwYEm8molc19J0vV2XTNqJLwvGA2Qti1X/L0VKwqyKzhjSy34ty5ZVhyrg8o4X15obIqSrKirdmg2qAUzDQw8a/AiGFLYPY6jserKMpMyT1O0/TmbawKxam1sFbOpTTOzGz7Tc4L7rSF01JnEkIA%3D%3D%3D) processes data by 16 bytes at once and doesn't generate loop at the end, using only single branch.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWEfT4srO_jWeDXWnHAmLWXQ74Ygj2N5MOdHO2Tj8-q_gnfnOnXPP3V-KsunWIyGJth6JcBxz1KTpD4yBGMN9C-cpa4cfoEFplcftaGTt2GXt0I7fojbZfvBrWHdVemibA8ZA1CZRW00Yw2HkOZumbsQogJECRgq_RN_bAX02qB2jwM1XUQYE2CeMya7AXwwfamwNrQSqQCBMNgahwbNA2xc4aeAEzEWYNBNuwEIXZTJ9HmxjHuGmB9j1DCFQWtg4ALjg2i1AewHBd-xJRgRLhEBfw7K6BMBZOKVIgCi4E1DoUUzXBZZnzgGA4RZQOKJkgmvQAZC40JVOMEsoZ8fpTB-hsXCoKljpqE1auG2iZEq1jyS32M6zPyll3vfsVeHMs1J00B16crBFaorIl6TOiO_UO5fkwdW_AUHSAc-PImJB2JjCHcDLo7KsR0k5d27FHR9AwwcTEH1KNKxKyPlLhZCPalnPKnO9ohq0GCkUmnib9HYE_ALuCO94kiIwkiEhRgo4XHQYNbBm21LPOJdMAYhkGQ-KMWH9OysXxSnrpIAHvKoKYXTlF7pWUxrwLumXt7a0jMVCN8DxJAB0be-bw0n3LbX9olzgw2I8ZKWqHG5spM7RLjzz3FVDcbAs9V6pfsAnT-XjizuwiXxP-z3eHw918IbP7jMs7FBPo4cJbwmu7KS4kvX-uPC5HzzGD4Rfz-WN9rIXadGF1Ynjiw-OXtrhVpt1iBpJwcyuAcnzlCFX1JVnGvbk8XsNIL72bS2MkRgtZL8HuYjQ5SUEwcfsoOX3W3ah5s8qLKyYjJ-qpuX35KJ27GvRfOvGKLSYB45OSTBYGaM7GQz9qj4axtXoctW5kRNjzF0S4KfL7UgT483hZ-9VVJ0X4KqVqai1MVIAwpPgrETZuXuCFDplBmcJwAPmjk8JLUDMgpEC5JMtc-4EtTrnhJqhoK-Ko_mO1KEJ323rQjwUs9heQvFQ_fp8whd4vj2Ya3zZL4_JaW42PeSRkD32JZlu-BJMV-4E4mwX-OTZyHHSO0891tc2z5s1g_k9p0WhVv1yd26vlInWPD2bFr3rnwDlwSszKXLt_cpP421f1DFdpNSBm-wnGCmsmebKW6YkukVF9-iGkYJNlw-XqHhSN3SKWBW8bVE70pO7cMu06kR0A9xol4ueQbA_F7OA8Pw-o56KfOV6TaRsKzmw281ZG9kBVTpqOb1yQv04rU9CmzK1L3e0B9AYeHuVyt4x5PK0PzWXDn3vwivLbOdVeA9rFbpsX8x92Au5WoUqOXpBwo1kzy_GtgxHqCC0tT7ba3bfcxYlKzy9iHk5s7eVTV63_WivTy1Mh-OJtQlpUbJ-rvDXK3BP-NyX1_u8HY-BDUkVtHaDp_0nZZtaRiEh3iXwWV6Rkt0VxlQQyseUOXkvyAt2Ejx4_v4B9DxrNeZ08xMr7v01E-19oxvJYKarNdrHSQnC0ausBzotYVhXiywXxy30JA8ZM3-a793HSiOyKZ5sY1_VehTM12fXXZuP5HUejvPoed7k1-vWjdF9D9rzMDLGydhzN5lE4uXud3nmC_JBxUcnMKAcYaSgcbuHOu5FsIZ0SvzH8-k0pDbuMeMX-aDQ9cZYlOHofaN7a_DYTtVT7a6JZ8aet2YYKRzdRb1R-ZqltBwT9at7ioQxGU7JnZQgpQt139JhUY_7lVjTHCMFx1HZ7kXZ8s3Du3IUTbCyVFLt0rk8kcJwvG4YKYRXZ3uwvQ_o11dNsV5V7UDitRCBfl6itK8LIw364uuZ9jFSMG9Gbnrbq3ha7uWMrwaFlwtAxnIGGRdfHXFr71NbLYHcs7grfRRzfAGqI8FcpEP-qwbNJq9rwqLCHq0mny-uDbKQjU1feWWkCk9-yxuLy5ltphOtg-cyy5uoAzOvsK6x9PxFhqJ_XYrE5tUzwWg5csAMWa63KcuM0sfXzyWZmSaaAIQEFExdw4M3YyoAyLQmmqwNwOlF23SVO1AlakXRkQpsKEpIeFqrRePvGtJosWmi4nx0BuJxlZqVLTRWkoYhsHxOUoWHcXY3DrlryMYwUxd1uYKJLQVTXq6LgQDsAQzexCMDYA-E6MdruzkZrZgA1RldOSxuA9ssrXrByxK2tiTI6_HUXGTeHXP7xtrQ9txCbmAKFAgM9tGFDl2XHFKBDELoyviVvZk2sjcfDVJ-RTcfooIlTNxgVdBlpeLDzUMOYHLAbZolsrHYO6bD0qZcmpBlNSrbYQ5FY44WjrmbheDJrN5-FS187ytVS6s4QxN8lbsuCegGF9CwZ1Qni4ceUGXEK6-y76Ic-hGkBU3hy6CGd_iikDmG3TvpR58z7DhMYowUNg_6UHRAhYyty1ygaQCazK6WlDqHeW0iZMH86gsSuJ9RBXsoRi1s071gZw9XQR6UoMtb8esglYLwYIeGEmgFgWoFT8Fn7xZQ_Dsy7zKIbyzwL5bNfhWQM8SfkmeKKOBtICnE0aLR3PqK5rS8mWWCs5qS8G4BLA8SHK6ESGdM55S2SXTcFvlM3Tm28MLRL3rHq4waSlC2naxexs1a2HAc9Jx4RLDlp3qRWJqXWDMsPSDnZ7G-t6zvLjzrv9sIAfeJDoqlW0fAfuI93jq6IovKExdRa3Gm6Go46h28Yl5ioNVdYtfUkacF9qprx7VUu9qdX3fWOrE2C97VkeIw8vIdwzkMB1_X3z0ki70bF3iI2yR9943_BsGO-Nc77rqvnVebJ4e5SzDy_LVxOBwOc95MR_rnhJHg8PPnkI7TkMfTz5-HECPZwy9c3Dbj9N-hEUayf1n8Ao9T8naIAmO-pz-nQ9zOzYSRl1_OneAvhWc7HDDy_Hd4fsAo7oBjFPx8ZH_pU_DwFXH-NvX_Rn69QoyBOcZwHwzFHaJfa4z6DcRO3G8HuL-l6WspTQeUNukQTul4mMK8OlRt2x2qvPyv-Q3H-mvnuwoh_vOIUeCAkdQ7AIzinSwfD1LTpMNBfVu6pmGSDm8Ml3ZThlEc8WcQdfs6DPH6zn6_tENy6KbhPSgMY_6O63DGSDCE6zusP4NPks_9T6XkP5RI9mP-D928iT_3N-QPQVx3X4Lk49B_yIsmPfwO-5_S-XW1s3aukgYjT9Nheufjr8RG6eE5V9V2mJuhrao0OYx5E6eHfDrEYXMIp0PdjtMblq5pPE9pcqAOU16nI0YJ__4dQjsc4rbuwiEf2-ZzdhmI4vh_b7DiJNAB1gfm7M__OF1J2tGeASfTnIxAXNDA6gqer7YSgGPLttaNg6f01Qxy79Os9BAtlRNWoG1kbUQMx0u8o5l87TCfsgi80OfmiuBMW-ATcT1HEVHEVMCabfEKrxfZ1ysg22QvnPjttsRM_cg2nfGBbtbB4ySVGCnkrHVBtYhYlthjEPUZfTSmNE-RecFIYcRIITryPOACGcALQEBpyOUGV34pSSkFsWuQjiBlxPyiyBD45f5xDOWwlTJXzmLJgqzl3qVfg9hDXoMVSIIN2IumcJo9QTA6AJLK3lKM25zOfnFiIZ5VdFCPL_aqtYD3SDG_CQ2J97eoCDw0B487UY8pzxiSIN4sGYEB-mcxYqKeeY5tHar3sHKjOVJP_fHGT6G8OtFnsFgmxXLlhVIH1RgFdiS6jKv9rVhtYOnysUJw4LkVQbys9CDbu0kHPK2LLoALQEIVOmmR2wYlt7fYQwoPQsuQu2B5QEkHoyXjD7W083fiXvhNBWqx4pkPaWkHQHeWGoATgoylaA6S6xwH-SqMpiLpvZLBFjgb9YLGLkrBxXMf-NV2KIF-RT6qPE5oBZp7sYtrn31AcfwDPdZnmGjQN1d05b1Lty-icEPpgxfx5W7e8rORqJRkmj2KHujM5n62L2cViIuU8g_-Jfs90Hwg8J6QEDgVc1-szPPmevUVM-B5y7xf3RuXABssBTQ1LQJSLz1wJAcub4vtIoFH5WndpXQrJLCul7miSWe0vYS2xD6S7lbHLPQ40VhlnIUZzh39zkalO5aZrUuQH3NTqTZ9E68j8umcDjZH7qPOKs9CZ2h92M55bWwMYlulQ-fjLmfHm3rVWHprqQdrvqxLOtI3jssulRtPggKfARLNAF7KxtFmKHiQhdJDp5eHlzUbDn182V1C2zXFhD3NmbMJtdVecM5yPNxBR0J6EmBTmOlBRd7ltiILuIJpjHCXWCTBqxe6kM9j4NY5F1APKycW6klMe2skOTCkM317xZdRTcnLCX_CdVSfFmL59wN0Fql3B84hvXW5UVkUthDQop95c11LFSwaLi0Dtxhf8zRLayVdRIRUBGBpX6CXn2J-lPwujjr_lASAPluz6n_AZsW5cEoAyx9XbQzXCy8te2CUF6mS3cnWFbzVEwOv2EDJuwuexY-97MZ5C1C8-Hx9rtsqJi4y_rqTnqP3srq8RECaU054GCmo-F1Z-k3Zs8LeKHramOCebQM6t7RHMG0k9fag5ENSI7IH7s6Zyzl8t5O5KKi-4R-LMR0UrdM2h7jh79mmjsJFWcOaGIXo1jnObRf3kxPT6mmwBZyQG76UfjdFf10uh25o43Qc0_GQhFN4iLYDcTxE25vHw-nQvkklbJJD0qbjFxP95vkvIgrf1JQe0iZ5c8c85g06tE21vfkIVekhGsImzv5owr4lP6jkQl3Cb-kP4nhmaIY5HU_fsh8XgmaS05EhEupJEjQekqcTHdMUwZyT8wknvuU_SJykcIbCCRq_kKfvJJnExDFKyQsRxk-Gwmg8rcO8-l5Vr_rNU9_ycZzTH0cKJ4hvVRil1fj5v5Ekm3Q5fIQYSWIM92348db5VzSjEaPxKh-n8S8rUz5V6Q9VvWv_2OaEzykdDq80ntoh38Mpb5tv81D9-Bt95lM2R9_jtsZI4W361-1f3dAWaTy9GePt0JsYPg7_XwAAAP__HhC3MA">