xref: /llvm-project/llvm/test/Transforms/LoopStrengthReduce/post-increment-insertion.ll (revision e7f4ad13ae57f7a5170cd9caab3b1253d444c2f5)
16c097f73SMax Kazantsev; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*e7f4ad13SNikita Popov; RUN: opt < %s -loop-reduce -S | FileCheck %s
338f28f46SYvan Roux; REQUIRES: x86-registered-target
46c097f73SMax Kazantsev
56c097f73SMax Kazantsevtarget datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
66c097f73SMax Kazantsevtarget triple = "x86_64-unknown-linux-gnu"
76c097f73SMax Kazantsev
86c097f73SMax Kazantsev; FIXME: iv.next is supposed to be inserted in the backedge.
9*e7f4ad13SNikita Popovdefine i32 @test_01(ptr %p, i64 %len, i32 %x) {
106c097f73SMax Kazantsev; CHECK-LABEL: @test_01(
116c097f73SMax Kazantsev; CHECK-NEXT:  entry:
12*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 -4
136c097f73SMax Kazantsev; CHECK-NEXT:    br label [[LOOP:%.*]]
146c097f73SMax Kazantsev; CHECK:       loop:
156c097f73SMax Kazantsev; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ], [ [[LEN:%.*]], [[ENTRY:%.*]] ]
166c097f73SMax Kazantsev; CHECK-NEXT:    [[COND_1:%.*]] = icmp eq i64 [[IV]], 0
176c097f73SMax Kazantsev; CHECK-NEXT:    br i1 [[COND_1]], label [[EXIT:%.*]], label [[BACKEDGE]]
186c097f73SMax Kazantsev; CHECK:       backedge:
19*e7f4ad13SNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = shl i64 [[IV]], 2
20*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[SCEVGEP]], i64 [[TMP0]]
21*e7f4ad13SNikita Popov; CHECK-NEXT:    [[LOADED:%.*]] = load atomic i32, ptr [[SCEVGEP1]] unordered, align 4
226c097f73SMax Kazantsev; CHECK-NEXT:    [[COND_2:%.*]] = icmp eq i32 [[LOADED]], [[X:%.*]]
2380511565SPhilip Reames; CHECK-NEXT:    [[IV_NEXT]] = add nsw i64 [[IV]], -1
246c097f73SMax Kazantsev; CHECK-NEXT:    br i1 [[COND_2]], label [[FAILURE:%.*]], label [[LOOP]]
256c097f73SMax Kazantsev; CHECK:       exit:
266c097f73SMax Kazantsev; CHECK-NEXT:    ret i32 -1
276c097f73SMax Kazantsev; CHECK:       failure:
286c097f73SMax Kazantsev; CHECK-NEXT:    unreachable
296c097f73SMax Kazantsev;
306c097f73SMax Kazantseventry:
316c097f73SMax Kazantsev  br label %loop
326c097f73SMax Kazantsev
336c097f73SMax Kazantsevloop:                                             ; preds = %backedge, %entry
346c097f73SMax Kazantsev  %iv = phi i64 [ %iv.next, %backedge ], [ %len, %entry ]
356c097f73SMax Kazantsev  %iv.next = add nsw i64 %iv, -1
366c097f73SMax Kazantsev  %cond_1 = icmp eq i64 %iv, 0
376c097f73SMax Kazantsev  br i1 %cond_1, label %exit, label %backedge
386c097f73SMax Kazantsev
396c097f73SMax Kazantsevbackedge:                                         ; preds = %loop
40*e7f4ad13SNikita Popov  %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next
41*e7f4ad13SNikita Popov  %loaded = load atomic i32, ptr %addr unordered, align 4
426c097f73SMax Kazantsev  %cond_2 = icmp eq i32 %loaded, %x
436c097f73SMax Kazantsev  br i1 %cond_2, label %failure, label %loop
446c097f73SMax Kazantsev
456c097f73SMax Kazantsevexit:                                             ; preds = %loop
466c097f73SMax Kazantsev  ret i32 -1
476c097f73SMax Kazantsev
486c097f73SMax Kazantsevfailure:                                          ; preds = %backedge
496c097f73SMax Kazantsev  unreachable
506c097f73SMax Kazantsev}
516c097f73SMax Kazantsev
52*e7f4ad13SNikita Popovdefine i32 @test_02(ptr %p, i64 %len, i32 %x) {
536c097f73SMax Kazantsev; CHECK-LABEL: @test_02(
546c097f73SMax Kazantsev; CHECK-NEXT:  entry:
55*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 -4
566c097f73SMax Kazantsev; CHECK-NEXT:    br label [[LOOP:%.*]]
576c097f73SMax Kazantsev; CHECK:       loop:
586c097f73SMax Kazantsev; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i64 [ [[LSR_IV_NEXT:%.*]], [[BACKEDGE:%.*]] ], [ [[LEN:%.*]], [[ENTRY:%.*]] ]
596c097f73SMax Kazantsev; CHECK-NEXT:    [[COND_1:%.*]] = icmp eq i64 [[LSR_IV]], 0
606c097f73SMax Kazantsev; CHECK-NEXT:    br i1 [[COND_1]], label [[EXIT:%.*]], label [[BACKEDGE]]
616c097f73SMax Kazantsev; CHECK:       backedge:
62*e7f4ad13SNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = shl i64 [[LSR_IV]], 2
63*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[SCEVGEP]], i64 [[TMP0]]
64*e7f4ad13SNikita Popov; CHECK-NEXT:    [[LOADED:%.*]] = load atomic i32, ptr [[SCEVGEP1]] unordered, align 4
656c097f73SMax Kazantsev; CHECK-NEXT:    [[COND_2:%.*]] = icmp eq i32 [[LOADED]], [[X:%.*]]
666c097f73SMax Kazantsev; CHECK-NEXT:    [[LSR_IV_NEXT]] = add i64 [[LSR_IV]], -1
676c097f73SMax Kazantsev; CHECK-NEXT:    br i1 [[COND_2]], label [[FAILURE:%.*]], label [[LOOP]]
686c097f73SMax Kazantsev; CHECK:       exit:
696c097f73SMax Kazantsev; CHECK-NEXT:    ret i32 -1
706c097f73SMax Kazantsev; CHECK:       failure:
716c097f73SMax Kazantsev; CHECK-NEXT:    unreachable
726c097f73SMax Kazantsev;
736c097f73SMax Kazantseventry:
746c097f73SMax Kazantsev  %start = add i64 %len, -1
756c097f73SMax Kazantsev  br label %loop
766c097f73SMax Kazantsev
776c097f73SMax Kazantsevloop:                                             ; preds = %backedge, %entry
786c097f73SMax Kazantsev  %iv = phi i64 [ %iv.next, %backedge ], [ %start, %entry ]
796c097f73SMax Kazantsev  %iv.next = add nsw i64 %iv, -1
806c097f73SMax Kazantsev  %iv.offset = add i64 %iv, 1
816c097f73SMax Kazantsev  %iv.next.offset = add i64 %iv.next, 1
826c097f73SMax Kazantsev  %cond_1 = icmp eq i64 %iv.offset, 0
836c097f73SMax Kazantsev  br i1 %cond_1, label %exit, label %backedge
846c097f73SMax Kazantsev
856c097f73SMax Kazantsevbackedge:                                         ; preds = %loop
86*e7f4ad13SNikita Popov  %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next.offset
87*e7f4ad13SNikita Popov  %loaded = load atomic i32, ptr %addr unordered, align 4
886c097f73SMax Kazantsev  %cond_2 = icmp eq i32 %loaded, %x
896c097f73SMax Kazantsev  br i1 %cond_2, label %failure, label %loop
906c097f73SMax Kazantsev
916c097f73SMax Kazantsevexit:                                             ; preds = %loop
926c097f73SMax Kazantsev  ret i32 -1
936c097f73SMax Kazantsev
946c097f73SMax Kazantsevfailure:                                          ; preds = %backedge
956c097f73SMax Kazantsev  unreachable
966c097f73SMax Kazantsev}
976c097f73SMax Kazantsev
98*e7f4ad13SNikita Popovdefine i32 @test_03(ptr %p, i64 %len, i32 %x) {
996c097f73SMax Kazantsev; CHECK-LABEL: @test_03(
1006c097f73SMax Kazantsev; CHECK-NEXT:  entry:
101*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 -4
1026c097f73SMax Kazantsev; CHECK-NEXT:    br label [[LOOP:%.*]]
1036c097f73SMax Kazantsev; CHECK:       loop:
1046c097f73SMax Kazantsev; CHECK-NEXT:    [[LSR_IV:%.*]] = phi i64 [ [[LSR_IV_NEXT:%.*]], [[BACKEDGE:%.*]] ], [ [[LEN:%.*]], [[ENTRY:%.*]] ]
1056c097f73SMax Kazantsev; CHECK-NEXT:    [[COND_1:%.*]] = icmp eq i64 [[LSR_IV]], 0
1066c097f73SMax Kazantsev; CHECK-NEXT:    br i1 [[COND_1]], label [[EXIT:%.*]], label [[BACKEDGE]]
1076c097f73SMax Kazantsev; CHECK:       backedge:
108*e7f4ad13SNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = shl i64 [[LSR_IV]], 2
109*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[SCEVGEP]], i64 [[TMP0]]
110*e7f4ad13SNikita Popov; CHECK-NEXT:    [[LOADED:%.*]] = load atomic i32, ptr [[SCEVGEP1]] unordered, align 4
1116c097f73SMax Kazantsev; CHECK-NEXT:    [[COND_2:%.*]] = icmp eq i32 [[LOADED]], [[X:%.*]]
1126c097f73SMax Kazantsev; CHECK-NEXT:    [[LSR_IV_NEXT]] = add i64 [[LSR_IV]], -1
1136c097f73SMax Kazantsev; CHECK-NEXT:    br i1 [[COND_2]], label [[FAILURE:%.*]], label [[LOOP]]
1146c097f73SMax Kazantsev; CHECK:       exit:
1156c097f73SMax Kazantsev; CHECK-NEXT:    ret i32 -1
1166c097f73SMax Kazantsev; CHECK:       failure:
1176c097f73SMax Kazantsev; CHECK-NEXT:    unreachable
1186c097f73SMax Kazantsev;
1196c097f73SMax Kazantseventry:
1206c097f73SMax Kazantsev  %start = add i64 %len, -100
1216c097f73SMax Kazantsev  br label %loop
1226c097f73SMax Kazantsev
1236c097f73SMax Kazantsevloop:                                             ; preds = %backedge, %entry
1246c097f73SMax Kazantsev  %iv = phi i64 [ %iv.next, %backedge ], [ %start, %entry ]
1256c097f73SMax Kazantsev  %iv.next = add nsw i64 %iv, -1
1266c097f73SMax Kazantsev  %iv.offset = add i64 %iv, 100
1276c097f73SMax Kazantsev  %iv.next.offset = add i64 %iv.next, 100
1286c097f73SMax Kazantsev  %cond_1 = icmp eq i64 %iv.offset, 0
1296c097f73SMax Kazantsev  br i1 %cond_1, label %exit, label %backedge
1306c097f73SMax Kazantsev
1316c097f73SMax Kazantsevbackedge:                                         ; preds = %loop
132*e7f4ad13SNikita Popov  %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next.offset
133*e7f4ad13SNikita Popov  %loaded = load atomic i32, ptr %addr unordered, align 4
1346c097f73SMax Kazantsev  %cond_2 = icmp eq i32 %loaded, %x
1356c097f73SMax Kazantsev  br i1 %cond_2, label %failure, label %loop
1366c097f73SMax Kazantsev
1376c097f73SMax Kazantsevexit:                                             ; preds = %loop
1386c097f73SMax Kazantsev  ret i32 -1
1396c097f73SMax Kazantsev
1406c097f73SMax Kazantsevfailure:                                          ; preds = %backedge
1416c097f73SMax Kazantsev  unreachable
1426c097f73SMax Kazantsev}
14352745e4dSPhilip Reames
144*e7f4ad13SNikita Popovdefine i32 @test_04(ptr %p, i64 %len, i32 %x) {
14552745e4dSPhilip Reames; CHECK-LABEL: @test_04(
14652745e4dSPhilip Reames; CHECK-NEXT:  entry:
147*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 -4
14852745e4dSPhilip Reames; CHECK-NEXT:    br label [[LOOP:%.*]]
14952745e4dSPhilip Reames; CHECK:       loop:
15052745e4dSPhilip Reames; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ], [ [[LEN:%.*]], [[ENTRY:%.*]] ]
15152745e4dSPhilip Reames; CHECK-NEXT:    [[COND_1:%.*]] = icmp eq i64 [[IV]], 0
15252745e4dSPhilip Reames; CHECK-NEXT:    br i1 [[COND_1]], label [[EXIT:%.*]], label [[BACKEDGE]]
15352745e4dSPhilip Reames; CHECK:       backedge:
154*e7f4ad13SNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = shl i64 [[IV]], 2
155*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[SCEVGEP]], i64 [[TMP0]]
156*e7f4ad13SNikita Popov; CHECK-NEXT:    [[LOADED:%.*]] = load atomic i32, ptr [[SCEVGEP1]] unordered, align 4
15752745e4dSPhilip Reames; CHECK-NEXT:    [[COND_2:%.*]] = icmp eq i32 [[LOADED]], [[X:%.*]]
15880511565SPhilip Reames; CHECK-NEXT:    [[IV_NEXT]] = sub i64 [[IV]], 1
15952745e4dSPhilip Reames; CHECK-NEXT:    br i1 [[COND_2]], label [[FAILURE:%.*]], label [[LOOP]]
16052745e4dSPhilip Reames; CHECK:       exit:
16152745e4dSPhilip Reames; CHECK-NEXT:    ret i32 -1
16252745e4dSPhilip Reames; CHECK:       failure:
16352745e4dSPhilip Reames; CHECK-NEXT:    unreachable
16452745e4dSPhilip Reames;
16552745e4dSPhilip Reamesentry:
16652745e4dSPhilip Reames  br label %loop
16752745e4dSPhilip Reames
16852745e4dSPhilip Reamesloop:                                             ; preds = %backedge, %entry
16952745e4dSPhilip Reames  %iv = phi i64 [ %iv.next, %backedge ], [ %len, %entry ]
17052745e4dSPhilip Reames  %iv.next = sub i64 %iv, 1
17152745e4dSPhilip Reames  %cond_1 = icmp eq i64 %iv, 0
17252745e4dSPhilip Reames  br i1 %cond_1, label %exit, label %backedge
17352745e4dSPhilip Reames
17452745e4dSPhilip Reamesbackedge:                                         ; preds = %loop
175*e7f4ad13SNikita Popov  %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next
176*e7f4ad13SNikita Popov  %loaded = load atomic i32, ptr %addr unordered, align 4
17752745e4dSPhilip Reames  %cond_2 = icmp eq i32 %loaded, %x
17852745e4dSPhilip Reames  br i1 %cond_2, label %failure, label %loop
17952745e4dSPhilip Reames
18052745e4dSPhilip Reamesexit:                                             ; preds = %loop
18152745e4dSPhilip Reames  ret i32 -1
18252745e4dSPhilip Reames
18352745e4dSPhilip Reamesfailure:                                          ; preds = %backedge
18452745e4dSPhilip Reames  unreachable
18552745e4dSPhilip Reames}
18652745e4dSPhilip Reames
187*e7f4ad13SNikita Popovdefine i32 @test_05(ptr %p, i64 %len, i32 %x) {
18852745e4dSPhilip Reames; CHECK-LABEL: @test_05(
18952745e4dSPhilip Reames; CHECK-NEXT:  entry:
19052745e4dSPhilip Reames; CHECK-NEXT:    br label [[LOOP:%.*]]
19152745e4dSPhilip Reames; CHECK:       loop:
19252745e4dSPhilip Reames; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ], [ [[LEN:%.*]], [[ENTRY:%.*]] ]
19352745e4dSPhilip Reames; CHECK-NEXT:    [[IV_NEXT]] = mul i64 [[IV]], 2
19452745e4dSPhilip Reames; CHECK-NEXT:    [[COND_1:%.*]] = icmp eq i64 [[IV]], 0
19552745e4dSPhilip Reames; CHECK-NEXT:    br i1 [[COND_1]], label [[EXIT:%.*]], label [[BACKEDGE]]
19652745e4dSPhilip Reames; CHECK:       backedge:
197*e7f4ad13SNikita Popov; CHECK-NEXT:    [[ADDR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[IV_NEXT]]
198*e7f4ad13SNikita Popov; CHECK-NEXT:    [[LOADED:%.*]] = load atomic i32, ptr [[ADDR]] unordered, align 4
19952745e4dSPhilip Reames; CHECK-NEXT:    [[COND_2:%.*]] = icmp eq i32 [[LOADED]], [[X:%.*]]
20052745e4dSPhilip Reames; CHECK-NEXT:    br i1 [[COND_2]], label [[FAILURE:%.*]], label [[LOOP]]
20152745e4dSPhilip Reames; CHECK:       exit:
20252745e4dSPhilip Reames; CHECK-NEXT:    ret i32 -1
20352745e4dSPhilip Reames; CHECK:       failure:
20452745e4dSPhilip Reames; CHECK-NEXT:    unreachable
20552745e4dSPhilip Reames;
20652745e4dSPhilip Reamesentry:
20752745e4dSPhilip Reames  br label %loop
20852745e4dSPhilip Reames
20952745e4dSPhilip Reamesloop:                                             ; preds = %backedge, %entry
21052745e4dSPhilip Reames  %iv = phi i64 [ %iv.next, %backedge ], [ %len, %entry ]
21152745e4dSPhilip Reames  %iv.next = mul i64 %iv, 2
21252745e4dSPhilip Reames  %cond_1 = icmp eq i64 %iv, 0
21352745e4dSPhilip Reames  br i1 %cond_1, label %exit, label %backedge
21452745e4dSPhilip Reames
21552745e4dSPhilip Reamesbackedge:                                         ; preds = %loop
216*e7f4ad13SNikita Popov  %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next
217*e7f4ad13SNikita Popov  %loaded = load atomic i32, ptr %addr unordered, align 4
21852745e4dSPhilip Reames  %cond_2 = icmp eq i32 %loaded, %x
21952745e4dSPhilip Reames  br i1 %cond_2, label %failure, label %loop
22052745e4dSPhilip Reames
22152745e4dSPhilip Reamesexit:                                             ; preds = %loop
22252745e4dSPhilip Reames  ret i32 -1
22352745e4dSPhilip Reames
22452745e4dSPhilip Reamesfailure:                                          ; preds = %backedge
22552745e4dSPhilip Reames  unreachable
22652745e4dSPhilip Reames}
22752745e4dSPhilip Reames
228*e7f4ad13SNikita Popovdefine i32 @test_06(ptr %p, i64 %len, i32 %x, i64 %step) {
22952745e4dSPhilip Reames; CHECK-LABEL: @test_06(
23052745e4dSPhilip Reames; CHECK-NEXT:  entry:
231*e7f4ad13SNikita Popov; CHECK-NEXT:    [[TMP0:%.*]] = shl i64 [[STEP:%.*]], 2
232*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 [[TMP0]]
23352745e4dSPhilip Reames; CHECK-NEXT:    br label [[LOOP:%.*]]
23452745e4dSPhilip Reames; CHECK:       loop:
23552745e4dSPhilip Reames; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ], [ [[LEN:%.*]], [[ENTRY:%.*]] ]
23652745e4dSPhilip Reames; CHECK-NEXT:    [[IV_NEXT]] = add i64 [[IV]], [[STEP]]
23752745e4dSPhilip Reames; CHECK-NEXT:    [[COND_1:%.*]] = icmp eq i64 [[STEP]], [[IV_NEXT]]
23852745e4dSPhilip Reames; CHECK-NEXT:    br i1 [[COND_1]], label [[EXIT:%.*]], label [[BACKEDGE]]
23952745e4dSPhilip Reames; CHECK:       backedge:
240*e7f4ad13SNikita Popov; CHECK-NEXT:    [[TMP1:%.*]] = shl i64 [[IV]], 2
241*e7f4ad13SNikita Popov; CHECK-NEXT:    [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[SCEVGEP]], i64 [[TMP1]]
242*e7f4ad13SNikita Popov; CHECK-NEXT:    [[LOADED:%.*]] = load atomic i32, ptr [[SCEVGEP1]] unordered, align 4
24352745e4dSPhilip Reames; CHECK-NEXT:    [[COND_2:%.*]] = icmp eq i32 [[LOADED]], [[X:%.*]]
24452745e4dSPhilip Reames; CHECK-NEXT:    br i1 [[COND_2]], label [[FAILURE:%.*]], label [[LOOP]]
24552745e4dSPhilip Reames; CHECK:       exit:
24652745e4dSPhilip Reames; CHECK-NEXT:    ret i32 -1
24752745e4dSPhilip Reames; CHECK:       failure:
24852745e4dSPhilip Reames; CHECK-NEXT:    unreachable
24952745e4dSPhilip Reames;
25052745e4dSPhilip Reamesentry:
25152745e4dSPhilip Reames  br label %loop
25252745e4dSPhilip Reames
25352745e4dSPhilip Reamesloop:                                             ; preds = %backedge, %entry
25452745e4dSPhilip Reames  %iv = phi i64 [ %iv.next, %backedge ], [ %len, %entry ]
25552745e4dSPhilip Reames  %iv.next = add nsw i64 %iv, %step
25652745e4dSPhilip Reames  %cond_1 = icmp eq i64 %iv, 0
25752745e4dSPhilip Reames  br i1 %cond_1, label %exit, label %backedge
25852745e4dSPhilip Reames
25952745e4dSPhilip Reamesbackedge:                                         ; preds = %loop
260*e7f4ad13SNikita Popov  %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next
261*e7f4ad13SNikita Popov  %loaded = load atomic i32, ptr %addr unordered, align 4
26252745e4dSPhilip Reames  %cond_2 = icmp eq i32 %loaded, %x
26352745e4dSPhilip Reames  br i1 %cond_2, label %failure, label %loop
26452745e4dSPhilip Reames
26552745e4dSPhilip Reamesexit:                                             ; preds = %loop
26652745e4dSPhilip Reames  ret i32 -1
26752745e4dSPhilip Reames
26852745e4dSPhilip Reamesfailure:                                          ; preds = %backedge
26952745e4dSPhilip Reames  unreachable
27052745e4dSPhilip Reames}
271