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