brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · d04d142 Raw
235 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes='lower-switch,unify-loop-exits' -S | FileCheck %s3 4define void @loop_1(i1 %PredEntry, i1 %PredB, i1 %PredC, i1 %PredD) {5; CHECK-LABEL: @loop_1(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    br i1 [[PREDENTRY:%.*]], label [[A:%.*]], label [[G:%.*]]8; CHECK:       A:9; CHECK-NEXT:    br label [[B:%.*]]10; CHECK:       B:11; CHECK-NEXT:    br i1 [[PREDB:%.*]], label [[C:%.*]], label [[LOOP_EXIT_GUARD:%.*]]12; CHECK:       C:13; CHECK-NEXT:    br i1 [[PREDC:%.*]], label [[D:%.*]], label [[LOOP_EXIT_GUARD]]14; CHECK:       D:15; CHECK-NEXT:    br i1 [[PREDD:%.*]], label [[A]], label [[LOOP_EXIT_GUARD]]16; CHECK:       E:17; CHECK-NEXT:    br label [[EXIT:%.*]]18; CHECK:       F:19; CHECK-NEXT:    br label [[EXIT]]20; CHECK:       G:21; CHECK-NEXT:    br label [[Y:%.*]]22; CHECK:       exit:23; CHECK-NEXT:    ret void24; CHECK:       loop.exit.guard:25; CHECK-NEXT:    [[GUARD_X:%.*]] = phi i1 [ true, [[B]] ], [ false, [[C]] ], [ false, [[D]] ]26; CHECK-NEXT:    br i1 [[GUARD_X]], label [[X:%.*]], label [[Y]]27;28entry:29  br i1 %PredEntry, label %A, label %G30 31A:32  br label %B33 34B:35  br i1 %PredB, label %C, label %E36 37C:38  br i1 %PredC, label %D, label %F39 40D:41  br i1 %PredD, label %A, label %F42 43E:44  br label %exit45 46F:47  br label %exit48 49G:50  br label %F51 52exit:53  ret void54}55 56define void @loop_1_callbr(i1 %PredEntry, i1 %PredB, i1 %PredC, i1 %PredD) {57; CHECK-LABEL: @loop_1_callbr(58; CHECK-NEXT:  entry:59; CHECK-NEXT:    br i1 [[PREDENTRY:%.*]], label [[A:%.*]], label [[G:%.*]]60; CHECK:       A:61; CHECK-NEXT:    br label [[B:%.*]]62; CHECK:       B:63; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PREDB:%.*]])64; CHECK-NEXT:            to label [[C:%.*]] [label %B.target.E]65; CHECK:       C:66; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PREDC:%.*]])67; CHECK-NEXT:            to label [[D:%.*]] [label %C.target.F]68; CHECK:       D:69; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PREDD:%.*]])70; CHECK-NEXT:            to label [[A]] [label %D.target.F]71; CHECK:       E:72; CHECK-NEXT:    br label [[EXIT:%.*]]73; CHECK:       F:74; CHECK-NEXT:    br label [[EXIT]]75; CHECK:       G:76; CHECK-NEXT:    br label [[Y:%.*]]77; CHECK:       exit:78; CHECK-NEXT:    ret void79; CHECK:       B.target.E:80; CHECK-NEXT:    br label [[LOOP_EXIT_GUARD:%.*]]81; CHECK:       C.target.F:82; CHECK-NEXT:    br label [[LOOP_EXIT_GUARD]]83; CHECK:       D.target.F:84; CHECK-NEXT:    br label [[LOOP_EXIT_GUARD]]85; CHECK:       loop.exit.guard:86; CHECK-NEXT:    [[GUARD_X:%.*]] = phi i1 [ true, [[B_TARGET_E:%.*]] ], [ false, [[C_TARGET_F:%.*]] ], [ false, [[D_TARGET_F:%.*]] ]87; CHECK-NEXT:    br i1 [[GUARD_X]], label [[X:%.*]], label [[Y]]88;89entry:90  br i1 %PredEntry, label %A, label %G91 92A:93  br label %B94 95B:96  callbr void asm "", "r,!i"(i1 %PredB) to label %C [label %E]97 98C:99  callbr void asm "", "r,!i"(i1 %PredC) to label %D [label %F]100 101D:102  callbr void asm "", "r,!i"(i1 %PredD) to label %A [label %F]103 104E:105  br label %exit106 107F:108  br label %exit109 110G:111  br label %F112 113exit:114  ret void115}116 117define void @loop_2(i1 %PredA, i1 %PredB, i1 %PredC) {118; CHECK-LABEL: @loop_2(119; CHECK-NEXT:  entry:120; CHECK-NEXT:    br label [[A:%.*]]121; CHECK:       A:122; CHECK-NEXT:    br i1 [[PREDA:%.*]], label [[B:%.*]], label [[LOOP_EXIT_GUARD:%.*]]123; CHECK:       B:124; CHECK-NEXT:    br i1 [[PREDB:%.*]], label [[C:%.*]], label [[LOOP_EXIT_GUARD]]125; CHECK:       C:126; CHECK-NEXT:    br i1 [[PREDC:%.*]], label [[D:%.*]], label [[LOOP_EXIT_GUARD]]127; CHECK:       D:128; CHECK-NEXT:    br label [[A]]129; CHECK:       X:130; CHECK-NEXT:    br label [[EXIT:%.*]]131; CHECK:       Y:132; CHECK-NEXT:    br label [[EXIT]]133; CHECK:       Z:134; CHECK-NEXT:    br label [[EXIT]]135; CHECK:       exit:136; CHECK-NEXT:    ret void137; CHECK:       loop.exit.guard:138; CHECK-NEXT:    [[GUARD_X:%.*]] = phi i1 [ true, [[A]] ], [ false, [[B]] ], [ false, [[C]] ]139; CHECK-NEXT:    [[GUARD_Y:%.*]] = phi i1 [ false, [[A]] ], [ true, [[B]] ], [ false, [[C]] ]140; CHECK-NEXT:    br i1 [[GUARD_X]], label [[X:%.*]], label [[LOOP_EXIT_GUARD1:%.*]]141; CHECK:       loop.exit.guard1:142; CHECK-NEXT:    br i1 [[GUARD_Y]], label [[Y:%.*]], label [[Z:%.*]]143;144entry:145  br label %A146 147A:148  br i1 %PredA, label %B, label %X149 150B:151  br i1 %PredB, label %C, label %Y152 153C:154  br i1 %PredC, label %D, label %Z155 156D:157  br label %A158 159X:160  br label %exit161 162Y:163  br label %exit164 165Z:166  br label %exit167 168exit:169  ret void170}171 172define void @loop_2_callbr(i1 %PredA, i1 %PredB, i1 %PredC) {173; CHECK-LABEL: @loop_2_callbr(174; CHECK-NEXT:  entry:175; CHECK-NEXT:    br label [[A:%.*]]176; CHECK:       A:177; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PREDA:%.*]])178; CHECK-NEXT:            to label [[B:%.*]] [label %A.target.X]179; CHECK:       B:180; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PREDB:%.*]])181; CHECK-NEXT:            to label [[C:%.*]] [label %B.target.Y]182; CHECK:       C:183; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PREDC:%.*]])184; CHECK-NEXT:            to label [[D:%.*]] [label %C.target.Z]185; CHECK:       D:186; CHECK-NEXT:    br label [[A]]187; CHECK:       X:188; CHECK-NEXT:    br label [[EXIT:%.*]]189; CHECK:       Y:190; CHECK-NEXT:    br label [[EXIT]]191; CHECK:       Z:192; CHECK-NEXT:    br label [[EXIT]]193; CHECK:       exit:194; CHECK-NEXT:    ret void195; CHECK:       A.target.X:196; CHECK-NEXT:    br label [[LOOP_EXIT_GUARD:%.*]]197; CHECK:       B.target.Y:198; CHECK-NEXT:    br label [[LOOP_EXIT_GUARD]]199; CHECK:       C.target.Z:200; CHECK-NEXT:    br label [[LOOP_EXIT_GUARD]]201; CHECK:       loop.exit.guard:202; CHECK-NEXT:    [[GUARD_X:%.*]] = phi i1 [ true, [[A_TARGET_X:%.*]] ], [ false, [[B_TARGET_Y:%.*]] ], [ false, [[C_TARGET_Z:%.*]] ]203; CHECK-NEXT:    [[GUARD_Y:%.*]] = phi i1 [ false, [[A_TARGET_X]] ], [ true, [[B_TARGET_Y]] ], [ false, [[C_TARGET_Z]] ]204; CHECK-NEXT:    br i1 [[GUARD_X]], label [[X:%.*]], label [[LOOP_EXIT_GUARD1:%.*]]205; CHECK:       loop.exit.guard1:206; CHECK-NEXT:    br i1 [[GUARD_Y]], label [[Y:%.*]], label [[Z:%.*]]207;208entry:209  br label %A210 211A:212  callbr void asm "", "r,!i"(i1 %PredA) to label %B [label %X]213 214B:215  callbr void asm "", "r,!i"(i1 %PredB) to label %C [label %Y]216 217C:218  callbr void asm "", "r,!i"(i1 %PredC) to label %D [label %Z]219 220D:221  br label %A222 223X:224  br label %exit225 226Y:227  br label %exit228 229Z:230  br label %exit231 232exit:233  ret void234}235