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