brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · f307a1b Raw
282 lines · c
1// RUN: %clang_cc1 -std=c2y -triple x86_64-unknown-linux -emit-llvm -o - %s | FileCheck %s2 3bool g1();4bool g2();5bool g3();6 7// CHECK-LABEL: define {{.*}} void @f1()8// CHECK: entry:9// CHECK:   br label %l110// CHECK: l1:11// CHECK:   br label %while.body12// CHECK: while.body:13// CHECK:   br label %while.end14// CHECK: while.end:15// CHECK:   br label %l216// CHECK: l2:17// CHECK:   br label %while.body118// CHECK: while.body1:19// CHECK:   br label %while.body120void f1() {21  l1: while (true) break l1;22  l2: while (true) continue l2;23}24 25// CHECK-LABEL: define {{.*}} void @f2()26// CHECK: entry:27// CHECK:   br label %l128// CHECK: l1:29// CHECK:   br label %for.cond30// CHECK: for.cond:31// CHECK:   br label %for.end32// CHECK: for.end:33// CHECK:   br label %l234// CHECK: l2:35// CHECK:   br label %for.cond136// CHECK: for.cond1:37// CHECK:   br label %for.cond138void f2() {39  l1: for (;;) break l1;40  l2: for (;;) continue l2;41}42 43// CHECK-LABEL: define {{.*}} void @f3()44// CHECK: entry:45// CHECK:   br label %l146// CHECK: l1:47// CHECK:   br label %do.body48// CHECK: do.body:49// CHECK:   br label %do.end50// CHECK: do.cond:51// CHECK:   br i1 true, label %do.body, label %do.end52// CHECK: do.end:53// CHECK:   br label %l254// CHECK: l2:55// CHECK:   br label %do.body156// CHECK: do.body1:57// CHECK:   br label %do.cond258// CHECK: do.cond2:59// CHECK:   br i1 true, label %do.body1, label %do.end360// CHECK: do.end3:61// CHECK:   ret void62void f3() {63  l1: do { break l1; } while (true);64  l2: do { continue l2; } while (true);65}66 67// CHECK-LABEL: define {{.*}} void @f4()68// CHECK: entry:69// CHECK:   br label %l170// CHECK: l1:71// CHECK:   br label %while.cond72// CHECK: while.cond:73// CHECK:   %call = call {{.*}} i1 @g1()74// CHECK:   br i1 %call, label %while.body, label %while.end1475// CHECK: while.body:76// CHECK:   br label %l277// CHECK: l2:78// CHECK:   br label %while.cond179// CHECK: while.cond1:80// CHECK:   %call2 = call {{.*}} i1 @g2()81// CHECK:   br i1 %call2, label %while.body3, label %while.end82// CHECK: while.body3:83// CHECK:   %call4 = call {{.*}} i1 @g3()84// CHECK:   br i1 %call4, label %if.then, label %if.end85// CHECK: if.then:86// CHECK:   br label %while.end1487// CHECK: if.end:88// CHECK:   %call5 = call {{.*}} i1 @g3()89// CHECK:   br i1 %call5, label %if.then6, label %if.end790// CHECK: if.then6:91// CHECK:   br label %while.end92// CHECK: if.end7:93// CHECK:   %call8 = call {{.*}} i1 @g3()94// CHECK:   br i1 %call8, label %if.then9, label %if.end1095// CHECK: if.then9:96// CHECK:   br label %while.cond97// CHECK: if.end10:98// CHECK:   %call11 = call {{.*}} i1 @g3()99// CHECK:   br i1 %call11, label %if.then12, label %if.end13100// CHECK: if.then12:101// CHECK:   br label %while.cond1102// CHECK: if.end13:103// CHECK:   br label %while.cond1104// CHECK: while.end:105// CHECK:   br label %while.cond106// CHECK: while.end14:107// CHECK:   ret void108void f4() {109  l1: while (g1()) {110    l2: while (g2()) {111      if (g3()) break l1;112      if (g3()) break l2;113      if (g3()) continue l1;114      if (g3()) continue l2;115    }116  }117}118 119// CHECK-LABEL: define {{.*}} void @f5()120// CHECK: entry:121// CHECK:   br label %l1122// CHECK: l1:123// CHECK:   br label %while.cond124// CHECK: while.cond:125// CHECK:   %call = call {{.*}} i1 @g1()126// CHECK:   br i1 %call, label %while.body, label %while.end127// CHECK: while.body:128// CHECK:   br label %l2129// CHECK: l2:130// CHECK:   %call1 = call {{.*}} i1 @g2()131// CHECK:   %conv = zext i1 %call1 to i32132// CHECK:   switch i32 %conv, label %sw.epilog [133// CHECK:     i32 1, label %sw.bb134// CHECK:     i32 2, label %sw.bb2135// CHECK:     i32 3, label %sw.bb3136// CHECK:   ]137// CHECK: sw.bb:138// CHECK:   br label %while.end139// CHECK: sw.bb2:140// CHECK:   br label %sw.epilog141// CHECK: sw.bb3:142// CHECK:   br label %while.cond143// CHECK: sw.epilog:144// CHECK:   br label %while.cond145// CHECK: while.end:146// CHECK:   ret void147void f5() {148  l1: while (g1()) {149    l2: switch (g2()) {150      case 1: break l1;151      case 2: break l2;152      case 3: continue l1;153    }154  }155}156 157// CHECK-LABEL: define {{.*}} void @f6()158// CHECK: entry:159// CHECK:   br label %l1160// CHECK: l1:161// CHECK:   br label %while.cond162// CHECK: while.cond:163// CHECK:   %call = call {{.*}} i1 @g1()164// CHECK:   br i1 %call, label %while.body, label %while.end28165// CHECK: while.body:166// CHECK:   br label %l2167// CHECK: l2:168// CHECK:   br label %for.cond169// CHECK: for.cond:170// CHECK:   %call1 = call {{.*}} i1 @g1()171// CHECK:   br i1 %call1, label %for.body, label %for.end172// CHECK: for.body:173// CHECK:   br label %l3174// CHECK: l3:175// CHECK:   br label %do.body176// CHECK: do.body:177// CHECK:   br label %l4178// CHECK: l4:179// CHECK:   br label %while.cond2180// CHECK: while.cond2:181// CHECK:   %call3 = call {{.*}} i1 @g1()182// CHECK:   br i1 %call3, label %while.body4, label %while.end183// CHECK: while.body4:184// CHECK:   %call5 = call {{.*}} i1 @g2()185// CHECK:   br i1 %call5, label %if.then, label %if.end186// CHECK: if.then:187// CHECK:   br label %while.end28188// CHECK: if.end:189// CHECK:   %call6 = call {{.*}} i1 @g2()190// CHECK:   br i1 %call6, label %if.then7, label %if.end8191// CHECK: if.then7:192// CHECK:   br label %for.end193// CHECK: if.end8:194// CHECK:   %call9 = call {{.*}} i1 @g2()195// CHECK:   br i1 %call9, label %if.then10, label %if.end11196// CHECK: if.then10:197// CHECK:   br label %do.end198// CHECK: if.end11:199// CHECK:   %call12 = call {{.*}} i1 @g2()200// CHECK:   br i1 %call12, label %if.then13, label %if.end14201// CHECK: if.then13:202// CHECK:   br label %while.end203// CHECK: if.end14:204// CHECK:   %call15 = call {{.*}} i1 @g2()205// CHECK:   br i1 %call15, label %if.then16, label %if.end17206// CHECK: if.then16:207// CHECK:   br label %while.cond208// CHECK: if.end17:209// CHECK:   %call18 = call {{.*}} i1 @g2()210// CHECK:   br i1 %call18, label %if.then19, label %if.end20211// CHECK: if.then19:212// CHECK:   br label %for.cond213// CHECK: if.end20:214// CHECK:   %call21 = call {{.*}} i1 @g2()215// CHECK:   br i1 %call21, label %if.then22, label %if.end23216// CHECK: if.then22:217// CHECK:   br label %do.cond218// CHECK: if.end23:219// CHECK:   %call24 = call {{.*}} i1 @g2()220// CHECK:   br i1 %call24, label %if.then25, label %if.end26221// CHECK: if.then25:222// CHECK:   br label %while.cond2223// CHECK: if.end26:224// CHECK:   br label %while.cond2225// CHECK: while.end:226// CHECK:   br label %do.cond227// CHECK: do.cond:228// CHECK:   %call27 = call {{.*}} i1 @g1()229// CHECK:   br i1 %call27, label %do.body, label %do.end230// CHECK: do.end:231// CHECK:   br label %for.cond232// CHECK: for.end:233// CHECK:   br label %while.cond234// CHECK: while.end28:235// CHECK:   ret void236void f6() {237  l1: while (g1()) {238    l2: for (; g1();) {239      l3: do {240        l4: while (g1()) {241          if (g2()) break l1;242          if (g2()) break l2;243          if (g2()) break l3;244          if (g2()) break l4;245          if (g2()) continue l1;246          if (g2()) continue l2;247          if (g2()) continue l3;248          if (g2()) continue l4;249        }250      } while (g1());251    }252  }253}254 255// CHECK-LABEL: define {{.*}} void @f7()256// CHECK: entry:257// CHECK:   br label %loop258// CHECK: loop:259// CHECK:   br label %while.cond260// CHECK: while.cond:261// CHECK:   %call = call {{.*}} i1 @g1()262// CHECK:   br i1 %call, label %while.body, label %while.end263// CHECK: while.body:264// CHECK:   %call1 = call {{.*}} i1 @g2()265// CHECK:   %conv = zext i1 %call1 to i32266// CHECK:   switch i32 %conv, label %sw.epilog [267// CHECK:     i32 1, label %sw.bb268// CHECK:   ]269// CHECK: sw.bb:270// CHECK:   br label %while.end271// CHECK: sw.epilog:272// CHECK:   br label %while.cond273// CHECK: while.end:274// CHECK:   ret void275void f7() {276  loop: while (g1()) {277    switch (g2()) {278      case 1: break loop;279    }280  }281}282