| 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