Skip to content

Commit f58312e

Browse files
committed
[ConstraintElim] Add tests with exiting latch.
1 parent 5dd1c82 commit f58312e

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

llvm/test/Transforms/ConstraintElimination/monotonic-pointer-phis-chain-of-exits.ll

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,69 @@ loop.latch:
272272
exit:
273273
ret void
274274
}
275+
276+
declare void @foo()
277+
278+
define i32 @test_latch_exiting1(i32 %N) {
279+
; CHECK-LABEL: @test_latch_exiting1(
280+
; CHECK-NEXT: entry:
281+
; CHECK-NEXT: br label [[LOOP:%.*]]
282+
; CHECK: loop:
283+
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
284+
; CHECK-NEXT: call void @foo()
285+
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
286+
; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV]], [[N:%.*]]
287+
; CHECK-NEXT: br i1 [[EC]], label [[EXIT_1:%.*]], label [[LOOP]]
288+
; CHECK: exit.1:
289+
; CHECK-NEXT: ret i32 10
290+
;
291+
entry:
292+
br label %loop
293+
294+
loop:
295+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
296+
call void @foo()
297+
%iv.next = add i32 %iv, 1
298+
%ec = icmp eq i32 %iv, %N
299+
br i1 %ec, label %exit.1, label %loop
300+
301+
exit.1:
302+
ret i32 10
303+
}
304+
305+
define i32 @test_latch_exiting2(i1 %c, i32 %N) {
306+
; CHECK-LABEL: @test_latch_exiting2(
307+
; CHECK-NEXT: entry:
308+
; CHECK-NEXT: br label [[LOOP_HEADER:%.*]]
309+
; CHECK: loop.header:
310+
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
311+
; CHECK-NEXT: br i1 [[C:%.*]], label [[LOOP_LATCH]], label [[EXIT_1:%.*]]
312+
; CHECK: loop.latch:
313+
; CHECK-NEXT: call void @foo()
314+
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
315+
; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV]], [[N:%.*]]
316+
; CHECK-NEXT: br i1 [[EC]], label [[EXIT_2:%.*]], label [[LOOP_HEADER]]
317+
; CHECK: exit.1:
318+
; CHECK-NEXT: ret i32 10
319+
; CHECK: exit.2:
320+
; CHECK-NEXT: ret i32 0
321+
;
322+
entry:
323+
br label %loop.header
324+
325+
loop.header:
326+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
327+
br i1 %c, label %loop.latch, label %exit.1
328+
329+
loop.latch:
330+
call void @foo()
331+
%iv.next = add i32 %iv, 1
332+
%ec = icmp eq i32 %iv, %N
333+
br i1 %ec, label %exit.2, label %loop.header
334+
335+
exit.1:
336+
ret i32 10
337+
338+
exit.2:
339+
ret i32 0
340+
}

0 commit comments

Comments
 (0)