xref: /llvm-project/llvm/test/Transforms/FixIrreducible/bug45623.ll (revision 1ca64c5fb74270661ca2f9ebd821f47dcb3152b4)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -fix-irreducible --verify-loop-info -S | FileCheck %s
3; RUN: opt < %s -passes='fix-irreducible,verify<loops>' -S | FileCheck %s
4; RUN: opt < %s -passes='verify<loops>,fix-irreducible,verify<loops>' -S | FileCheck %s
5
6define dso_local void @tre_tnfa_run_backtrack(i1 %arg) {
7; CHECK-LABEL: @tre_tnfa_run_backtrack(
8; CHECK-NEXT:  entry:
9; CHECK-NEXT:    [[ARG_INV:%.*]] = xor i1 [[ARG:%.*]], true
10; CHECK-NEXT:    br label [[RETRY:%.*]]
11; CHECK:       retry:
12; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]
13; CHECK:       while.body248:
14; CHECK-NEXT:    br i1 [[ARG]], label [[IF_THEN250:%.*]], label [[IF_END275:%.*]]
15; CHECK:       if.then250:
16; CHECK-NEXT:    br label [[FOR_COND264:%.*]]
17; CHECK:       for.cond264:
18; CHECK-NEXT:    br i1 [[ARG]], label [[FOR_BODY267:%.*]], label [[BACKTRACK:%.*]]
19; CHECK:       for.body267:
20; CHECK-NEXT:    br label [[FOR_COND264]]
21; CHECK:       if.end275:
22; CHECK-NEXT:    br label [[FOR_COND342:%.*]]
23; CHECK:       for.cond342:
24; CHECK-NEXT:    br i1 [[ARG]], label [[FOR_BODY345:%.*]], label [[FOR_END580:%.*]]
25; CHECK:       for.body345:
26; CHECK-NEXT:    br label [[FOR_COND342]]
27; CHECK:       for.end580:
28; CHECK-NEXT:    br label [[BACKTRACK]]
29; CHECK:       backtrack:
30; CHECK-NEXT:    br i1 [[ARG]], label [[IF_THEN595:%.*]], label [[IF_ELSE629:%.*]]
31; CHECK:       if.then595:
32; CHECK-NEXT:    br label [[FOR_COND616:%.*]]
33; CHECK:       for.cond616:
34; CHECK-NEXT:    br i1 [[ARG]], label [[FOR_BODY619:%.*]], label [[FOR_END626:%.*]]
35; CHECK:       for.body619:
36; CHECK-NEXT:    br label [[FOR_COND616]]
37; CHECK:       for.end626:
38; CHECK-NEXT:    br label [[IRR_GUARD]]
39; CHECK:       if.else629:
40; CHECK-NEXT:    br label [[RETRY]]
41; CHECK:       irr.guard:
42; CHECK-NEXT:    [[GUARD_WHILE_BODY248:%.*]] = phi i1 [ true, [[FOR_END626]] ], [ [[ARG_INV]], [[RETRY]] ]
43; CHECK-NEXT:    br i1 [[GUARD_WHILE_BODY248]], label [[WHILE_BODY248:%.*]], label [[BACKTRACK]]
44;
45entry:
46  br label %retry
47
48retry:
49  br i1 %arg, label %backtrack, label %while.body248
50
51while.body248:                                    ; preds = %for.end626, %retry
52  br i1 %arg, label %if.then250, label %if.end275
53
54if.then250:                                       ; preds = %while.body248
55  br label %for.cond264
56
57for.cond264:                                      ; preds = %for.body267, %if.then250
58  br i1 %arg, label %for.body267, label %backtrack
59
60for.body267:                                      ; preds = %for.cond264
61  br label %for.cond264
62
63if.end275:                                        ; preds = %while.body248
64  br label %for.cond342
65
66for.cond342:                                      ; preds = %for.body345, %if.end275
67  br i1 %arg, label %for.body345, label %for.end580
68
69for.body345:                                      ; preds = %for.cond342
70  br label %for.cond342
71
72for.end580:                                       ; preds = %for.cond342
73  br label %backtrack
74
75backtrack:                                        ; preds = %for.end580, %for.cond264, %retry
76  br i1 %arg, label %if.then595, label %if.else629
77
78if.then595:                                       ; preds = %backtrack
79  br label %for.cond616
80
81for.cond616:                                      ; preds = %for.body619, %if.then595
82  br i1 %arg, label %for.body619, label %for.end626
83
84for.body619:                                      ; preds = %for.cond616
85  br label %for.cond616
86
87for.end626:                                       ; preds = %for.cond616
88  br label %while.body248
89
90if.else629:                                       ; preds = %backtrack
91  br label %retry
92}
93