Files
clang-p2996/llvm/test/Transforms/CorrelatedValuePropagation/pointer.ll
Karl-Johan Karlsson ebaaa2ddae [ValueTracking] Fix endless recursion in isKnownNonZero()
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
2018-05-30 15:56:46 +00:00

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
}