#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 config_get_min_idle_processes(char const *);
char *config_get_name_project(int);
int config_get_num_projects();
int db_get_num_start_init_idle_process(char const *);
int /*<<< orphan*/
process_manager_start_new_process_detached(int, char const *,
                                           int /*<<< orphan*/);
int /*<<< orphan*/ project_manager_restart_project(char const *);
int /*<<< orphan*/ project_manager_shutdown_project(char const *);
int /*<<< orphan*/ project_manager_start_project(char const *);
int /*<<< orphan*/ strcmp(char const *, char const *);
void project_manager_manage_project_changes(const char **newproj,
                                            const char **changedproj,
                                            const char **deletedproj) {
  const char *proj;
  if (deletedproj) {
    const char **deletedprojcopy = deletedproj;
    while ((proj = *deletedprojcopy++))
      project_manager_shutdown_project(proj);
  }
  if (changedproj) {
    const char **changedprojcopy = changedproj;
    while ((proj = *changedprojcopy++))
      project_manager_restart_project(proj);
  }
  if (newproj) {
    const char **newprojcopy = newproj;
    while ((proj = *newprojcopy++))
      project_manager_start_project(proj);
  }
  const int projnum = config_get_num_projects();
  int i;
  for (i = 0; i < projnum; i++) {
    const char *projname = config_get_name_project(i);
    if (deletedproj) {
      const char **deletedprojcopy = deletedproj;
      while ((proj = *deletedprojcopy++))
        if (!strcmp(proj, projname))
          break;
      if (proj)
        continue;
    }
    if (changedproj) {
      const char **changedprojcopy = changedproj;
      while ((proj = *changedprojcopy++))
        if (!strcmp(proj, projname))
          break;
      if (proj)
        continue;
    }
    if (newproj) {
      const char **newprojcopy = newproj;
      while ((proj = *newprojcopy++))
        if (!strcmp(proj, projname))
          break;
      if (proj)
        continue;
    }
    const int projprocnum = config_get_min_idle_processes(projname);
    const int aktprocnum = db_get_num_start_init_idle_process(projname);
    if (aktprocnum < projprocnum) {
      int newprocnum = projprocnum - aktprocnum;
      process_manager_start_new_process_detached(newprocnum, projname, 0);
    }
  }
}


