| ; 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 |
| } |