Summary: The isKnownNonZero() function have checks that abort the recursion when it reaches the specified max depth. However one of the recursive calls was placed before the max depth check was done, resulting in a endless recursion that eventually triggered a segmentation fault. Fixed the problem by moving the max depth check above the first recursive call. Reviewers: Prazek, nlopes, spatel, craig.topper, hfinkel Reviewed By: hfinkel Subscribers: hfinkel, bjope, llvm-commits Differential Revision: https://reviews.llvm.org/D47531 llvm-svn: 333557
36 lines
1.1 KiB
LLVM
36 lines
1.1 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -correlated-propagation -S -o - %s | FileCheck %s
|
|
|
|
; Testcase that checks that we don't end in a neverending recursion resulting in
|
|
; a segmentation fault. The checks below verify that nothing is changed.
|
|
|
|
declare dso_local i16* @f2(i16* readnone returned) local_unnamed_addr
|
|
|
|
define dso_local void @f3() local_unnamed_addr {
|
|
; CHECK-LABEL: @f3(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: br label [[FOR_COND:%.*]]
|
|
; CHECK: for.end:
|
|
; CHECK-NEXT: [[CALL6:%.*]] = call i16* @f2(i16* [[CALL6]])
|
|
; CHECK-NEXT: br i1 false, label [[FOR_COND]], label [[FOR_COND3:%.*]]
|
|
; CHECK: for.cond:
|
|
; CHECK-NEXT: [[C_0:%.*]] = phi i16* [ undef, [[ENTRY:%.*]] ], [ [[CALL6]], [[FOR_END:%.*]] ]
|
|
; CHECK-NEXT: br label [[FOR_COND3]]
|
|
; CHECK: for.cond3:
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
br label %for.cond
|
|
|
|
for.end:
|
|
%call6 = call i16* @f2(i16* %call6)
|
|
br i1 false, label %for.cond, label %for.cond3
|
|
|
|
for.cond:
|
|
%c.0 = phi i16* [ undef, %entry ], [ %call6, %for.end ]
|
|
br label %for.cond3
|
|
|
|
for.cond3:
|
|
ret void
|
|
}
|