13cbbded6SSameer Sahasrabuddhe; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
289df0fdaSArthur Eubanks; RUN: opt < %s -unify-loop-exits -enable-new-pm=0 -S | FileCheck %s
3*529ecd19STa-Wei Tu; RUN: opt < %s -passes='lowerswitch,unify-loop-exits' -S | FileCheck %s
43cbbded6SSameer Sahasrabuddhe
53cbbded6SSameer Sahasrabuddhedefine void @loop_1(i1 %PredEntry, i1 %PredB, i1 %PredC, i1 %PredD) {
63cbbded6SSameer Sahasrabuddhe; CHECK-LABEL: @loop_1(
73cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:  entry:
83cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDENTRY:%.*]], label [[A:%.*]], label [[G:%.*]]
93cbbded6SSameer Sahasrabuddhe; CHECK:       A:
103cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[B:%.*]]
113cbbded6SSameer Sahasrabuddhe; CHECK:       B:
123cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDB:%.*]], label [[C:%.*]], label [[LOOP_EXIT_GUARD:%.*]]
133cbbded6SSameer Sahasrabuddhe; CHECK:       C:
143cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDC:%.*]], label [[D:%.*]], label [[LOOP_EXIT_GUARD]]
153cbbded6SSameer Sahasrabuddhe; CHECK:       D:
163cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDD:%.*]], label [[A]], label [[LOOP_EXIT_GUARD]]
173cbbded6SSameer Sahasrabuddhe; CHECK:       E:
183cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[EXIT:%.*]]
193cbbded6SSameer Sahasrabuddhe; CHECK:       F:
203cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[EXIT]]
213cbbded6SSameer Sahasrabuddhe; CHECK:       G:
223cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[F:%.*]]
233cbbded6SSameer Sahasrabuddhe; CHECK:       exit:
243cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    ret void
253cbbded6SSameer Sahasrabuddhe; CHECK:       loop.exit.guard:
263cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_E:%.*]] = phi i1 [ true, [[B]] ], [ false, [[C]] ], [ false, [[D]] ]
273cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_E]], label [[E:%.*]], label [[F]]
283cbbded6SSameer Sahasrabuddhe;
293cbbded6SSameer Sahasrabuddheentry:
303cbbded6SSameer Sahasrabuddhe  br i1 %PredEntry, label %A, label %G
313cbbded6SSameer Sahasrabuddhe
323cbbded6SSameer SahasrabuddheA:
333cbbded6SSameer Sahasrabuddhe  br label %B
343cbbded6SSameer Sahasrabuddhe
353cbbded6SSameer SahasrabuddheB:
363cbbded6SSameer Sahasrabuddhe  br i1 %PredB, label %C, label %E
373cbbded6SSameer Sahasrabuddhe
383cbbded6SSameer SahasrabuddheC:
393cbbded6SSameer Sahasrabuddhe  br i1 %PredC, label %D, label %F
403cbbded6SSameer Sahasrabuddhe
413cbbded6SSameer SahasrabuddheD:
423cbbded6SSameer Sahasrabuddhe  br i1 %PredD, label %A, label %F
433cbbded6SSameer Sahasrabuddhe
443cbbded6SSameer SahasrabuddheE:
453cbbded6SSameer Sahasrabuddhe  br label %exit
463cbbded6SSameer Sahasrabuddhe
473cbbded6SSameer SahasrabuddheF:
483cbbded6SSameer Sahasrabuddhe  br label %exit
493cbbded6SSameer Sahasrabuddhe
503cbbded6SSameer SahasrabuddheG:
513cbbded6SSameer Sahasrabuddhe  br label %F
523cbbded6SSameer Sahasrabuddhe
533cbbded6SSameer Sahasrabuddheexit:
543cbbded6SSameer Sahasrabuddhe  ret void
553cbbded6SSameer Sahasrabuddhe}
563cbbded6SSameer Sahasrabuddhe
573cbbded6SSameer Sahasrabuddhedefine void @loop_2(i1 %PredA, i1 %PredB, i1 %PredC) {
583cbbded6SSameer Sahasrabuddhe; CHECK-LABEL: @loop_2(
593cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:  entry:
603cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[A:%.*]]
613cbbded6SSameer Sahasrabuddhe; CHECK:       A:
623cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDA:%.*]], label [[B:%.*]], label [[LOOP_EXIT_GUARD:%.*]]
633cbbded6SSameer Sahasrabuddhe; CHECK:       B:
643cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDB:%.*]], label [[C:%.*]], label [[LOOP_EXIT_GUARD]]
653cbbded6SSameer Sahasrabuddhe; CHECK:       C:
663cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDC:%.*]], label [[D:%.*]], label [[LOOP_EXIT_GUARD]]
673cbbded6SSameer Sahasrabuddhe; CHECK:       D:
683cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[A]]
693cbbded6SSameer Sahasrabuddhe; CHECK:       X:
703cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[EXIT:%.*]]
713cbbded6SSameer Sahasrabuddhe; CHECK:       Y:
723cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[EXIT]]
733cbbded6SSameer Sahasrabuddhe; CHECK:       Z:
743cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[EXIT]]
753cbbded6SSameer Sahasrabuddhe; CHECK:       exit:
763cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    ret void
773cbbded6SSameer Sahasrabuddhe; CHECK:       loop.exit.guard:
783cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_X:%.*]] = phi i1 [ true, [[A]] ], [ false, [[B]] ], [ false, [[C]] ]
793cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_Y:%.*]] = phi i1 [ false, [[A]] ], [ true, [[B]] ], [ false, [[C]] ]
803cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_X]], label [[X:%.*]], label [[LOOP_EXIT_GUARD1:%.*]]
813cbbded6SSameer Sahasrabuddhe; CHECK:       loop.exit.guard1:
823cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_Y]], label [[Y:%.*]], label [[Z:%.*]]
833cbbded6SSameer Sahasrabuddhe;
843cbbded6SSameer Sahasrabuddheentry:
853cbbded6SSameer Sahasrabuddhe  br label %A
863cbbded6SSameer Sahasrabuddhe
873cbbded6SSameer SahasrabuddheA:
883cbbded6SSameer Sahasrabuddhe  br i1 %PredA, label %B, label %X
893cbbded6SSameer Sahasrabuddhe
903cbbded6SSameer SahasrabuddheB:
913cbbded6SSameer Sahasrabuddhe  br i1 %PredB, label %C, label %Y
923cbbded6SSameer Sahasrabuddhe
933cbbded6SSameer SahasrabuddheC:
943cbbded6SSameer Sahasrabuddhe  br i1 %PredC, label %D, label %Z
953cbbded6SSameer Sahasrabuddhe
963cbbded6SSameer SahasrabuddheD:
973cbbded6SSameer Sahasrabuddhe  br label %A
983cbbded6SSameer Sahasrabuddhe
993cbbded6SSameer SahasrabuddheX:
1003cbbded6SSameer Sahasrabuddhe  br label %exit
1013cbbded6SSameer Sahasrabuddhe
1023cbbded6SSameer SahasrabuddheY:
1033cbbded6SSameer Sahasrabuddhe  br label %exit
1043cbbded6SSameer Sahasrabuddhe
1053cbbded6SSameer SahasrabuddheZ:
1063cbbded6SSameer Sahasrabuddhe  br label %exit
1073cbbded6SSameer Sahasrabuddhe
1083cbbded6SSameer Sahasrabuddheexit:
1093cbbded6SSameer Sahasrabuddhe  ret void
1103cbbded6SSameer Sahasrabuddhe}
111