xref: /llvm-project/llvm/test/Transforms/LoopVersioning/exit-block-dominates-rt-check-block.ll (revision 055fb7795aa219a3d274d280ec9129784f169f56)
1cee313d2SEric Christopher; This test ensures loop versioning does not produce an invalid dominator tree
2cee313d2SEric Christopher; if the exit block of the loop (bb0) dominates the runtime check block
3cee313d2SEric Christopher; (bb1 will become the runtime check block).
4cee313d2SEric Christopher
579a1a5b3SRoman Lebedev; RUN: opt -passes=loop-distribute -enable-loop-distribute -verify-dom-info -S -o - %s > %t
679a1a5b3SRoman Lebedev; RUN: opt -passes=loop-simplify,loop-distribute -enable-loop-distribute -verify-dom-info -S -o - %s > %t
7cee313d2SEric Christopher; RUN: FileCheck --check-prefix CHECK-VERSIONING -input-file %t %s
8cee313d2SEric Christopher
979a1a5b3SRoman Lebedev; RUN: opt -passes=loop-versioning -verify-dom-info -S -o - %s > %t
1079a1a5b3SRoman Lebedev; RUN: opt -passes=loop-simplify,loop-versioning -verify-dom-info -S -o - %s > %t
11cee313d2SEric Christopher; RUN: FileCheck --check-prefix CHECK-VERSIONING -input-file %t %s
12cee313d2SEric Christopher
13cee313d2SEric Christopher@c1 = external global i16
14cee313d2SEric Christopher
15a74941daSFlorian Hahndefine void @f(i16 %a) {
16cee313d2SEric Christopher  br label %bb0
17cee313d2SEric Christopher
18cee313d2SEric Christopherbb0:
19cee313d2SEric Christopher  br label %bb1
20cee313d2SEric Christopher
21cee313d2SEric Christopherbb1:
22*055fb779SNikita Popov  %tmp1 = load i16, ptr @c1
23cee313d2SEric Christopher  br label %bb2
24cee313d2SEric Christopher
25cee313d2SEric Christopherbb2:
26cee313d2SEric Christopher  %tmp2 = phi i16 [ %tmp1, %bb1 ], [ %tmp3, %bb2 ]
27*055fb779SNikita Popov  %tmp4 = getelementptr inbounds [1 x i32], ptr undef, i32 0, i32 4
28*055fb779SNikita Popov  store i32 1, ptr %tmp4
29*055fb779SNikita Popov  %tmp5 = getelementptr inbounds [1 x i32], ptr undef, i32 0, i32 9
30*055fb779SNikita Popov  store i32 0, ptr %tmp5
31cee313d2SEric Christopher  %tmp3 = add i16 %tmp2, 1
32*055fb779SNikita Popov  store i16 %tmp2, ptr @c1
33cee313d2SEric Christopher  %tmp6 = icmp sle i16 %tmp3, 0
34cee313d2SEric Christopher  br i1 %tmp6, label %bb2, label %bb0
35cee313d2SEric Christopher}
36cee313d2SEric Christopher
37cee313d2SEric Christopher; Simple check to make sure loop versioning happened.
38cee313d2SEric Christopher; CHECK-VERSIONING: bb2.lver.check:
39