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

    <tr>
        <th>Summary</th>
        <td>
            LoopVersioning: unnecessary lver.check inserted since #92119
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            regression,
            loopoptim
      </td>
    </tr>

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

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

<pre>
    The following example:

```llvm
; RUN: opt -passes=loop-versioning -S %s

define void @ident.check.regress(ptr %arg1, i32 %arg2) {
entry:
  %cast.one = sext i32 %arg2 to i64
  %cast.dead = zext i32 %arg2 to i64
  %gep10 = getelementptr i8, ptr %arg1, i64 %cast.one
  br label %loop.body

loop.body: ; preds = %loop.body, %entry
  %phi = phi i64 [ 0, %entry ], [ %add, %loop.body ]
  %mul2 = mul i64 %phi, %cast.one
  %gep13 = getelementptr i8, ptr %gep10, i64 %mul2
  %ld = load i8, ptr %gep13, align 8
  store i8 %ld, ptr %arg1, align 8
  %add = add i64 %phi, 1
  br i1 true, label %loop.exit, label %loop.body

loop.exit: ; preds = %loop.body
  br label %exit

exit: ; preds = %loop.exit
  ret void
}
```

has identical output after running loop-versioning before #92119. However, after that patch, the following diff is observed:

```diff
diff --git a/lver.before.ll b/lver.main.ll
index 1944ebb..c8601cf 100644
--- a/lver.before.ll
+++ b/lver.main.ll
@@ -2,22 +2,44 @@
 source_filename = "hand-reduce.ll"

 define void @ident.check.regress(ptr %arg1, i32 %arg2) {
-entry:
+loop.body.lver.check:
   %cast.one = sext i32 %arg2 to i64
   %cast.dead = zext i32 %arg2 to i64
   %gep10 = getelementptr i8, ptr %arg1, i64 %cast.one
+  %ident.check = icmp ne i32 %arg2, 1
+  br i1 %ident.check, label %loop.body.ph.lver.orig, label %loop.body.ph
+
+loop.body.ph.lver.orig:                           ; preds = %loop.body.lver.check
+  br label %loop.body.lver.orig
+
+loop.body.lver.orig: ; preds = %loop.body.lver.orig, %loop.body.ph.lver.orig
+ %phi.lver.orig = phi i64 [ 0, %loop.body.ph.lver.orig ], [ %add.lver.orig, %loop.body.lver.orig ]
+  %mul2.lver.orig = mul i64 %phi.lver.orig, %cast.one
+  %gep13.lver.orig = getelementptr i8, ptr %gep10, i64 %mul2.lver.orig
+  %ld.lver.orig = load i8, ptr %gep13.lver.orig, align 8
+  store i8 %ld.lver.orig, ptr %arg1, align 8
+  %add.lver.orig = add i64 %phi.lver.orig, 1
+  br i1 true, label %loop.exit.loopexit, label %loop.body.lver.orig
+
+loop.body.ph: ; preds = %loop.body.lver.check
   br label %loop.body

-loop.body:                                        ; preds = %loop.body, %entry
-  %phi = phi i64 [ 0, %entry ], [ %add, %loop.body ]
+loop.body:                                        ; preds = %loop.body, %loop.body.ph
+  %phi = phi i64 [ 0, %loop.body.ph ], [ %add, %loop.body ]
   %mul2 = mul i64 %phi, %cast.one
   %gep13 = getelementptr i8, ptr %gep10, i64 %mul2
   %ld = load i8, ptr %gep13, align 8
   store i8 %ld, ptr %arg1, align 8
   %add = add i64 %phi, 1
-  br i1 true, label %loop.exit, label %loop.body
+  br i1 true, label %loop.exit.loopexit1, label %loop.body
+
+loop.exit.loopexit:                               ; preds = %loop.body.lver.orig
+  br label %loop.exit
+
+loop.exit.loopexit1:                              ; preds = %loop.body
+  br label %loop.exit

-loop.exit: ; preds = %loop.body
+loop.exit: ; preds = %loop.exit.loopexit1, %loop.exit.loopexit
   br label %exit

 exit:                                             ; preds = %loop.exit
```

This is a regression.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysWE2PszYQ_jXOxQKB-Ug4cHiz0aqHqof2ba-VAwO4NRjZJu9uf31lQxKckK92o2gJZubxMzOeD5YqxeoOIEfJFiW7FR10I2ROpaZ1J7rVXpSf-fcGcCU4Fz9YV2P4oG3PAUXfULBDwfFvGoxfzg_ttBRt8a-__4Kib1j0Gns9VQoUinZciN47gFRMdAbR-w0jkqg5XAkV6wAfBCsxigNWQqf9ooHib19CLUEpRDa9lkaRyjpE5A2ziEy3BJEMo_V2xIJOy88TXWxkCqq0LzrAKNphBR96roy1wCyNL8VLoKWV_-ehfA19GFjZGjRwaKHThizbGJ6XtNN4TukIs5eY0z1w88w4zDehmLvovBh9w8bXvYRS2V0dFfJm7kcnnCn2DbOi5moZJFsczGUxSnb2PtlatmU5PT0hW4kzYjtwYiHbgR-N6hs2aV2aN3kpeuQl68qZm8wuMww-hoQLWl7rReaeclZ3eHPUUVpIwGwzKi-E40J-NN1uYq6uXeEsWCzEWg5glt24wQfT16uL0bSi96O5cDqs1gzqPspZGmMJ2qbYpL3eXeTyHLWhCts0ZAXlWAy6HzSmlQaJ5dDZPL7M6z1UxtmIRBkJw8zHP4kfcABp3Ww1dUM17qkuGrOmnTpTsqrCTGGxVyAPUN4qOEZuKhpGw_NqpjFF5J0fQPojB59zvD8utZR1PuejDutK-MBhFsew3_t-sUmDsKhwGARpPKW053kLeBMLsh2_N-BRHKA4wB5B5I2YirE1v-IYjw-mQCgxyAL-rBiHjrYwxYs0tCs9CeVQ2A0JmduPv7JEem6NRGR7OnG-Ncrizmroq0X05Sr6NWXUBMaszpxj8VjR9rgD1x-nfLZaY0q7ustp7PfN6CQhWX1T5Hxerl3sAETG-luf25VhHifHigU2583ukHIYPdr3aPptv5w4jeXz_ORmG1oGuu5Ldxi4Ws6RMI3kgoTbuK5gl4-WbTQXQC_2syUvjf3pAvdGm3OZOg3MQrk9z5W-1_2OPBwfL7RCF_E6iW73Rd_8ut0gnzuoffPMCZ1lBn5iuvKc8erJzytTmPf1Y9jcK1_JerGMPaQ_13ptmHx9mvyScfI_zZMvD5RPTZTe_xwpX8q98AGUe7jctH14yp5qHHf61Wy4vcskfEjl0VD9cP9ZXXh2UJ9TvT-Su9FYrpFLxeuSH34uLM-4Zga99ELwvWHKzOcUT-MmE52_KvOozKKMriAP12EWkWwdhasmh826StYVrcJNsi_JhmRpRNI0I6QoSwrFiuUkIHGQkiRMooRkfhKsqzKJ0qoIC4CUoDiAljLuc35ofSHrFVNqgDxL0yRdWYco-28MQs6EzNBM3hAhxiLRa9aalWS3krmB8fZDrVAccKa0OgNrpjnkPwvR_3F6mzE-HboOClCKyk98biqYdQqkhhIr1hXn953VIHneaN0rMziTd0Tea6abYe8XojVvC_xwvHi9FH9BoRF5t0YpRN5Huw45-TcAAP__T-sPpw">