#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 atoi(char *);
int /*<<< orphan*/ exit(int);
int /*<<< orphan*/ free(char *);
int /*<<< orphan*/ print_error_pca(char *, char *);
int /*<<< orphan*/ print_help_pca();
char *remove_ext(char *, char, char);
int /*<<< orphan*/ strcat(char *, char *);
int /*<<< orphan*/ strcmp(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
void analyse_param_pca(int argc, char *argv[], char *input, char *output_eva,
                       char *output_eve, char *output_sdev, char *output_x,
                       int *K, int *c, int *s) {
  int i;
  char *tmp_file;
  char tmp[512];
  int g_data = -1;
  for (i = 1; i < argc; i++) {
    if (argv[i][0] == '-') {
      switch (argv[i][1]) {
      case 'K':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_pca("cmd", "K (number of principal components)");
        *K = atoi(argv[i]);
        strcpy(tmp, argv[i]);
        break;
      case 'h':
        print_help_pca();
        exit(1);
        break;
      case 'x':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_pca("cmd", "x (genotype file)");
        g_data = 0;
        strcpy(input, argv[i]);
        break;
      case 'a':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_pca("cmd", "a (output eigenvalues file)");
        strcpy(output_eva, argv[i]);
        break;
      case 'e':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_pca("cmd", "a (output eigenvalues file)");
        strcpy(output_eve, argv[i]);
        break;
      case 'd':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_pca("cmd", "d (output standard deviation file)");
        strcpy(output_sdev, argv[i]);
        break;
      case 'p':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_pca("cmd", "p (output projection file)");
        strcpy(output_x, argv[i]);
        break;
      case 'c':
        *c = 1;
        break;
      case 's':
        *s = 1;
        break;
      default:
        print_error_pca("basic", NULL);
      }
    } else {
      print_error_pca("basic", NULL);
    }
  }
  if (g_data == -1)
    print_error_pca("option", "-x genotype_file");
  if (*K <= 0)
    *K = 0;
  tmp_file = remove_ext(input, '.', '/');
  if (!strcmp(output_eva, "")) {
    strcpy(output_eva, tmp_file);
    strcat(output_eva, ".eigenvalues");
  }
  if (!strcmp(output_eve, "")) {
    strcpy(output_eve, tmp_file);
    strcat(output_eve, ".eigenvectors");
  }
  if (!strcmp(output_sdev, "")) {
    strcpy(output_sdev, tmp_file);
    strcat(output_sdev, ".sdev");
  }
  if (!strcmp(output_x, "")) {
    strcpy(output_x, tmp_file);
    strcat(output_x, ".projection");
  }
  free(tmp_file);
}


x86 assembly (clang, -O0):
<analyse_param_pca>:
push   %rbp
mov    %rsp,%rbp
sub    $0x250,%rsp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0xffffffff,-0x244(%rbp)
ff ff ff
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    14dc <analyse_param_pca+0x34c>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    14b9 <analyse_param_pca+0x329>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsbl 0x1(%rax),%eax
add    $0xffffffb5,%eax
mov    %eax,%ecx
mov    %rcx,-0x250(%rbp)
sub    $0x2d,%eax
ja     14a4 <analyse_param_pca+0x314>
mov    -0x250(%rbp),%rax
lea    0xdd6(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x34(%rbp),%eax
je     1260 <analyse_param_pca+0xd0>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1273 <analyse_param_pca+0xe3>
lea    0xe51(%rip),%rdi
lea    0xe4e(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1090 <atoi@plt>
mov    %eax,%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
lea    -0x240(%rbp),%rdi
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcpy@plt>
jmp    14b4 <analyse_param_pca+0x324>
mov    $0x0,%al
call   1080 <print_help_pca@plt>
mov    $0x1,%edi
call   10b0 <exit@plt>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x34(%rbp),%eax
je     12e7 <analyse_param_pca+0x157>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    12fa <analyse_param_pca+0x16a>
lea    0xdca(%rip),%rdi
lea    0xdea(%rip),%rsi
call   1050 <print_error_pca@plt>
movl   $0x0,-0x244(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcpy@plt>
jmp    14b4 <analyse_param_pca+0x324>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x34(%rbp),%eax
je     134b <analyse_param_pca+0x1bb>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    135e <analyse_param_pca+0x1ce>
lea    0xd66(%rip),%rdi
lea    0xd98(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcpy@plt>
jmp    14b4 <analyse_param_pca+0x324>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x34(%rbp),%eax
je     13a5 <analyse_param_pca+0x215>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    13b8 <analyse_param_pca+0x228>
lea    0xd0c(%rip),%rdi
lea    0xd3e(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    -0x28(%rbp),%rdi
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcpy@plt>
jmp    14b4 <analyse_param_pca+0x324>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x34(%rbp),%eax
je     13ff <analyse_param_pca+0x26f>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1412 <analyse_param_pca+0x282>
lea    0xcb2(%rip),%rdi
lea    0xd00(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    -0x30(%rbp),%rdi
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcpy@plt>
jmp    14b4 <analyse_param_pca+0x324>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x34(%rbp),%eax
je     1459 <analyse_param_pca+0x2c9>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    146c <analyse_param_pca+0x2dc>
lea    0xc58(%rip),%rdi
lea    0xcc9(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x10(%rbp),%rdi
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcpy@plt>
jmp    14b4 <analyse_param_pca+0x324>
mov    0x20(%rbp),%rax
movl   $0x1,(%rax)
jmp    14b4 <analyse_param_pca+0x324>
mov    0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    14b4 <analyse_param_pca+0x324>
lea    0xca0(%rip),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1050 <print_error_pca@plt>
jmp    14c9 <analyse_param_pca+0x339>
lea    0xc8b(%rip),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1050 <print_error_pca@plt>
jmp    14ce <analyse_param_pca+0x33e>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11d3 <analyse_param_pca+0x43>
cmpl   $0xffffffff,-0x244(%rbp)
jne    14fc <analyse_param_pca+0x36c>
lea    0xc61(%rip),%rdi
lea    0xc61(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jg     1513 <analyse_param_pca+0x383>
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x18(%rbp),%rdi
mov    $0x2e,%esi
mov    $0x2f,%edx
call   1060 <remove_ext@plt>
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rdi
lea    0xbbb(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    1560 <analyse_param_pca+0x3d0>
mov    -0x20(%rbp),%rdi
mov    -0x40(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x20(%rbp),%rdi
lea    0xc0e(%rip),%rsi
call   10a0 <strcat@plt>
mov    -0x28(%rbp),%rdi
lea    0xb85(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    1596 <analyse_param_pca+0x406>
mov    -0x28(%rbp),%rdi
mov    -0x40(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x28(%rbp),%rdi
lea    0xbe5(%rip),%rsi
call   10a0 <strcat@plt>
mov    -0x30(%rbp),%rdi
lea    0xb4f(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    15cc <analyse_param_pca+0x43c>
mov    -0x30(%rbp),%rdi
mov    -0x40(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x30(%rbp),%rdi
lea    0xbbd(%rip),%rsi
call   10a0 <strcat@plt>
mov    0x10(%rbp),%rdi
lea    0xb19(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    1602 <analyse_param_pca+0x472>
mov    0x10(%rbp),%rdi
mov    -0x40(%rbp),%rsi
call   1040 <strcpy@plt>
mov    0x10(%rbp),%rdi
lea    0xb8d(%rip),%rsi
call   10a0 <strcat@plt>
mov    -0x40(%rbp),%rdi
call   1030 <free@plt>
add    $0x250,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<analyse_param_pca>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x238,%rsp
mov    %r9,%r13
mov    %r8,%r12
mov    %rcx,%rbx
mov    %rdx,0x20(%rsp)
mov    0x270(%rsp),%r15
cmp    $0x2,%edi
jl     13ee <analyse_param_pca+0x26e>
mov    %rsi,%rbp
mov    %edi,%r14d
mov    %rbx,0x10(%rsp)
mov    %r12,0x18(%rsp)
mov    $0x1,%r12d
movl   $0xffffffff,0xc(%rsp)
ff
mov    %r13,0x28(%rsp)
jmp    11fb <analyse_param_pca+0x7b>
cs nopw 0x0(%rax,%rax,1)
nop
lea    0xf64(%rip),%rdi
xor    %esi,%esi
call   1050 <print_error_pca@plt>
add    $0x1,%r12d
cmp    %r14d,%r12d
jge    13dd <analyse_param_pca+0x25d>
movslq %r12d,%rax
mov    0x0(%rbp,%rax,8),%rax
cmpb   $0x2d,(%rax)
jne    11e0 <analyse_param_pca+0x60>
movsbl 0x1(%rax),%eax
add    $0xffffffb5,%eax
cmp    $0x2d,%eax
ja     11e0 <analyse_param_pca+0x60>
lea    0xde5(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    %r15,%rbx
add    $0x1,%r12d
movslq %r12d,%r13
cmp    %r14d,%r12d
je     123e <analyse_param_pca+0xbe>
mov    0x0(%rbp,%r13,8),%r15
cmpb   $0x2d,(%r15)
jne    1256 <analyse_param_pca+0xd6>
lea    0xe73(%rip),%rdi
lea    0xe70(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x0(%rbp,%r13,8),%r15
mov    %r15,%rdi
call   1080 <atoi@plt>
mov    0x278(%rsp),%rcx
mov    %eax,(%rcx)
lea    0x30(%rsp),%rdi
mov    %r15,%rsi
call   1040 <strcpy@plt>
mov    %rbx,%r15
mov    0x28(%rsp),%r13
jmp    11ee <analyse_param_pca+0x6e>
add    $0x1,%r12d
movslq %r12d,%rbx
cmp    %r14d,%r12d
je     1298 <analyse_param_pca+0x118>
mov    0x0(%rbp,%rbx,8),%rsi
cmpb   $0x2d,(%rsi)
jne    12b0 <analyse_param_pca+0x130>
lea    0xe19(%rip),%rdi
lea    0xe4b(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x0(%rbp,%rbx,8),%rsi
mov    0x10(%rsp),%rdi
call   1040 <strcpy@plt>
jmp    11ee <analyse_param_pca+0x6e>
mov    0x280(%rsp),%rax
movl   $0x1,(%rax)
jmp    11ee <analyse_param_pca+0x6e>
add    $0x1,%r12d
movslq %r12d,%rbx
cmp    %r14d,%r12d
je     12e8 <analyse_param_pca+0x168>
mov    0x0(%rbp,%rbx,8),%rsi
cmpb   $0x2d,(%rsi)
jne    1300 <analyse_param_pca+0x180>
lea    0xdc9(%rip),%rdi
lea    0xe17(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x0(%rbp,%rbx,8),%rsi
mov    %r13,%rdi
call   1040 <strcpy@plt>
jmp    11ee <analyse_param_pca+0x6e>
add    $0x1,%r12d
movslq %r12d,%rbx
cmp    %r14d,%r12d
je     1323 <analyse_param_pca+0x1a3>
mov    0x0(%rbp,%rbx,8),%rsi
cmpb   $0x2d,(%rsi)
jne    133b <analyse_param_pca+0x1bb>
lea    0xd8e(%rip),%rdi
lea    0xdc0(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x0(%rbp,%rbx,8),%rsi
mov    0x18(%rsp),%rdi
call   1040 <strcpy@plt>
jmp    11ee <analyse_param_pca+0x6e>
add    $0x1,%r12d
movslq %r12d,%rbx
cmp    %r14d,%r12d
je     1360 <analyse_param_pca+0x1e0>
mov    0x0(%rbp,%rbx,8),%rsi
cmpb   $0x2d,(%rsi)
jne    1378 <analyse_param_pca+0x1f8>
lea    0xd51(%rip),%rdi
lea    0xdc2(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x0(%rbp,%rbx,8),%rsi
mov    %r15,%rdi
call   1040 <strcpy@plt>
jmp    11ee <analyse_param_pca+0x6e>
mov    0x288(%rsp),%rax
movl   $0x1,(%rax)
jmp    11ee <analyse_param_pca+0x6e>
add    $0x1,%r12d
movslq %r12d,%rbx
cmp    %r14d,%r12d
je     13ae <analyse_param_pca+0x22e>
mov    0x0(%rbp,%rbx,8),%rsi
cmpb   $0x2d,(%rsi)
jne    13c6 <analyse_param_pca+0x246>
lea    0xd03(%rip),%rdi
lea    0xd23(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x0(%rbp,%rbx,8),%rsi
mov    0x20(%rsp),%rdi
call   1040 <strcpy@plt>
movl   $0x0,0xc(%rsp)
jmp    11ee <analyse_param_pca+0x6e>
cmpl   $0xffffffff,0xc(%rsp)
mov    0x18(%rsp),%r12
mov    0x10(%rsp),%rbx
jne    1401 <analyse_param_pca+0x281>
lea    0xd5c(%rip),%rdi
lea    0xd5c(%rip),%rsi
call   1050 <print_error_pca@plt>
mov    0x278(%rsp),%rax
cmpl   $0x0,(%rax)
jg     1414 <analyse_param_pca+0x294>
movl   $0x0,(%rax)
mov    0x20(%rsp),%rdi
mov    $0x2e,%esi
mov    $0x2f,%edx
call   1060 <remove_ext@plt>
mov    %rax,%rbp
cmpb   $0x0,(%rbx)
je     145e <analyse_param_pca+0x2de>
cmpb   $0x0,(%r12)
je     147f <analyse_param_pca+0x2ff>
cmpb   $0x0,0x0(%r13)
je     14a0 <analyse_param_pca+0x320>
cmpb   $0x0,(%r15)
je     14c0 <analyse_param_pca+0x340>
mov    %rbp,%rdi
call   1030 <free@plt>
add    $0x238,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1040 <strcpy@plt>
lea    0xcf9(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcat@plt>
cmpb   $0x0,(%r12)
jne    1437 <analyse_param_pca+0x2b7>
mov    %r12,%rdi
mov    %rbp,%rsi
call   1040 <strcpy@plt>
lea    0xce5(%rip),%rsi
mov    %r12,%rdi
call   1090 <strcat@plt>
cmpb   $0x0,0x0(%r13)
jne    143e <analyse_param_pca+0x2be>
mov    %r13,%rdi
mov    %rbp,%rsi
call   1040 <strcpy@plt>
lea    0xcd2(%rip),%rsi
mov    %r13,%rdi
call   1090 <strcat@plt>
cmpb   $0x0,(%r15)
jne    1444 <analyse_param_pca+0x2c4>
mov    %r15,%rdi
mov    %rbp,%rsi
call   1040 <strcpy@plt>
lea    0xcb8(%rip),%rsi
mov    %r15,%rdi
call   1090 <strcat@plt>
jmp    1444 <analyse_param_pca+0x2c4>
xor    %eax,%eax
call   1070 <print_help_pca@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>

LLVM IR (-O0):
@.str = [4 x i8] c"cmd\00"
@.str.1 = [35 x i8] c"K (number of principal components)\00"
@.str.2 = [18 x i8] c"x (genotype file)\00"
@.str.3 = [28 x i8] c"a (output eigenvalues file)\00"
@.str.4 = [35 x i8] c"d (output standard deviation file)\00"
@.str.5 = [27 x i8] c"p (output projection file)\00"
@.str.6 = [6 x i8] c"basic\00"
@.str.7 = [7 x i8] c"option\00"
@.str.8 = [17 x i8] c"-x genotype_file\00"
@.str.9 = [1 x i8] zeroinitializer
@.str.10 = [13 x i8] c".eigenvalues\00"
@.str.11 = [14 x i8] c".eigenvectors\00"
@.str.12 = [6 x i8] c".sdev\00"
@.str.13 = [12 x i8] c".projection\00"
define void @analyse_param_pca(i32 %0, i8** %1, i8* %2, i8* %3, i8* %4, i8* %5, i8* %6, i32* %7, i32* %8, i32* %9) {
%11 = alloca i32
%12 = alloca i8**
%13 = alloca i8*
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i8*
%17 = alloca i8*
%18 = alloca i32*
%19 = alloca i32*
%20 = alloca i32*
%21 = alloca i32
%22 = alloca i8*
%23 = alloca [512 x i8]
%24 = alloca i32
store i32 %0, i32* %11
store i8** %1, i8*** %12
store i8* %2, i8** %13
store i8* %3, i8** %14
store i8* %4, i8** %15
store i8* %5, i8** %16
store i8* %6, i8** %17
store i32* %7, i32** %18
store i32* %8, i32** %19
store i32* %9, i32** %20
store i32 -1, i32* %24
store i32 1, i32* %21
br label %25
25: ; preds = %224, %10
%26 = load i32, i32* %21
%27 = load i32, i32* %11
%28 = icmp slt i32 %26, %27
br i1 %28, label %29, label %227
29: ; preds = %25
%30 = load i8**, i8*** %12
%31 = load i32, i32* %21
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds i8*, i8** %30, i64 %32
%34 = load i8*, i8** %33
%35 = getelementptr inbounds i8, i8* %34, i64 0
%36 = load i8, i8* %35
%37 = sext i8 %36 to i32
%38 = icmp eq i32 %37, 45
br i1 %38, label %39, label %221
39: ; preds = %29
%40 = load i8**, i8*** %12
%41 = load i32, i32* %21
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds i8*, i8** %40, i64 %42
%44 = load i8*, i8** %43
%45 = getelementptr inbounds i8, i8* %44, i64 1
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
switch i32 %47, label %218 [
i32 75, label %48
i32 104, label %81
i32 120, label %84
i32 97, label %110
i32 101, label %136
i32 100, label %162
i32 112, label %188
i32 99, label %214
i32 115, label %216
]
48: ; preds = %39
%49 = load i32, i32* %21
%50 = add nsw i32 %49, 1
store i32 %50, i32* %21
%51 = load i32, i32* %11
%52 = load i32, i32* %21
%53 = icmp eq i32 %51, %52
br i1 %53, label %64, label %54
54: ; preds = %48
%55 = load i8**, i8*** %12
%56 = load i32, i32* %21
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8*, i8** %55, i64 %57
%59 = load i8*, i8** %58
%60 = getelementptr inbounds i8, i8* %59, i64 0
%61 = load i8, i8* %60
%62 = sext i8 %61 to i32
%63 = icmp eq i32 %62, 45
br i1 %63, label %64, label %66
64: ; preds = %54, %48
%65 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0))
br label %66
66: ; preds = %64, %54
%67 = load i8**, i8*** %12
%68 = load i32, i32* %21
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8*, i8** %67, i64 %69
%71 = load i8*, i8** %70
%72 = call i32 @atoi(i8* %71)
%73 = load i32*, i32** %18
store i32 %72, i32* %73
%74 = getelementptr inbounds [512 x i8], [512 x i8]* %23, i64 0, i64 0
%75 = load i8**, i8*** %12
%76 = load i32, i32* %21
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds i8*, i8** %75, i64 %77
%79 = load i8*, i8** %78
%80 = call i32 @strcpy(i8* %74, i8* %79)
br label %220
81: ; preds = %39
%82 = call i32 (...) @print_help_pca()
%83 = call i32 @exit(i32 1)
unreachable
84: ; preds = %39
%85 = load i32, i32* %21
%86 = add nsw i32 %85, 1
store i32 %86, i32* %21
%87 = load i32, i32* %11
%88 = load i32, i32* %21
%89 = icmp eq i32 %87, %88
br i1 %89, label %100, label %90
90: ; preds = %84
%91 = load i8**, i8*** %12
%92 = load i32, i32* %21
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i8*, i8** %91, i64 %93
%95 = load i8*, i8** %94
%96 = getelementptr inbounds i8, i8* %95, i64 0
%97 = load i8, i8* %96
%98 = sext i8 %97 to i32
%99 = icmp eq i32 %98, 45
br i1 %99, label %100, label %102
100: ; preds = %90, %84
%101 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0))
br label %102
102: ; preds = %100, %90
store i32 0, i32* %24
%103 = load i8*, i8** %13
%104 = load i8**, i8*** %12
%105 = load i32, i32* %21
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds i8*, i8** %104, i64 %106
%108 = load i8*, i8** %107
%109 = call i32 @strcpy(i8* %103, i8* %108)
br label %220
110: ; preds = %39
%111 = load i32, i32* %21
%112 = add nsw i32 %111, 1
store i32 %112, i32* %21
%113 = load i32, i32* %11
%114 = load i32, i32* %21
%115 = icmp eq i32 %113, %114
br i1 %115, label %126, label %116
116: ; preds = %110
%117 = load i8**, i8*** %12
%118 = load i32, i32* %21
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds i8*, i8** %117, i64 %119
%121 = load i8*, i8** %120
%122 = getelementptr inbounds i8, i8* %121, i64 0
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = icmp eq i32 %124, 45
br i1 %125, label %126, label %128
126: ; preds = %116, %110
%127 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0))
br label %128
128: ; preds = %126, %116
%129 = load i8*, i8** %14
%130 = load i8**, i8*** %12
%131 = load i32, i32* %21
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds i8*, i8** %130, i64 %132
%134 = load i8*, i8** %133
%135 = call i32 @strcpy(i8* %129, i8* %134)
br label %220
136: ; preds = %39
%137 = load i32, i32* %21
%138 = add nsw i32 %137, 1
store i32 %138, i32* %21
%139 = load i32, i32* %11
%140 = load i32, i32* %21
%141 = icmp eq i32 %139, %140
br i1 %141, label %152, label %142
142: ; preds = %136
%143 = load i8**, i8*** %12
%144 = load i32, i32* %21
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i8*, i8** %143, i64 %145
%147 = load i8*, i8** %146
%148 = getelementptr inbounds i8, i8* %147, i64 0
%149 = load i8, i8* %148
%150 = sext i8 %149 to i32
%151 = icmp eq i32 %150, 45
br i1 %151, label %152, label %154
152: ; preds = %142, %136
%153 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0))
br label %154
154: ; preds = %152, %142
%155 = load i8*, i8** %15
%156 = load i8**, i8*** %12
%157 = load i32, i32* %21
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds i8*, i8** %156, i64 %158
%160 = load i8*, i8** %159
%161 = call i32 @strcpy(i8* %155, i8* %160)
br label %220
162: ; preds = %39
%163 = load i32, i32* %21
%164 = add nsw i32 %163, 1
store i32 %164, i32* %21
%165 = load i32, i32* %11
%166 = load i32, i32* %21
%167 = icmp eq i32 %165, %166
br i1 %167, label %178, label %168
168: ; preds = %162
%169 = load i8**, i8*** %12
%170 = load i32, i32* %21
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds i8*, i8** %169, i64 %171
%173 = load i8*, i8** %172
%174 = getelementptr inbounds i8, i8* %173, i64 0
%175 = load i8, i8* %174
%176 = sext i8 %175 to i32
%177 = icmp eq i32 %176, 45
br i1 %177, label %178, label %180
178: ; preds = %168, %162
%179 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.4, i64 0, i64 0))
br label %180
180: ; preds = %178, %168
%181 = load i8*, i8** %16
%182 = load i8**, i8*** %12
%183 = load i32, i32* %21
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds i8*, i8** %182, i64 %184
%186 = load i8*, i8** %185
%187 = call i32 @strcpy(i8* %181, i8* %186)
br label %220
188: ; preds = %39
%189 = load i32, i32* %21
%190 = add nsw i32 %189, 1
store i32 %190, i32* %21
%191 = load i32, i32* %11
%192 = load i32, i32* %21
%193 = icmp eq i32 %191, %192
br i1 %193, label %204, label %194
194: ; preds = %188
%195 = load i8**, i8*** %12
%196 = load i32, i32* %21
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds i8*, i8** %195, i64 %197
%199 = load i8*, i8** %198
%200 = getelementptr inbounds i8, i8* %199, i64 0
%201 = load i8, i8* %200
%202 = sext i8 %201 to i32
%203 = icmp eq i32 %202, 45
br i1 %203, label %204, label %206
204: ; preds = %194, %188
%205 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.5, i64 0, i64 0))
br label %206
206: ; preds = %204, %194
%207 = load i8*, i8** %17
%208 = load i8**, i8*** %12
%209 = load i32, i32* %21
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i8*, i8** %208, i64 %210
%212 = load i8*, i8** %211
%213 = call i32 @strcpy(i8* %207, i8* %212)
br label %220
214: ; preds = %39
%215 = load i32*, i32** %19
store i32 1, i32* %215
br label %220
216: ; preds = %39
%217 = load i32*, i32** %20
store i32 1, i32* %217
br label %220
218: ; preds = %39
%219 = call i32 @print_error_pca(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0), i8* null)
br label %220
220: ; preds = %218, %216, %214, %206, %180, %154, %128, %102, %66
br label %223
221: ; preds = %29
%222 = call i32 @print_error_pca(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0), i8* null)
br label %223
223: ; preds = %221, %220
br label %224
224: ; preds = %223
%225 = load i32, i32* %21
%226 = add nsw i32 %225, 1
store i32 %226, i32* %21
br label %25
227: ; preds = %25
%228 = load i32, i32* %24
%229 = icmp eq i32 %228, -1
br i1 %229, label %230, label %232
230: ; preds = %227
%231 = call i32 @print_error_pca(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.8, i64 0, i64 0))
br label %232
232: ; preds = %230, %227
%233 = load i32*, i32** %18
%234 = load i32, i32* %233
%235 = icmp sle i32 %234, 0
br i1 %235, label %236, label %238
236: ; preds = %232
%237 = load i32*, i32** %18
store i32 0, i32* %237
br label %238
238: ; preds = %236, %232
%239 = load i8*, i8** %13
%240 = call i8* @remove_ext(i8* %239, i8 signext 46, i8 signext 47)
store i8* %240, i8** %22
%241 = load i8*, i8** %14
%242 = call i32 @strcmp(i8* %241, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.9, i64 0, i64 0))
%243 = icmp ne i32 %242, 0
br i1 %243, label %250, label %244
244: ; preds = %238
%245 = load i8*, i8** %14
%246 = load i8*, i8** %22
%247 = call i32 @strcpy(i8* %245, i8* %246)
%248 = load i8*, i8** %14
%249 = call i32 @strcat(i8* %248, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0))
br label %250
250: ; preds = %244, %238
%251 = load i8*, i8** %15
%252 = call i32 @strcmp(i8* %251, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.9, i64 0, i64 0))
%253 = icmp ne i32 %252, 0
br i1 %253, label %260, label %254
254: ; preds = %250
%255 = load i8*, i8** %15
%256 = load i8*, i8** %22
%257 = call i32 @strcpy(i8* %255, i8* %256)
%258 = load i8*, i8** %15
%259 = call i32 @strcat(i8* %258, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.11, i64 0, i64 0))
br label %260
260: ; preds = %254, %250
%261 = load i8*, i8** %16
%262 = call i32 @strcmp(i8* %261, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.9, i64 0, i64 0))
%263 = icmp ne i32 %262, 0
br i1 %263, label %270, label %264
264: ; preds = %260
%265 = load i8*, i8** %16
%266 = load i8*, i8** %22
%267 = call i32 @strcpy(i8* %265, i8* %266)
%268 = load i8*, i8** %16
%269 = call i32 @strcat(i8* %268, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0))
br label %270
270: ; preds = %264, %260
%271 = load i8*, i8** %17
%272 = call i32 @strcmp(i8* %271, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.9, i64 0, i64 0))
%273 = icmp ne i32 %272, 0
br i1 %273, label %280, label %274
274: ; preds = %270
%275 = load i8*, i8** %17
%276 = load i8*, i8** %22
%277 = call i32 @strcpy(i8* %275, i8* %276)
%278 = load i8*, i8** %17
%279 = call i32 @strcat(i8* %278, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0))
br label %280
280: ; preds = %274, %270
%281 = load i8*, i8** %22
%282 = call i32 @free(i8* %281)
ret void
}

LLVM IR (-O2):
@.str = [4 x i8] c"cmd\00"
@.str.1 = [35 x i8] c"K (number of principal components)\00"
@.str.2 = [18 x i8] c"x (genotype file)\00"
@.str.3 = [28 x i8] c"a (output eigenvalues file)\00"
@.str.4 = [35 x i8] c"d (output standard deviation file)\00"
@.str.5 = [27 x i8] c"p (output projection file)\00"
@.str.6 = [6 x i8] c"basic\00"
@.str.7 = [7 x i8] c"option\00"
@.str.8 = [17 x i8] c"-x genotype_file\00"
@.str.10 = [13 x i8] c".eigenvalues\00"
@.str.11 = [14 x i8] c".eigenvectors\00"
@.str.12 = [6 x i8] c".sdev\00"
@.str.13 = [12 x i8] c".projection\00"
define void @analyse_param_pca(i32 %0, i8** nocapture %1, i8* %2, i8* %3, i8* %4, i8* %5, i8* %6, i32* nocapture %7, i32* nocapture writeonly %8, i32* nocapture writeonly %9) {
%11 = alloca [512 x i8]
%12 = getelementptr inbounds [512 x i8], [512 x i8]* %11, i64 0, i64 0
%13 = icmp sgt i32 %0, 1
br i1 %13, label %14, label %139
14: ; preds = %10, %132
%15 = phi i32 [ %134, %132 ], [ -1, %10 ]
%16 = phi i32 [ %135, %132 ], [ 1, %10 ]
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i8*, i8** %1, i64 %17
%19 = load i8*, i8** %18
%20 = load i8, i8* %19
%21 = icmp eq i8 %20, 45
br i1 %21, label %22, label %130
22: ; preds = %14
%23 = getelementptr inbounds i8, i8* %19, i64 1
%24 = load i8, i8* %23
%25 = sext i8 %24 to i32
switch i32 %25, label %128 [
i32 75, label %26
i32 104, label %43
i32 120, label %46
i32 97, label %62
i32 101, label %78
i32 100, label %94
i32 112, label %110
i32 99, label %126
i32 115, label %127
]
26: ; preds = %22
%27 = add nsw i32 %16, 1
%28 = icmp eq i32 %27, %0
%29 = sext i32 %27 to i64
br i1 %28, label %35, label %30
30: ; preds = %26
%31 = getelementptr inbounds i8*, i8** %1, i64 %29
%32 = load i8*, i8** %31
%33 = load i8, i8* %32
%34 = icmp eq i8 %33, 45
br i1 %34, label %35, label %39
35: ; preds = %26, %30
%36 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0))
%37 = getelementptr inbounds i8*, i8** %1, i64 %29
%38 = load i8*, i8** %37
br label %39
39: ; preds = %35, %30
%40 = phi i8* [ %38, %35 ], [ %32, %30 ]
%41 = call i32 @atoi(i8* %40)
store i32 %41, i32* %7
%42 = call i32 @strcpy(i8* %12, i8* %40)
br label %132
43: ; preds = %22
%44 = call i32 (...) @print_help_pca()
%45 = call i32 @exit(i32 1)
unreachable
46: ; preds = %22
%47 = add nsw i32 %16, 1
%48 = icmp eq i32 %47, %0
%49 = sext i32 %47 to i64
br i1 %48, label %55, label %50
50: ; preds = %46
%51 = getelementptr inbounds i8*, i8** %1, i64 %49
%52 = load i8*, i8** %51
%53 = load i8, i8* %52
%54 = icmp eq i8 %53, 45
br i1 %54, label %55, label %59
55: ; preds = %46, %50
%56 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0))
%57 = getelementptr inbounds i8*, i8** %1, i64 %49
%58 = load i8*, i8** %57
br label %59
59: ; preds = %55, %50
%60 = phi i8* [ %58, %55 ], [ %52, %50 ]
%61 = call i32 @strcpy(i8* %2, i8* %60)
br label %132
62: ; preds = %22
%63 = add nsw i32 %16, 1
%64 = icmp eq i32 %63, %0
%65 = sext i32 %63 to i64
br i1 %64, label %71, label %66
66: ; preds = %62
%67 = getelementptr inbounds i8*, i8** %1, i64 %65
%68 = load i8*, i8** %67
%69 = load i8, i8* %68
%70 = icmp eq i8 %69, 45
br i1 %70, label %71, label %75
71: ; preds = %62, %66
%72 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0))
%73 = getelementptr inbounds i8*, i8** %1, i64 %65
%74 = load i8*, i8** %73
br label %75
75: ; preds = %71, %66
%76 = phi i8* [ %74, %71 ], [ %68, %66 ]
%77 = call i32 @strcpy(i8* %3, i8* %76)
br label %132
78: ; preds = %22
%79 = add nsw i32 %16, 1
%80 = icmp eq i32 %79, %0
%81 = sext i32 %79 to i64
br i1 %80, label %87, label %82
82: ; preds = %78
%83 = getelementptr inbounds i8*, i8** %1, i64 %81
%84 = load i8*, i8** %83
%85 = load i8, i8* %84
%86 = icmp eq i8 %85, 45
br i1 %86, label %87, label %91
87: ; preds = %78, %82
%88 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0))
%89 = getelementptr inbounds i8*, i8** %1, i64 %81
%90 = load i8*, i8** %89
br label %91
91: ; preds = %87, %82
%92 = phi i8* [ %90, %87 ], [ %84, %82 ]
%93 = call i32 @strcpy(i8* %4, i8* %92)
br label %132
94: ; preds = %22
%95 = add nsw i32 %16, 1
%96 = icmp eq i32 %95, %0
%97 = sext i32 %95 to i64
br i1 %96, label %103, label %98
98: ; preds = %94
%99 = getelementptr inbounds i8*, i8** %1, i64 %97
%100 = load i8*, i8** %99
%101 = load i8, i8* %100
%102 = icmp eq i8 %101, 45
br i1 %102, label %103, label %107
103: ; preds = %94, %98
%104 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.4, i64 0, i64 0))
%105 = getelementptr inbounds i8*, i8** %1, i64 %97
%106 = load i8*, i8** %105
br label %107
107: ; preds = %103, %98
%108 = phi i8* [ %106, %103 ], [ %100, %98 ]
%109 = call i32 @strcpy(i8* %5, i8* %108)
br label %132
110: ; preds = %22
%111 = add nsw i32 %16, 1
%112 = icmp eq i32 %111, %0
%113 = sext i32 %111 to i64
br i1 %112, label %119, label %114
114: ; preds = %110
%115 = getelementptr inbounds i8*, i8** %1, i64 %113
%116 = load i8*, i8** %115
%117 = load i8, i8* %116
%118 = icmp eq i8 %117, 45
br i1 %118, label %119, label %123
119: ; preds = %110, %114
%120 = call i32 @print_error_pca(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.5, i64 0, i64 0))
%121 = getelementptr inbounds i8*, i8** %1, i64 %113
%122 = load i8*, i8** %121
br label %123
123: ; preds = %119, %114
%124 = phi i8* [ %122, %119 ], [ %116, %114 ]
%125 = call i32 @strcpy(i8* %6, i8* %124)
br label %132
126: ; preds = %22
store i32 1, i32* %8
br label %132
127: ; preds = %22
store i32 1, i32* %9
br label %132
128: ; preds = %22
%129 = call i32 @print_error_pca(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0), i8* null)
br label %132
130: ; preds = %14
%131 = call i32 @print_error_pca(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0), i8* null)
br label %132
132: ; preds = %130, %128, %127, %126, %123, %107, %91, %75, %59, %39
%133 = phi i32 [ %16, %128 ], [ %16, %127 ], [ %16, %126 ], [ %111, %123 ], [ %95, %107 ], [ %79, %91 ], [ %63, %75 ], [ %47, %59 ], [ %27, %39 ], [ %16, %130 ]
%134 = phi i32 [ %15, %128 ], [ %15, %127 ], [ %15, %126 ], [ %15, %123 ], [ %15, %107 ], [ %15, %91 ], [ %15, %75 ], [ 0, %59 ], [ %15, %39 ], [ %15, %130 ]
%135 = add nsw i32 %133, 1
%136 = icmp slt i32 %135, %0
br i1 %136, label %14, label %137
137: ; preds = %132
%138 = icmp eq i32 %134, -1
br i1 %138, label %139, label %141
139: ; preds = %10, %137
%140 = call i32 @print_error_pca(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.8, i64 0, i64 0))
br label %141
141: ; preds = %139, %137
%142 = load i32, i32* %7
%143 = icmp slt i32 %142, 1
br i1 %143, label %144, label %145
144: ; preds = %141
store i32 0, i32* %7
br label %145
145: ; preds = %144, %141
%146 = call i8* @remove_ext(i8* %2, i8 signext 46, i8 signext 47)
%147 = load i8, i8* %3
%148 = icmp eq i8 %147, 0
br i1 %148, label %149, label %152
149: ; preds = %145
%150 = call i32 @strcpy(i8* %3, i8* %146)
%151 = call i32 @strcat(i8* %3, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0))
br label %152
152: ; preds = %149, %145
%153 = load i8, i8* %4
%154 = icmp eq i8 %153, 0
br i1 %154, label %155, label %158
155: ; preds = %152
%156 = call i32 @strcpy(i8* %4, i8* %146)
%157 = call i32 @strcat(i8* %4, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.11, i64 0, i64 0))
br label %158
158: ; preds = %155, %152
%159 = load i8, i8* %5
%160 = icmp eq i8 %159, 0
br i1 %160, label %161, label %164
161: ; preds = %158
%162 = call i32 @strcpy(i8* %5, i8* %146)
%163 = call i32 @strcat(i8* %5, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0))
br label %164
164: ; preds = %161, %158
%165 = load i8, i8* %6
%166 = icmp eq i8 %165, 0
br i1 %166, label %167, label %170
167: ; preds = %164
%168 = call i32 @strcpy(i8* %6, i8* %146)
%169 = call i32 @strcat(i8* %6, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0))
br label %170
170: ; preds = %167, %164
%171 = call i32 @free(i8* %146)
ret void
}