void test30(void) {
  int a;
  int b;
  int c;
  for (a = 0; a < 10; ++a) {
    a++;
    if (a == 5)
      break;
    if (a == 6)
      break;
  }
  for (a = 0; a < 10; a++) {
    a++;
    if (a == 6)
      break;
  }
  while (a < 10) {
    if (b == 1)
      break;
    if (c == 1)
      break;
  }
  do {
    if (a == 5)
      break;
    if (b == 6)
      break;
    if (c == 10)
      break;
  } while (a < 10);
  for (a = 0; a < 100; a++) {
    for (b = 0; b < 100; b++) {
      c++;
      if (a == 1)
        break;
    }
    for (c = 0; c < 100; c++) {
      b++;
      if (a == 10)
        break;
    }
  }
  for (a = 0; a < 100; a++) {
    if (a == 1)
      break;
    while (a < 10) {
      b++;
      if (c == 10)
        break;
    }
  }
}


x86 assembly (clang, -O0):
<test30>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
cmpl   $0xa,-0x4(%rbp)
jge    114f <test30+0x4f>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
cmpl   $0x5,-0x4(%rbp)
jne    112d <test30+0x2d>
jmp    114f <test30+0x4f>
cmpl   $0x6,-0x4(%rbp)
jne    113c <test30+0x3c>
jmp    114f <test30+0x4f>
jmp    1141 <test30+0x41>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    110b <test30+0xb>
movl   $0x0,-0x4(%rbp)
cmpl   $0xa,-0x4(%rbp)
jge    118b <test30+0x8b>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
cmpl   $0x6,-0x4(%rbp)
jne    1178 <test30+0x78>
jmp    118b <test30+0x8b>
jmp    117d <test30+0x7d>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1156 <test30+0x56>
jmp    1190 <test30+0x90>
cmpl   $0xa,-0x4(%rbp)
jge    11bd <test30+0xbd>
cmpl   $0x1,-0x8(%rbp)
jne    11a9 <test30+0xa9>
jmp    11bd <test30+0xbd>
cmpl   $0x1,-0xc(%rbp)
jne    11b8 <test30+0xb8>
jmp    11bd <test30+0xbd>
jmp    1190 <test30+0x90>
jmp    11c2 <test30+0xc2>
cmpl   $0x5,-0x4(%rbp)
jne    11d1 <test30+0xd1>
jmp    11fe <test30+0xfe>
cmpl   $0x6,-0x8(%rbp)
jne    11e0 <test30+0xe0>
jmp    11fe <test30+0xfe>
cmpl   $0xa,-0xc(%rbp)
jne    11ef <test30+0xef>
jmp    11fe <test30+0xfe>
jmp    11f4 <test30+0xf4>
cmpl   $0xa,-0x4(%rbp)
jl     11c2 <test30+0xc2>
movl   $0x0,-0x4(%rbp)
cmpl   $0x64,-0x4(%rbp)
jge    129a <test30+0x19a>
movl   $0x0,-0x8(%rbp)
cmpl   $0x64,-0x8(%rbp)
jge    124b <test30+0x14b>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x1,-0x4(%rbp)
jne    1238 <test30+0x138>
jmp    124b <test30+0x14b>
jmp    123d <test30+0x13d>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1216 <test30+0x116>
movl   $0x0,-0xc(%rbp)
cmpl   $0x64,-0xc(%rbp)
jge    1287 <test30+0x187>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0xa,-0x4(%rbp)
jne    1274 <test30+0x174>
jmp    1287 <test30+0x187>
jmp    1279 <test30+0x179>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1252 <test30+0x152>
jmp    128c <test30+0x18c>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1205 <test30+0x105>
movl   $0x0,-0x4(%rbp)
cmpl   $0x64,-0x4(%rbp)
jge    12f9 <test30+0x1f9>
cmpl   $0x1,-0x4(%rbp)
jne    12ba <test30+0x1ba>
jmp    12f9 <test30+0x1f9>
jmp    12bf <test30+0x1bf>
cmpl   $0xa,-0x4(%rbp)
jge    12e6 <test30+0x1e6>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0xa,-0xc(%rbp)
jne    12e1 <test30+0x1e1>
jmp    12e6 <test30+0x1e6>
jmp    12bf <test30+0x1bf>
jmp    12eb <test30+0x1eb>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    12a1 <test30+0x1a1>
pop    %rbp
ret

x86 assembly (clang, -O2):
<test30>:
jmp    1100 <test30>

