blob: b6082ac96ed7048ff0a45b0458b9e5fb29c95658 [file] [log] [blame]
; RUN: opt -passes="verify<scalar-evolution>,lcssa,verify<scalar-evolution>" -verify-scev-strict -S -disable-output %s
; The first SCEV verification is required because it queries SCEV and populates
; SCEV caches. Second SCEV verification checks if the caches are in valid state.
; Check that the second SCEV verification doesn't fail.
define void @test(i32* %arg, i32* %arg1, i1 %arg2, i1 %arg3) {
bb:
br label %bb6
bb5:
br label %bb6
bb6:
br label %bb7
bb7:
%tmp = load i32, i32* %arg
%tmp8 = load i32, i32* %arg1
%tmp9 = add i32 %tmp8, %tmp
%tmp10 = icmp sgt i32 %tmp9, %tmp
br i1 %tmp10, label %bb11, label %bb17
bb11:
br i1 %arg3, label %bb12, label %bb14
bb12:
br label %bb13
bb13:
br label %bb17
bb14:
br label %bb15
bb15:
%tmp16 = add nsw i32 %tmp, 1
ret void
bb17:
%tmp18 = phi i32 [ 0, %bb7 ], [ %tmp8, %bb13 ]
br i1 %arg2, label %bb24, label %bb19
bb19:
br label %bb20
bb20:
%tmp21 = phi i32 [ %tmp22, %bb20 ], [ 0, %bb19 ]
%tmp22 = add nuw nsw i32 %tmp21, 1
%tmp23 = icmp slt i32 %tmp22, %tmp18
br i1 %tmp23, label %bb20, label %bb5
bb24:
ret void
}