#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ askContinue();
int /*<<< orphan*/ trainer_dp_1_launcher();
int /*<<< orphan*/ trainer_dp_2_launcher();
int /*<<< orphan*/ trainer_dp_3_launcher();
int /*<<< orphan*/ trainer_dp_4_launcher();
int /*<<< orphan*/ trainer_dp_5_launcher();
int /*<<< orphan*/ trainer_dp_6_launcher();
void call_dp_levels(void) {
  trainer_dp_1_launcher();
  if (!askContinue()) {
    return;
  }
  trainer_dp_2_launcher();
  if (!askContinue()) {
    return;
  }
  trainer_dp_3_launcher();
  if (!askContinue()) {
    return;
  }
  trainer_dp_4_launcher();
  if (!askContinue()) {
    return;
  }
  trainer_dp_5_launcher();
  if (!askContinue()) {
    return;
  }
  trainer_dp_6_launcher();
}


x86 assembly (clang, -O0):
<call_dp_levels>:
push   %rbp
mov    %rsp,%rbp
mov    $0x0,%al
call   1040 <trainer_dp_1_launcher@plt>
mov    $0x0,%al
call   1090 <askContinue@plt>
cmp    $0x0,%eax
jne    1190 <call_dp_levels+0x20>
jmp    1207 <call_dp_levels+0x97>
mov    $0x0,%al
call   1080 <trainer_dp_2_launcher@plt>
mov    $0x0,%al
call   1090 <askContinue@plt>
cmp    $0x0,%eax
jne    11ac <call_dp_levels+0x3c>
jmp    1207 <call_dp_levels+0x97>
mov    $0x0,%al
call   1050 <trainer_dp_3_launcher@plt>
mov    $0x0,%al
call   1090 <askContinue@plt>
cmp    $0x0,%eax
jne    11c8 <call_dp_levels+0x58>
jmp    1207 <call_dp_levels+0x97>
mov    $0x0,%al
call   1070 <trainer_dp_4_launcher@plt>
mov    $0x0,%al
call   1090 <askContinue@plt>
cmp    $0x0,%eax
jne    11e4 <call_dp_levels+0x74>
jmp    1207 <call_dp_levels+0x97>
mov    $0x0,%al
call   1060 <trainer_dp_5_launcher@plt>
mov    $0x0,%al
call   1090 <askContinue@plt>
cmp    $0x0,%eax
jne    1200 <call_dp_levels+0x90>
jmp    1207 <call_dp_levels+0x97>
mov    $0x0,%al
call   1030 <trainer_dp_6_launcher@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<call_dp_levels>:
push   %rax
xor    %eax,%eax
call   1040 <trainer_dp_1_launcher@plt>
xor    %eax,%eax
call   1090 <askContinue@plt>
test   %eax,%eax
je     11d3 <call_dp_levels+0x63>
xor    %eax,%eax
call   1080 <trainer_dp_2_launcher@plt>
xor    %eax,%eax
call   1090 <askContinue@plt>
test   %eax,%eax
je     11d3 <call_dp_levels+0x63>
xor    %eax,%eax
call   1050 <trainer_dp_3_launcher@plt>
xor    %eax,%eax
call   1090 <askContinue@plt>
test   %eax,%eax
je     11d3 <call_dp_levels+0x63>
xor    %eax,%eax
call   1070 <trainer_dp_4_launcher@plt>
xor    %eax,%eax
call   1090 <askContinue@plt>
test   %eax,%eax
je     11d3 <call_dp_levels+0x63>
xor    %eax,%eax
call   1060 <trainer_dp_5_launcher@plt>
xor    %eax,%eax
call   1090 <askContinue@plt>
test   %eax,%eax
je     11d3 <call_dp_levels+0x63>
xor    %eax,%eax
pop    %rcx
jmp    1030 <trainer_dp_6_launcher@plt>
pop    %rax
ret

LLVM IR (-O0):
define void @call_dp_levels() {
%1 = call i32 (...) @trainer_dp_1_launcher()
%2 = call i32 (...) @askContinue()
%3 = icmp ne i32 %2, 0
br i1 %3, label %5, label %4
4: ; preds = %0
br label %27
5: ; preds = %0
%6 = call i32 (...) @trainer_dp_2_launcher()
%7 = call i32 (...) @askContinue()
%8 = icmp ne i32 %7, 0
br i1 %8, label %10, label %9
9: ; preds = %5
br label %27
10: ; preds = %5
%11 = call i32 (...) @trainer_dp_3_launcher()
%12 = call i32 (...) @askContinue()
%13 = icmp ne i32 %12, 0
br i1 %13, label %15, label %14
14: ; preds = %10
br label %27
15: ; preds = %10
%16 = call i32 (...) @trainer_dp_4_launcher()
%17 = call i32 (...) @askContinue()
%18 = icmp ne i32 %17, 0
br i1 %18, label %20, label %19
19: ; preds = %15
br label %27
20: ; preds = %15
%21 = call i32 (...) @trainer_dp_5_launcher()
%22 = call i32 (...) @askContinue()
%23 = icmp ne i32 %22, 0
br i1 %23, label %25, label %24
24: ; preds = %20
br label %27
25: ; preds = %20
%26 = call i32 (...) @trainer_dp_6_launcher()
br label %27
27: ; preds = %25, %24, %19, %14, %9, %4
ret void
}

LLVM IR (-O2):
define void @call_dp_levels() {
%1 = tail call i32 (...) @trainer_dp_1_launcher()
%2 = tail call i32 (...) @askContinue()
%3 = icmp eq i32 %2, 0
br i1 %3, label %22, label %4
4: ; preds = %0
%5 = tail call i32 (...) @trainer_dp_2_launcher()
%6 = tail call i32 (...) @askContinue()
%7 = icmp eq i32 %6, 0
br i1 %7, label %22, label %8
8: ; preds = %4
%9 = tail call i32 (...) @trainer_dp_3_launcher()
%10 = tail call i32 (...) @askContinue()
%11 = icmp eq i32 %10, 0
br i1 %11, label %22, label %12
12: ; preds = %8
%13 = tail call i32 (...) @trainer_dp_4_launcher()
%14 = tail call i32 (...) @askContinue()
%15 = icmp eq i32 %14, 0
br i1 %15, label %22, label %16
16: ; preds = %12
%17 = tail call i32 (...) @trainer_dp_5_launcher()
%18 = tail call i32 (...) @askContinue()
%19 = icmp eq i32 %18, 0
br i1 %19, label %22, label %20
20: ; preds = %16
%21 = tail call i32 (...) @trainer_dp_6_launcher()
br label %22
22: ; preds = %16, %12, %8, %4, %0, %20
ret void
}