xref: /llvm-project/llvm/test/Transforms/LoopSimplify/update_latch_md2.ll (revision 3d5ea53906f16a772d7dab98df8902f909497851)
1*3d5ea539SHendrik Greving; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*3d5ea539SHendrik Greving; RUN: opt < %s -passes=loop-simplify -S | FileCheck %s
3*3d5ea539SHendrik Greving
4e5d8fb69SHendrik Greving; Tests loop-simplify does not move the loop metadata, because
5e5d8fb69SHendrik Greving; the loopexit block is not the latch of the loop _bb6.
6e5d8fb69SHendrik Greving
7e5d8fb69SHendrik Grevingdefine void @func(i1 %p) {
8*3d5ea539SHendrik Greving; CHECK-LABEL: @func(
9*3d5ea539SHendrik Greving; CHECK-NEXT:  entry:
10*3d5ea539SHendrik Greving; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]
11*3d5ea539SHendrik Greving; CHECK:       loop.header.loopexit:
12*3d5ea539SHendrik Greving; CHECK-NEXT:    br label [[LOOP_HEADER]], !llvm.loop [[LOOP0:![0-9]+]]
13*3d5ea539SHendrik Greving; CHECK:       loop.header:
14*3d5ea539SHendrik Greving; CHECK-NEXT:    br i1 [[P:%.*]], label [[BB1:%.*]], label [[EXIT:%.*]]
15*3d5ea539SHendrik Greving; CHECK:       bb1:
16*3d5ea539SHendrik Greving; CHECK-NEXT:    br i1 [[P]], label [[BB2:%.*]], label [[BB3:%.*]]
17*3d5ea539SHendrik Greving; CHECK:       bb2:
18*3d5ea539SHendrik Greving; CHECK-NEXT:    br label [[BB3]]
19*3d5ea539SHendrik Greving; CHECK:       bb3:
20*3d5ea539SHendrik Greving; CHECK-NEXT:    br label [[LOOP_LATCH:%.*]]
21*3d5ea539SHendrik Greving; CHECK:       loop.latch:
22*3d5ea539SHendrik Greving; CHECK-NEXT:    br i1 [[P]], label [[LOOP_LATCH]], label [[LOOP_HEADER_LOOPEXIT:%.*]], !llvm.loop [[LOOP0]]
23*3d5ea539SHendrik Greving; CHECK:       exit:
24*3d5ea539SHendrik Greving; CHECK-NEXT:    ret void
25*3d5ea539SHendrik Greving;
26e5d8fb69SHendrik Grevingentry:
27e5d8fb69SHendrik Greving  br label %loop.header
28e5d8fb69SHendrik Greving
29e5d8fb69SHendrik Grevingloop.header:
30e5d8fb69SHendrik Greving  br i1 %p, label %bb1, label %exit
31e5d8fb69SHendrik Greving
32e5d8fb69SHendrik Grevingbb1:
33e5d8fb69SHendrik Greving  br i1 %p, label %bb2, label %bb3
34e5d8fb69SHendrik Greving
35e5d8fb69SHendrik Grevingbb2:
36e5d8fb69SHendrik Greving  br label %bb3
37e5d8fb69SHendrik Greving
38e5d8fb69SHendrik Grevingbb3:
39e5d8fb69SHendrik Greving  br label %loop.latch
40e5d8fb69SHendrik Greving
41e5d8fb69SHendrik Grevingloop.latch:
42e5d8fb69SHendrik Greving  br i1 %p, label %loop.latch, label %loop.header, !llvm.loop !0
43e5d8fb69SHendrik Greving
44e5d8fb69SHendrik Grevingexit:
45e5d8fb69SHendrik Greving  ret void
46e5d8fb69SHendrik Greving}
47e5d8fb69SHendrik Greving
48e5d8fb69SHendrik Greving!0 = distinct !{!0, !1}
49e5d8fb69SHendrik Greving!1 = !{!"llvm.loop.mustprogress"}
50