Issue 63840
Summary Assertion `detail::isPresent(Val) && "dyn_cast on a non-existent value"' failed. in getStride
Labels loopoptim, crash
Assignees fhahn
Reporter danilaml
    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))
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to