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 @nested(i1 %PredB3, i1 %PredB4, i1 %PredA4, i1 %PredA3, i32 %X, i32 %Y, i32 %Z) {
63cbbded6SSameer Sahasrabuddhe; CHECK-LABEL: @nested(
73cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:  entry:
83cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[A1:%.*]]
93cbbded6SSameer Sahasrabuddhe; CHECK:       A1:
103cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[B1:%.*]]
113cbbded6SSameer Sahasrabuddhe; CHECK:       B1:
123cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[B2:%.*]]
133cbbded6SSameer Sahasrabuddhe; CHECK:       B2:
143cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[X_INC:%.*]] = add i32 [[X:%.*]], 1
153cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[B3:%.*]]
163cbbded6SSameer Sahasrabuddhe; CHECK:       B3:
173cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDB3:%.*]], label [[B4:%.*]], label [[LOOP_EXIT_GUARD1:%.*]]
183cbbded6SSameer Sahasrabuddhe; CHECK:       B4:
193cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDB4:%.*]], label [[B1]], label [[LOOP_EXIT_GUARD1]]
203cbbded6SSameer Sahasrabuddhe; CHECK:       A2:
213cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[A4:%.*]]
223cbbded6SSameer Sahasrabuddhe; CHECK:       A3:
233cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[A4]]
243cbbded6SSameer Sahasrabuddhe; CHECK:       A4:
253cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[A4_PHI:%.*]] = phi i32 [ [[Y:%.*]], [[A3:%.*]] ], [ [[X_INC_MOVED:%.*]], [[A2:%.*]] ]
263cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDA4:%.*]], label [[LOOP_EXIT_GUARD:%.*]], label [[A5:%.*]]
273cbbded6SSameer Sahasrabuddhe; CHECK:       A5:
283cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDA3:%.*]], label [[LOOP_EXIT_GUARD]], label [[A1]]
293cbbded6SSameer Sahasrabuddhe; CHECK:       C:
303cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br label [[EXIT:%.*]]
313cbbded6SSameer Sahasrabuddhe; CHECK:       exit:
323cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[EXIT_PHI:%.*]] = phi i32 [ [[Z:%.*]], [[C:%.*]] ], [ [[EXIT_PHI_MOVED:%.*]], [[LOOP_EXIT_GUARD]] ]
333cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    ret void
343cbbded6SSameer Sahasrabuddhe; CHECK:       loop.exit.guard:
353cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_C:%.*]] = phi i1 [ true, [[A4]] ], [ false, [[A5]] ]
363cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[EXIT_PHI_MOVED]] = phi i32 [ undef, [[A4]] ], [ [[A4_PHI]], [[A5]] ]
373cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_C]], label [[C]], label [[EXIT]]
383cbbded6SSameer Sahasrabuddhe; CHECK:       loop.exit.guard1:
393cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_A3:%.*]] = phi i1 [ true, [[B3]] ], [ false, [[B4]] ]
403cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    [[X_INC_MOVED]] = phi i32 [ [[X_INC]], [[B3]] ], [ [[X_INC]], [[B4]] ]
413cbbded6SSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_A3]], label [[A3]], label [[A2]]
423cbbded6SSameer Sahasrabuddhe;
433cbbded6SSameer Sahasrabuddheentry:
443cbbded6SSameer Sahasrabuddhe  br label %A1
453cbbded6SSameer Sahasrabuddhe
463cbbded6SSameer SahasrabuddheA1:
473cbbded6SSameer Sahasrabuddhe  br label %B1
483cbbded6SSameer Sahasrabuddhe
493cbbded6SSameer SahasrabuddheB1:
503cbbded6SSameer Sahasrabuddhe  br label %B2
513cbbded6SSameer Sahasrabuddhe
523cbbded6SSameer SahasrabuddheB2:
533cbbded6SSameer Sahasrabuddhe  %X.inc = add i32 %X, 1
543cbbded6SSameer Sahasrabuddhe  br label %B3
553cbbded6SSameer Sahasrabuddhe
563cbbded6SSameer SahasrabuddheB3:
573cbbded6SSameer Sahasrabuddhe  br i1 %PredB3, label %B4, label %A3
583cbbded6SSameer Sahasrabuddhe
593cbbded6SSameer SahasrabuddheB4:
603cbbded6SSameer Sahasrabuddhe  br i1 %PredB4, label %B1, label %A2
613cbbded6SSameer Sahasrabuddhe
623cbbded6SSameer SahasrabuddheA2:
633cbbded6SSameer Sahasrabuddhe  br label %A4
643cbbded6SSameer Sahasrabuddhe
653cbbded6SSameer SahasrabuddheA3:
663cbbded6SSameer Sahasrabuddhe  br label %A4
673cbbded6SSameer Sahasrabuddhe
683cbbded6SSameer SahasrabuddheA4:
693cbbded6SSameer Sahasrabuddhe  %A4.phi = phi i32 [%Y, %A3], [%X.inc, %A2]
703cbbded6SSameer Sahasrabuddhe  br i1 %PredA4, label %C, label %A5
713cbbded6SSameer Sahasrabuddhe
723cbbded6SSameer SahasrabuddheA5:
733cbbded6SSameer Sahasrabuddhe  br i1 %PredA3, label %exit, label %A1
743cbbded6SSameer Sahasrabuddhe
753cbbded6SSameer SahasrabuddheC:
763cbbded6SSameer Sahasrabuddhe  br label %exit
773cbbded6SSameer Sahasrabuddhe
783cbbded6SSameer Sahasrabuddheexit:
793cbbded6SSameer Sahasrabuddhe  %exit.phi = phi i32 [%A4.phi, %A5], [%Z, %C]
803cbbded6SSameer Sahasrabuddhe  ret void
813cbbded6SSameer Sahasrabuddhe}
82