x86 assembly (clang, -O0):
<project_manager_manage_project_changes>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     11ea <project_manager_manage_project_changes+0x5a>
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
cmp    $0x0,%rax
je     11e5 <project_manager_manage_project_changes+0x55>
mov    -0x20(%rbp),%rdi
call   1090 <project_manager_shutdown_project@plt>
jmp    11b7 <project_manager_manage_project_changes+0x27>
jmp    11ea <project_manager_manage_project_changes+0x5a>
cmpq   $0x0,-0x10(%rbp)
je     1230 <project_manager_manage_project_changes+0xa0>
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
cmp    $0x0,%rax
je     122b <project_manager_manage_project_changes+0x9b>
mov    -0x20(%rbp),%rdi
call   1030 <project_manager_restart_project@plt>
jmp    11fd <project_manager_manage_project_changes+0x6d>
jmp    1230 <project_manager_manage_project_changes+0xa0>
cmpq   $0x0,-0x8(%rbp)
je     1276 <project_manager_manage_project_changes+0xe6>
mov    -0x8(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x38(%rbp)
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
cmp    $0x0,%rax
je     1271 <project_manager_manage_project_changes+0xe1>
mov    -0x20(%rbp),%rdi
call   1040 <project_manager_start_project@plt>
jmp    1243 <project_manager_manage_project_changes+0xb3>
jmp    1276 <project_manager_manage_project_changes+0xe6>
mov    $0x0,%al
call   1080 <config_get_num_projects@plt>
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1425 <project_manager_manage_project_changes+0x295>
mov    -0x40(%rbp),%edi
call   10a0 <config_get_name_project@plt>
mov    %rax,-0x48(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1307 <project_manager_manage_project_changes+0x177>
mov    -0x18(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
cmp    $0x0,%rax
je     12f2 <project_manager_manage_project_changes+0x162>
mov    -0x20(%rbp),%rdi
mov    -0x48(%rbp),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    12ed <project_manager_manage_project_changes+0x15d>
jmp    12f2 <project_manager_manage_project_changes+0x162>
jmp    12b2 <project_manager_manage_project_changes+0x122>
cmpq   $0x0,-0x20(%rbp)
je     1302 <project_manager_manage_project_changes+0x172>
jmp    1417 <project_manager_manage_project_changes+0x287>
jmp    1307 <project_manager_manage_project_changes+0x177>
cmpq   $0x0,-0x10(%rbp)
je     136f <project_manager_manage_project_changes+0x1df>
mov    -0x10(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x58(%rbp)
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
cmp    $0x0,%rax
je     135a <project_manager_manage_project_changes+0x1ca>
mov    -0x20(%rbp),%rdi
mov    -0x48(%rbp),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    1355 <project_manager_manage_project_changes+0x1c5>
jmp    135a <project_manager_manage_project_changes+0x1ca>
jmp    131a <project_manager_manage_project_changes+0x18a>
cmpq   $0x0,-0x20(%rbp)
je     136a <project_manager_manage_project_changes+0x1da>
jmp    1417 <project_manager_manage_project_changes+0x287>
jmp    136f <project_manager_manage_project_changes+0x1df>
cmpq   $0x0,-0x8(%rbp)
je     13d7 <project_manager_manage_project_changes+0x247>
mov    -0x8(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x60(%rbp)
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
cmp    $0x0,%rax
je     13c2 <project_manager_manage_project_changes+0x232>
mov    -0x20(%rbp),%rdi
mov    -0x48(%rbp),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    13bd <project_manager_manage_project_changes+0x22d>
jmp    13c2 <project_manager_manage_project_changes+0x232>
jmp    1382 <project_manager_manage_project_changes+0x1f2>
cmpq   $0x0,-0x20(%rbp)
je     13d2 <project_manager_manage_project_changes+0x242>
jmp    1417 <project_manager_manage_project_changes+0x287>
jmp    13d7 <project_manager_manage_project_changes+0x247>
mov    -0x48(%rbp),%rdi
call   1050 <config_get_min_idle_processes@plt>
mov    %eax,-0x64(%rbp)
mov    -0x48(%rbp),%rdi
call   10b0 <db_get_num_start_init_idle_process@plt>
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x64(%rbp),%eax
jge    1412 <project_manager_manage_project_changes+0x282>
mov    -0x64(%rbp),%eax
sub    -0x68(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%edi
mov    -0x48(%rbp),%rsi
xor    %edx,%edx
call   1060 <process_manager_start_new_process_detached@plt>
jmp    1417 <project_manager_manage_project_changes+0x287>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1287 <project_manager_manage_project_changes+0xf7>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<project_manager_manage_project_changes>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rdx,%r12
mov    %rsi,0x10(%rsp)
mov    %rdi,0x8(%rsp)
test   %rdx,%rdx
je     11d1 <project_manager_manage_project_changes+0x41>
mov    (%r12),%rdi
test   %rdi,%rdi
je     11d1 <project_manager_manage_project_changes+0x41>
lea    0x8(%r12),%rbx
xchg   %ax,%ax
call   1090 <project_manager_shutdown_project@plt>
mov    (%rbx),%rdi
add    $0x8,%rbx
test   %rdi,%rdi
jne    11c0 <project_manager_manage_project_changes+0x30>
cmpq   $0x0,0x10(%rsp)
je     1201 <project_manager_manage_project_changes+0x71>
mov    0x10(%rsp),%rax
mov    (%rax),%rdi
test   %rdi,%rdi
je     1201 <project_manager_manage_project_changes+0x71>
mov    0x10(%rsp),%rax
lea    0x8(%rax),%rbx
nop
call   1030 <project_manager_restart_project@plt>
mov    (%rbx),%rdi
add    $0x8,%rbx
test   %rdi,%rdi
jne    11f0 <project_manager_manage_project_changes+0x60>
cmpq   $0x0,0x8(%rsp)
je     1231 <project_manager_manage_project_changes+0xa1>
mov    0x8(%rsp),%rax
mov    (%rax),%rdi
test   %rdi,%rdi
je     1231 <project_manager_manage_project_changes+0xa1>
mov    0x8(%rsp),%rax
lea    0x8(%rax),%rbx
nop
call   1040 <project_manager_start_project@plt>
mov    (%rbx),%rdi
add    $0x8,%rbx
test   %rdi,%rdi
jne    1220 <project_manager_manage_project_changes+0x90>
xor    %r14d,%r14d
xor    %eax,%eax
call   1080 <config_get_num_projects@plt>
test   %eax,%eax
jle    131e <project_manager_manage_project_changes+0x18e>
mov    %eax,%r13d
jmp    125d <project_manager_manage_project_changes+0xcd>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r14d
cmp    %r13d,%r14d
je     131e <project_manager_manage_project_changes+0x18e>
mov    %r14d,%edi
call   10a0 <config_get_name_project@plt>
mov    %rax,%rbx
test   %r12,%r12
je     1290 <project_manager_manage_project_changes+0x100>
mov    %r12,%rbp
mov    0x0(%rbp),%rdi
test   %rdi,%rdi
je     1290 <project_manager_manage_project_changes+0x100>
add    $0x8,%rbp
mov    %rbx,%rsi
call   1070 <strcmp@plt>
test   %eax,%eax
jne    1270 <project_manager_manage_project_changes+0xe0>
jmp    1250 <project_manager_manage_project_changes+0xc0>
nopl   0x0(%rax,%rax,1)
cmpq   $0x0,0x10(%rsp)
je     12c0 <project_manager_manage_project_changes+0x130>
mov    0x10(%rsp),%rbp
nopl   (%rax)
mov    0x0(%rbp),%rdi
test   %rdi,%rdi
je     12c0 <project_manager_manage_project_changes+0x130>
add    $0x8,%rbp
mov    %rbx,%rsi
call   1070 <strcmp@plt>
test   %eax,%eax
jne    12a0 <project_manager_manage_project_changes+0x110>
jmp    1250 <project_manager_manage_project_changes+0xc0>
nopl   0x0(%rax,%rax,1)
cmpq   $0x0,0x8(%rsp)
je     12f0 <project_manager_manage_project_changes+0x160>
mov    0x8(%rsp),%rbp
nopl   (%rax)
mov    0x0(%rbp),%rdi
test   %rdi,%rdi
je     12f0 <project_manager_manage_project_changes+0x160>
add    $0x8,%rbp
mov    %rbx,%rsi
call   1070 <strcmp@plt>
test   %eax,%eax
jne    12d0 <project_manager_manage_project_changes+0x140>
jmp    1250 <project_manager_manage_project_changes+0xc0>
xchg   %ax,%ax
mov    %rbx,%rdi
call   1050 <config_get_min_idle_processes@plt>
mov    %eax,%r15d
mov    %rbx,%rdi
call   10b0 <db_get_num_start_init_idle_process@plt>
sub    %eax,%r15d
jle    1250 <project_manager_manage_project_changes+0xc0>
mov    %r15d,%edi
mov    %rbx,%rsi
xor    %edx,%edx
call   1060 <process_manager_start_new_process_detached@plt>
jmp    1250 <project_manager_manage_project_changes+0xc0>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @project_manager_manage_project_changes(i8** %0, i8** %1, i8** %2) {
%4 = alloca i8**
%5 = alloca i8**
%6 = alloca i8**
%7 = alloca i8*
%8 = alloca i8**
%9 = alloca i8**
%10 = alloca i8**
%11 = alloca i32
%12 = alloca i32
%13 = alloca i8*
%14 = alloca i8**
%15 = alloca i8**
%16 = alloca i8**
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
store i8** %0, i8*** %4
store i8** %1, i8*** %5
store i8** %2, i8*** %6
%20 = load i8**, i8*** %6
%21 = icmp ne i8** %20, null
br i1 %21, label %22, label %33
22: ; preds = %3
%23 = load i8**, i8*** %6
store i8** %23, i8*** %8
br label %24
24: ; preds = %29, %22
%25 = load i8**, i8*** %8
%26 = getelementptr inbounds i8*, i8** %25, i32 1
store i8** %26, i8*** %8
%27 = load i8*, i8** %25
store i8* %27, i8** %7
%28 = icmp ne i8* %27, null
br i1 %28, label %29, label %32
29: ; preds = %24
%30 = load i8*, i8** %7
%31 = call i32 @project_manager_shutdown_project(i8* %30)
br label %24
32: ; preds = %24
br label %33
33: ; preds = %32, %3
%34 = load i8**, i8*** %5
%35 = icmp ne i8** %34, null
br i1 %35, label %36, label %47
36: ; preds = %33
%37 = load i8**, i8*** %5
store i8** %37, i8*** %9
br label %38
38: ; preds = %43, %36
%39 = load i8**, i8*** %9
%40 = getelementptr inbounds i8*, i8** %39, i32 1
store i8** %40, i8*** %9
%41 = load i8*, i8** %39
store i8* %41, i8** %7
%42 = icmp ne i8* %41, null
br i1 %42, label %43, label %46
43: ; preds = %38
%44 = load i8*, i8** %7
%45 = call i32 @project_manager_restart_project(i8* %44)
br label %38
46: ; preds = %38
br label %47
47: ; preds = %46, %33
%48 = load i8**, i8*** %4
%49 = icmp ne i8** %48, null
br i1 %49, label %50, label %61
50: ; preds = %47
%51 = load i8**, i8*** %4
store i8** %51, i8*** %10
br label %52
52: ; preds = %57, %50
%53 = load i8**, i8*** %10
%54 = getelementptr inbounds i8*, i8** %53, i32 1
store i8** %54, i8*** %10
%55 = load i8*, i8** %53
store i8* %55, i8** %7
%56 = icmp ne i8* %55, null
br i1 %56, label %57, label %60
57: ; preds = %52
%58 = load i8*, i8** %7
%59 = call i32 @project_manager_start_project(i8* %58)
br label %52
60: ; preds = %52
br label %61
61: ; preds = %60, %47
%62 = call i32 (...) @config_get_num_projects()
store i32 %62, i32* %11
store i32 0, i32* %12
br label %63
63: ; preds = %151, %61
%64 = load i32, i32* %12
%65 = load i32, i32* %11
%66 = icmp slt i32 %64, %65
br i1 %66, label %67, label %154
67: ; preds = %63
%68 = load i32, i32* %12
%69 = call i8* @config_get_name_project(i32 %68)
store i8* %69, i8** %13
%70 = load i8**, i8*** %6
%71 = icmp ne i8** %70, null
br i1 %71, label %72, label %91
72: ; preds = %67
%73 = load i8**, i8*** %6
store i8** %73, i8*** %14
br label %74
74: ; preds = %85, %72
%75 = load i8**, i8*** %14
%76 = getelementptr inbounds i8*, i8** %75, i32 1
store i8** %76, i8*** %14
%77 = load i8*, i8** %75
store i8* %77, i8** %7
%78 = icmp ne i8* %77, null
br i1 %78, label %79, label %86
79: ; preds = %74
%80 = load i8*, i8** %7
%81 = load i8*, i8** %13
%82 = call i32 @strcmp(i8* %80, i8* %81)
%83 = icmp ne i32 %82, 0
br i1 %83, label %85, label %84
84: ; preds = %79
br label %86
85: ; preds = %79
br label %74
86: ; preds = %84, %74
%87 = load i8*, i8** %7
%88 = icmp ne i8* %87, null
br i1 %88, label %89, label %90
89: ; preds = %86
br label %151
90: ; preds = %86
br label %91
91: ; preds = %90, %67
%92 = load i8**, i8*** %5
%93 = icmp ne i8** %92, null
br i1 %93, label %94, label %113
94: ; preds = %91
%95 = load i8**, i8*** %5
store i8** %95, i8*** %15
br label %96
96: ; preds = %107, %94
%97 = load i8**, i8*** %15
%98 = getelementptr inbounds i8*, i8** %97, i32 1
store i8** %98, i8*** %15
%99 = load i8*, i8** %97
store i8* %99, i8** %7
%100 = icmp ne i8* %99, null
br i1 %100, label %101, label %108
101: ; preds = %96
%102 = load i8*, i8** %7
%103 = load i8*, i8** %13
%104 = call i32 @strcmp(i8* %102, i8* %103)
%105 = icmp ne i32 %104, 0
br i1 %105, label %107, label %106
106: ; preds = %101
br label %108
107: ; preds = %101
br label %96
108: ; preds = %106, %96
%109 = load i8*, i8** %7
%110 = icmp ne i8* %109, null
br i1 %110, label %111, label %112
111: ; preds = %108
br label %151
112: ; preds = %108
br label %113
113: ; preds = %112, %91
%114 = load i8**, i8*** %4
%115 = icmp ne i8** %114, null
br i1 %115, label %116, label %135
116: ; preds = %113
%117 = load i8**, i8*** %4
store i8** %117, i8*** %16
br label %118
118: ; preds = %129, %116
%119 = load i8**, i8*** %16
%120 = getelementptr inbounds i8*, i8** %119, i32 1
store i8** %120, i8*** %16
%121 = load i8*, i8** %119
store i8* %121, i8** %7
%122 = icmp ne i8* %121, null
br i1 %122, label %123, label %130
123: ; preds = %118
%124 = load i8*, i8** %7
%125 = load i8*, i8** %13
%126 = call i32 @strcmp(i8* %124, i8* %125)
%127 = icmp ne i32 %126, 0
br i1 %127, label %129, label %128
128: ; preds = %123
br label %130
129: ; preds = %123
br label %118
130: ; preds = %128, %118
%131 = load i8*, i8** %7
%132 = icmp ne i8* %131, null
br i1 %132, label %133, label %134
133: ; preds = %130
br label %151
134: ; preds = %130
br label %135
135: ; preds = %134, %113
%136 = load i8*, i8** %13
%137 = call i32 @config_get_min_idle_processes(i8* %136)
store i32 %137, i32* %17
%138 = load i8*, i8** %13
%139 = call i32 @db_get_num_start_init_idle_process(i8* %138)
store i32 %139, i32* %18
%140 = load i32, i32* %18
%141 = load i32, i32* %17
%142 = icmp slt i32 %140, %141
br i1 %142, label %143, label %150
143: ; preds = %135
%144 = load i32, i32* %17
%145 = load i32, i32* %18
%146 = sub nsw i32 %144, %145
store i32 %146, i32* %19
%147 = load i32, i32* %19
%148 = load i8*, i8** %13
%149 = call i32 @process_manager_start_new_process_detached(i32 %147, i8* %148, i32 0)
br label %150
150: ; preds = %143, %135
br label %151
151: ; preds = %150, %133, %111, %89
%152 = load i32, i32* %12
%153 = add nsw i32 %152, 1
store i32 %153, i32* %12
br label %63
154: ; preds = %63
ret void
}

LLVM IR (-O2):
define void @project_manager_manage_project_changes(i8** %0, i8** %1, i8** %2) {
%4 = icmp eq i8** %2, null
br i1 %4, label %15, label %5
5: ; preds = %3
%6 = load i8*, i8** %2
%7 = icmp eq i8* %6, null
br i1 %7, label %15, label %8
8: ; preds = %5, %8
%9 = phi i8* [ %13, %8 ], [ %6, %5 ]
%10 = phi i8** [ %11, %8 ], [ %2, %5 ]
%11 = getelementptr inbounds i8*, i8** %10, i64 1
%12 = tail call i32 @project_manager_shutdown_project(i8* %9)
%13 = load i8*, i8** %11
%14 = icmp eq i8* %13, null
br i1 %14, label %15, label %8
15: ; preds = %8, %5, %3
%16 = icmp eq i8** %1, null
br i1 %16, label %27, label %17
17: ; preds = %15
%18 = load i8*, i8** %1
%19 = icmp eq i8* %18, null
br i1 %19, label %27, label %20
20: ; preds = %17, %20
%21 = phi i8* [ %25, %20 ], [ %18, %17 ]
%22 = phi i8** [ %23, %20 ], [ %1, %17 ]
%23 = getelementptr inbounds i8*, i8** %22, i64 1
%24 = tail call i32 @project_manager_restart_project(i8* %21)
%25 = load i8*, i8** %23
%26 = icmp eq i8* %25, null
br i1 %26, label %27, label %20
27: ; preds = %20, %17, %15
%28 = icmp eq i8** %0, null
br i1 %28, label %39, label %29
29: ; preds = %27
%30 = load i8*, i8** %0
%31 = icmp eq i8* %30, null
br i1 %31, label %39, label %32
32: ; preds = %29, %32
%33 = phi i8* [ %37, %32 ], [ %30, %29 ]
%34 = phi i8** [ %35, %32 ], [ %0, %29 ]
%35 = getelementptr inbounds i8*, i8** %34, i64 1
%36 = tail call i32 @project_manager_start_project(i8* %33)
%37 = load i8*, i8** %35
%38 = icmp eq i8* %37, null
br i1 %38, label %39, label %32
39: ; preds = %32, %29, %27
%40 = tail call i32 (...) @config_get_num_projects()
%41 = icmp sgt i32 %40, 0
br i1 %41, label %42, label %81
42: ; preds = %39, %78
%43 = phi i32 [ %79, %78 ], [ 0, %39 ]
%44 = tail call i8* @config_get_name_project(i32 %43)
br i1 %4, label %53, label %45
45: ; preds = %42, %49
%46 = phi i8** [ %50, %49 ], [ %2, %42 ]
%47 = load i8*, i8** %46
%48 = icmp eq i8* %47, null
br i1 %48, label %53, label %49
49: ; preds = %45
%50 = getelementptr inbounds i8*, i8** %46, i64 1
%51 = tail call i32 @strcmp(i8* %47, i8* dereferenceable(1) %44)
%52 = icmp eq i32 %51, 0
br i1 %52, label %78, label %45
53: ; preds = %45, %42
br i1 %16, label %62, label %54
54: ; preds = %53, %58
%55 = phi i8** [ %59, %58 ], [ %1, %53 ]
%56 = load i8*, i8** %55
%57 = icmp eq i8* %56, null
br i1 %57, label %62, label %58
58: ; preds = %54
%59 = getelementptr inbounds i8*, i8** %55, i64 1
%60 = tail call i32 @strcmp(i8* %56, i8* dereferenceable(1) %44)
%61 = icmp eq i32 %60, 0
br i1 %61, label %78, label %54
62: ; preds = %54, %53
br i1 %28, label %71, label %63
63: ; preds = %62, %67
%64 = phi i8** [ %68, %67 ], [ %0, %62 ]
%65 = load i8*, i8** %64
%66 = icmp eq i8* %65, null
br i1 %66, label %71, label %67
67: ; preds = %63
%68 = getelementptr inbounds i8*, i8** %64, i64 1
%69 = tail call i32 @strcmp(i8* %65, i8* dereferenceable(1) %44)
%70 = icmp eq i32 %69, 0
br i1 %70, label %78, label %63
71: ; preds = %63, %62
%72 = tail call i32 @config_get_min_idle_processes(i8* %44)
%73 = tail call i32 @db_get_num_start_init_idle_process(i8* %44)
%74 = icmp sgt i32 %72, %73
br i1 %74, label %75, label %78
75: ; preds = %71
%76 = sub nsw i32 %72, %73
%77 = tail call i32 @process_manager_start_new_process_detached(i32 %76, i8* %44, i32 0)
br label %78
78: ; preds = %49, %58, %67, %71, %75
%79 = add nuw nsw i32 %43, 1
%80 = icmp eq i32 %79, %40
br i1 %80, label %81, label %42
81: ; preds = %78, %39
ret void
}