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

    <tr>
        <th>Summary</th>
        <td>
            [LoopRotate][LoopVectorize] Suspected broken analyzes after LoopRotate
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          max-quazan
      </td>
    </tr>
</table>

<pre>
    I am not sure if this particular thing is a bug, but looks *extremely* fishy.

Link 1: https://godbolt.org/z/1bfKdadx4
Link 2: https://godbolt.org/z/4hq1931ex

Test:
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"

define void @test()  {
bb:
  br label %bb4

bb1:                                              ; preds = %bb4
  br label %bb2

bb2:                                              ; preds = %bb1
  store i32 1, i32 addrspace(1)* %tmp7, align 4
  %tmp = add nuw i64 %tmp5, 1
  %tmp3 = icmp ult i64 %tmp, undef
  br i1 %tmp3, label %bb4, label %bb11

bb4:                                              ; preds = %bb2, %bb
  %tmp5 = phi i64 [ %tmp, %bb2 ], [ 16, %bb ]
  %tmp6 = phi i64 [ %tmp5, %bb2 ], [ 15, %bb ]
  %tmp7 = getelementptr inbounds i32, i32 addrspace(1)* null, i64 %tmp5
  %tmp8 = load i32, i32 addrspace(1)* %tmp7, align 4
  %tmp9 = add i32 %tmp8, -5
  store i32 %tmp9, i32 addrspace(1)* %tmp7, align 4
  br i1 false, label %bb10, label %bb1

bb10:                                             ; preds = %bb4
  unreachable

bb11:                                             ; preds = %bb2
  ret void
}
```

Two run commands:
```
opt -passes='loop(loop-rotate),loop-vectorize' -S
opt -passes='loop(loop-rotate),invalidate<loops>,loop-vectorize' -S
```

In the former case, loop does vectorize. In the later case, it doesn't. For us, the vectorization is buggy (miscompile), but I could not figure out how to reduce test to demonstrate the miscompile yet.

The suspicion is that some analysis is in broken state after loop-rotate, and LV takes wrong decision basing on it.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVl9z4ygM_zTOC-NMjP8kfshDu7nOdK5Ptzv7eoONHHPF4AXcJv30J7CTxtm2e73ZjGMjIf0kJAGqND9u7wnriNKO2MEAEQ1xrbCkZ8aJepDMeFrtCfIYqYZ9RL_gxxGp9aMlEb2BgzPQgTzimDTCtsdltNpFq5vx_SDUI0mi9Ia0zvUWBxG9w2eveaWlW2qDkHcv-E-q5k_O-CG7UKT_RTFrfyRlmsDh0u43sM7rjKxiNT2BdMzswRHOHJPsqHE1UbrDtVCIO9SBuKfrFQ5SGl6eTOakHxVZeMXiNGg2Ximhm1ht_KA46eDc18AWno36p4nN9EfQMEfRh5mLzohewsm9w6b4G7EG9aj0s4qlUMMh3qvhrDW-OTRCAXnSgpMoWzkfCbqJaElItL4dZarqHBxCKkMkq0Cijbyqskusqgq5-9QvSm9Jb4Dbye9XzGtTdG6K_g5TycmUddoXdEqx_LBo_YBxbmzPasB4ILP0JYtKruvXXoRJsVfk7Os4E5BRkajhmWCuJ3buFZK5aBpkRY1Kg3QXwl52UJiXizCI5KTlZ2fxn9NJMo9S9juiRL2RMJovIQ8ifStG7_PbixWMisjcBQrnsMRP_MCeQRXvQOXvYOUfYK0DFu4IkHjWKNc7DKCqNAbV-sx-lGA1SBnmL3I3A98EcKkZ_xXUr2qlPBeLR5jQvXSc_1yVk8r_szcWUMOkhetyWV0zrvbz6rP189F-HpQBVresknBl5tPnxptVOpkxeBb682yysd69ea5PJ_-zJmZQpNZdx7A-3rsFdO9I3DNrAUWwDNd4pWGdb_wnNtoxByENXwLjCWrMnHhB3prEXz8JIdQTJpB7Og14KP_Hh9BvLu1e4W0MpNGmA0NqNiUfQQjXYMkZaUkmUYkmXyWFC3IKDbkludOGDNbzveRJlzmhlb_u8bLfHzEPm05YjGUv5LSYcP_fY3wHyUPn0Ii97x38RdrqZ-Iw_sCHGoi_ejzJodPKOoPOBFuviOQIbtYvfMNpO9he1JMbrmXYm-gOCFNMHi2y_KNwC-hHULihPCpr_Dpnccc9ozh5-E4ce8TYPBuNbQyHWliPXDHr2xpvwy0XfJvyMi3ZwgknYYvn0QNC_TUi4WE00t_Picp35Cs6iTTwkyPBvRe0NPryCrAYjNxeNTHCtUO1xCAgIeXT6RP3Rv-DqEgKawcsK3qXF8WaLtptUpYARZGxKmf1Jst5wRg0ZZ6ugMKmgEXY89Y7jw2BArytPIRvDvLdQmzpitLVmtKEpklWLiHhrEmyvGLrquRZgp0CdEzIpffDd1cLsw0uYR1YnJTCOvs6iUWPBxKEWHl8NrhWm23HDvGPgb0wtQjWt8H7fwHSyOrG">