<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63840>63840</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Assertion `detail::isPresent(Val) && "dyn_cast on a non-existent value"' failed. in getStride
</td>
</tr>
<tr>
<th>Labels</th>
<td>
loopoptim,
crash
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
fhahn
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
danilaml
</td>
</tr>
</table>
<pre>
3a57152d85e1b9f993871d550846f193ab91450c Introduced a crash in `IVUsers::getStride`
Reproducer:
https://godbolt.org/z/r5jj4jdf6
```
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 @hoge(ptr addrspace(1) %arg) gc "statepoint-example" {
bb:
%sext974 = sext i32 poison to i64
%sub975 = sub i64 poison, %sext974
%add978 = add i64 %sub975, 144
%add980 = add i32 poison, poison
%sext982 = sext i32 %add980 to i64
br label %bb983
bb983: ; preds = %bb983, %bb
%phi985 = phi i64 [ %sub989, %bb983 ], [ %add978, %bb ]
%sub989 = sub i64 %phi985, %sext982
br i1 poison, label %bb992, label %bb983
bb992: ; preds = %bb983
%sext1046 = sext i8 poison to i64
%add1047 = add i64 %sub989, %sext1046
br label %bb1092
bb1051: ; preds = %bb1092
%call1052 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr nonnull elementtype(void (i64)) @hoge.6, i32 1, i32 0, i64 36, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
unreachable
bb1053: ; preds = %bb1092
%add1054 = add i64 %phi1094, %sext1046
br i1 poison, label %bb1059, label %bb1064
bb1059: ; preds = %bb1053
%add1060 = add nuw nsw i64 %phi1093, 2
%add1061 = add i64 %add1054, %sext1046
store atomic i64 %add1061, ptr addrspace(1) poison unordered, align 8
br i1 poison, label %bb1064, label %bb1092
bb1064: ; preds = %bb1059, %bb1053
%phi1065 = phi i64 [ %add1054, %bb1053 ], [ %add1061, %bb1059 ]
unreachable
bb1092: ; preds = %bb1059, %bb992
%phi1093 = phi i64 [ 0, %bb992 ], [ %add1060, %bb1059 ]
%phi1094 = phi i64 [ %add1047, %bb992 ], [ %add1061, %bb1059 ]
%icmp1050 = icmp ult i64 %phi1093, 65536
br i1 %icmp1050, label %bb1053, label %bb1051
}
declare token @llvm.experimental.gc.statepoint.p0(i64 immarg, i32 immarg, ptr, i32 immarg, i32 immarg, ...)
declare void @hoge.6(i32)
```
Perhaps
```cpp
if (const SCEVAddRecExpr *AR = findAddRecForLoop(getExpr(IU), L))
```
needs to be changed to
```cpp
if (auto *Expr = getExpr(IU))
if (const SCEVAddRecExpr *AR = findAddRecForLoop(Expr, L))
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycV12P26wS_jXkBiUCbGy4yEV2941U6b2oWrW3FTbEYUvAwni7e379EeAkzlfbc6quA-OZ4ZmHmTGIYdCdVWoN6BMgZLcXewsIAfRlIcawd34thdVGHMyicfJjXQhaY0okowo3fMd5wWosKUWsrHaYF6LhuKSohZ9s8E6OrZJQwNaLYQ-1haBCn75_G5QfQLEBxaZT4WvwWipQIYBeANp8UX2281EjifYh9EmfbAHZdk42zoSV8x0g2_8AsvX09bV8lbsqq0dX-X-aBuE7FaAUQRjx4cYAQfECASFqeQDFRi17UiNQbAqSHnGKL6dxVJXpsdTHwY5FI0zY0rI4qI42Vbn8msQ6ipc9Ob5g019B8jsSeZ5DDF73Rh3hvbPqR1UuR_vTul92abQd35edHU9W-SnVTlsF35yWEJRo7zoFCOuDh0JKP_SijXMMCIeAUBFJ47Br4wpDEEH1TtuwVO_i0BsFCIGgfsqem-a0AzDaDuo98LpM-OIY6oLA3unBWRgcjMzMlMeG1zTrjk18OakC8jxzNrMQUvKaJQshZbI4-YlGuLzWZuisfYISVafRFXRGLqGfvVyibzw0olEmKjQNZ8Wc7iwoNhAUT7D3Sg7Tfk2qObqmmS3e7zVnmYp-r3Ng9OkYHOMnG84KCOhLmmeFzMlJIb295JjxC45Py81pZmQWmsYzouZxcnItuYmck99Efsk2RmU1o5vdTZQcIUZlfW_bT8wc_d3fIIw4ucSJEcUPgJ6VE9JWGIMRzYkRJzC4n8pCQFhESZ5joqSMCn42m35Wq1UqqxIZ83ZYqfdeeX1QNgiz6trVubxWPcoeIWGMlCj-m_xANLmH1lk7GgOVUdFH-Ohj4ea6nuDwablY5Kvq6AFfuIqrFNWlKA_4lFVEKteH2EYISz4jyaRrl0a_qZN4nmuj9Uq0e9EYdcP0o2K4YjrtMy2v97nfa4x4-XijH6UrRpTfiI6JNYPHH8KjxTW86txP7PgL2uHXJcxU3TdBVfg6qCnW-0ENwXkFRXAH3V4YVPiYCTeNe6qd0TovlVcyKgqjOwvZX1GVU_kPNZM-bA-oOveoK94SMdXd5nbJQra8bW_HuE8r_WXePWxFF2j5KQfPm3iDFc3V7yJEDxGeU_ghBWX9R_-PGQCE6vbQY0RzbsYJHE24k5gVpcVV5cysb8unuBXhieX65fKE0Rrh1bE1_g_dTh8O6cCRW9B5du6mD1Vyb70HY37SiU2QpW7M75798vOz8nvRD1cabd9nid7FBts6OwT49fmf7xspv6j2n_feQ0A2my-J-J22Mr_YOv-vcz0grFMhagHCPn2bGum_uUnfBWNVTNTgYKNguxe2UxIG93tUYgwuoshoihd4syY_bvn_HUb29wj7Qq4LyQsuFmqNK8YJqUvKF_t1SVBLWlyTFim0E3XZ4kqWnNKWc1UysdBrgkiBalwgShHlK9pQplrecLrDBWYtKJE6CG1WKaGc7xZ6GEa1rgpWokVKzWG6lxjnetcHfUjfp2dASLpSTDcVv44els3YDTE99RCGs8-gg1HrzTAoH7RLVxCpgtAm30D08NmrQdkACPsuTD4nV4BU6Uv5YX-0YgjQWSjiF3qp3vUQlA3wTZgxfy1ruBPaKLmKF5zThWYxerO-urnosB-bVesOgGwjvuln2Xv3qtoAyDYRMACyTRz8NwAA__-dO6yP">