xref: /aosp_15_r20/external/llvm/test/Transforms/LoopUnroll/pr27157.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -loop-unroll -debug-only=loop-unroll -disable-output < %s
2*9880d681SAndroid Build Coastguard Worker; REQUIRES: asserts
3*9880d681SAndroid Build Coastguard Worker; Compile this test with debug flag on to verify domtree right after loop unrolling.
4*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; PR27157
7*9880d681SAndroid Build Coastguard Workerdefine void @foo() {
8*9880d681SAndroid Build Coastguard Workerentry:
9*9880d681SAndroid Build Coastguard Worker  br label %loop_header
10*9880d681SAndroid Build Coastguard Workerloop_header:
11*9880d681SAndroid Build Coastguard Worker  %iv = phi i64 [ 0, %entry ], [ %iv_next, %loop_latch ]
12*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %loop_latch, label %loop_exiting_bb1
13*9880d681SAndroid Build Coastguard Workerloop_exiting_bb1:
14*9880d681SAndroid Build Coastguard Worker  br i1 false, label %loop_exiting_bb2, label %exit1.loopexit
15*9880d681SAndroid Build Coastguard Workerloop_exiting_bb2:
16*9880d681SAndroid Build Coastguard Worker  br i1 false, label %loop_latch, label %bb
17*9880d681SAndroid Build Coastguard Workerbb:
18*9880d681SAndroid Build Coastguard Worker  br label %exit1
19*9880d681SAndroid Build Coastguard Workerloop_latch:
20*9880d681SAndroid Build Coastguard Worker  %iv_next = add nuw nsw i64 %iv, 1
21*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne i64 %iv_next, 2
22*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %loop_header, label %exit2
23*9880d681SAndroid Build Coastguard Workerexit1.loopexit:
24*9880d681SAndroid Build Coastguard Worker  br label %exit1
25*9880d681SAndroid Build Coastguard Workerexit1:
26*9880d681SAndroid Build Coastguard Worker  ret void
27*9880d681SAndroid Build Coastguard Workerexit2:
28*9880d681SAndroid Build Coastguard Worker  ret void
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdefine void @foo2() {
32*9880d681SAndroid Build Coastguard Workerentry:
33*9880d681SAndroid Build Coastguard Worker  br label %loop.header
34*9880d681SAndroid Build Coastguard Workerloop.header:
35*9880d681SAndroid Build Coastguard Worker  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %latch ]
36*9880d681SAndroid Build Coastguard Worker  %iv.inc = add i32 %iv, 1
37*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %diamond, label %latch
38*9880d681SAndroid Build Coastguard Workerdiamond:
39*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %left, label %right
40*9880d681SAndroid Build Coastguard Workerleft:
41*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %exit, label %merge
42*9880d681SAndroid Build Coastguard Workerright:
43*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %exit, label %merge
44*9880d681SAndroid Build Coastguard Workermerge:
45*9880d681SAndroid Build Coastguard Worker  br label %latch
46*9880d681SAndroid Build Coastguard Workerlatch:
47*9880d681SAndroid Build Coastguard Worker  %end.cond = icmp eq i32 %iv, 1
48*9880d681SAndroid Build Coastguard Worker  br i1 %end.cond, label %exit1, label %loop.header
49*9880d681SAndroid Build Coastguard Workerexit:
50*9880d681SAndroid Build Coastguard Worker  ret void
51*9880d681SAndroid Build Coastguard Workerexit1:
52*9880d681SAndroid Build Coastguard Worker  ret void
53*9880d681SAndroid Build Coastguard Worker}
54