1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 19:42:54 +02:00
llvm-mirror/test/Analysis/ScalarEvolution/2012-05-18-LoopPredRecurse.ll
Andrew Trick c3765e6af0 SCEV: Add MarkPendingLoopPredicates to avoid recursive isImpliedCond.
getUDivExpr attempts to simplify by checking for overflow.
isLoopEntryGuardedByCond then evaluates the loop predicate which
may lead to the same getUDivExpr causing endless recursion.

Fixes PR12868: clang 3.2 segmentation fault.

llvm-svn: 157092
2012-05-19 00:48:25 +00:00

31 lines
996 B
LLVM

; RUN: opt < %s -iv-users -S -disable-output
;
; PR12868: Infinite recursion:
; getUDivExpr()->getZeroExtendExpr()->isLoopBackedgeGuardedBy()
;
; We actually want SCEV simplification to fail gracefully in this
; case, so there's no output to check, just the absense of stack overflow.
@c = common global i8 0, align 1
define i32 @func() {
entry:
br label %for.cond
for.cond: ; preds = %for.body, %entry
%storemerge = phi i8 [ -1, %entry ], [ %inc, %for.body ]
%ui.0 = phi i32 [ undef, %entry ], [ %div, %for.body ]
%tobool = icmp eq i8 %storemerge, 0
br i1 %tobool, label %for.end, label %for.body
for.body: ; preds = %for.cond
%conv = sext i8 %storemerge to i32
%div = lshr i32 %conv, 1
%tobool2 = icmp eq i32 %div, 0
%inc = add i8 %storemerge, 1
br i1 %tobool2, label %for.cond, label %for.end
for.end: ; preds = %for.body, %for.cond
ret i32 0
}