LLVM IR (-O0):
define void @test30() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
store i32 0, i32* %1
br label %4
4: ; preds = %18, %0
%5 = load i32, i32* %1
%6 = icmp slt i32 %5, 10
br i1 %6, label %7, label %21
7: ; preds = %4
%8 = load i32, i32* %1
%9 = add nsw i32 %8, 1
store i32 %9, i32* %1
%10 = load i32, i32* %1
%11 = icmp eq i32 %10, 5
br i1 %11, label %12, label %13
12: ; preds = %7
br label %21
13: ; preds = %7
%14 = load i32, i32* %1
%15 = icmp eq i32 %14, 6
br i1 %15, label %16, label %17
16: ; preds = %13
br label %21
17: ; preds = %13
br label %18
18: ; preds = %17
%19 = load i32, i32* %1
%20 = add nsw i32 %19, 1
store i32 %20, i32* %1
br label %4
21: ; preds = %16, %12, %4
store i32 0, i32* %1
br label %22
22: ; preds = %32, %21
%23 = load i32, i32* %1
%24 = icmp slt i32 %23, 10
br i1 %24, label %25, label %35
25: ; preds = %22
%26 = load i32, i32* %1
%27 = add nsw i32 %26, 1
store i32 %27, i32* %1
%28 = load i32, i32* %1
%29 = icmp eq i32 %28, 6
br i1 %29, label %30, label %31
30: ; preds = %25
br label %35
31: ; preds = %25
br label %32
32: ; preds = %31
%33 = load i32, i32* %1
%34 = add nsw i32 %33, 1
store i32 %34, i32* %1
br label %22
35: ; preds = %30, %22
br label %36
36: ; preds = %47, %35
%37 = load i32, i32* %1
%38 = icmp slt i32 %37, 10
br i1 %38, label %39, label %48
39: ; preds = %36
%40 = load i32, i32* %2
%41 = icmp eq i32 %40, 1
br i1 %41, label %42, label %43
42: ; preds = %39
br label %48
43: ; preds = %39
%44 = load i32, i32* %3
%45 = icmp eq i32 %44, 1
br i1 %45, label %46, label %47
46: ; preds = %43
br label %48
47: ; preds = %43
br label %36
48: ; preds = %46, %42, %36
br label %49
49: ; preds = %62, %48
%50 = load i32, i32* %1
%51 = icmp eq i32 %50, 5
br i1 %51, label %52, label %53
52: ; preds = %49
br label %65
53: ; preds = %49
%54 = load i32, i32* %2
%55 = icmp eq i32 %54, 6
br i1 %55, label %56, label %57
56: ; preds = %53
br label %65
57: ; preds = %53
%58 = load i32, i32* %3
%59 = icmp eq i32 %58, 10
br i1 %59, label %60, label %61
60: ; preds = %57
br label %65
61: ; preds = %57
br label %62
62: ; preds = %61
%63 = load i32, i32* %1
%64 = icmp slt i32 %63, 10
br i1 %64, label %49, label %65
65: ; preds = %62, %60, %56, %52
store i32 0, i32* %1
br label %66
66: ; preds = %98, %65
%67 = load i32, i32* %1
%68 = icmp slt i32 %67, 100
br i1 %68, label %69, label %101
69: ; preds = %66
store i32 0, i32* %2
br label %70
70: ; preds = %80, %69
%71 = load i32, i32* %2
%72 = icmp slt i32 %71, 100
br i1 %72, label %73, label %83
73: ; preds = %70
%74 = load i32, i32* %3
%75 = add nsw i32 %74, 1
store i32 %75, i32* %3
%76 = load i32, i32* %1
%77 = icmp eq i32 %76, 1
br i1 %77, label %78, label %79
78: ; preds = %73
br label %83
79: ; preds = %73
br label %80
80: ; preds = %79
%81 = load i32, i32* %2
%82 = add nsw i32 %81, 1
store i32 %82, i32* %2
br label %70
83: ; preds = %78, %70
store i32 0, i32* %3
br label %84
84: ; preds = %94, %83
%85 = load i32, i32* %3
%86 = icmp slt i32 %85, 100
br i1 %86, label %87, label %97
87: ; preds = %84
%88 = load i32, i32* %2
%89 = add nsw i32 %88, 1
store i32 %89, i32* %2
%90 = load i32, i32* %1
%91 = icmp eq i32 %90, 10
br i1 %91, label %92, label %93
92: ; preds = %87
br label %97
93: ; preds = %87
br label %94
94: ; preds = %93
%95 = load i32, i32* %3
%96 = add nsw i32 %95, 1
store i32 %96, i32* %3
br label %84
97: ; preds = %92, %84
br label %98
98: ; preds = %97
%99 = load i32, i32* %1
%100 = add nsw i32 %99, 1
store i32 %100, i32* %1
br label %66
101: ; preds = %66
store i32 0, i32* %1
br label %102
102: ; preds = %121, %101
%103 = load i32, i32* %1
%104 = icmp slt i32 %103, 100
br i1 %104, label %105, label %124
105: ; preds = %102
%106 = load i32, i32* %1
%107 = icmp eq i32 %106, 1
br i1 %107, label %108, label %109
108: ; preds = %105
br label %124
109: ; preds = %105
br label %110
110: ; preds = %119, %109
%111 = load i32, i32* %1
%112 = icmp slt i32 %111, 10
br i1 %112, label %113, label %120
113: ; preds = %110
%114 = load i32, i32* %2
%115 = add nsw i32 %114, 1
store i32 %115, i32* %2
%116 = load i32, i32* %3
%117 = icmp eq i32 %116, 10
br i1 %117, label %118, label %119
118: ; preds = %113
br label %120
119: ; preds = %113
br label %110
120: ; preds = %118, %110
br label %121
121: ; preds = %120
%122 = load i32, i32* %1
%123 = add nsw i32 %122, 1
store i32 %123, i32* %1
br label %102
124: ; preds = %108, %102
ret void
}

LLVM IR (-O2):
define void @test30() {
br label %1
1: ; preds = %0, %1
br label %1
}