int lmdif0(void fcn(int, int, double[], double[], int *), int m, int n,
           double x[], int msk[], double fvec[], double tol, int *info,
           int *nfev) {
  int j, maxfev, mode;
  int *ipvt;
  double ftol, xtol, gtol, epsfcn, factor;
  double *diag, **fjac, *qtf, *wa1, *wa2, *wa3, *wa4;
  if (n <= 0 || m < n || tol < 0.0) {
    *info = 0;
    return (1);
  }
  ipvt = (int *)calloc(n, sizeof(int));
  diag = (double *)calloc(n, sizeof(double));
  qtf = (double *)calloc(n, sizeof(double));
  wa1 = (double *)calloc(n, sizeof(double));
  wa2 = (double *)calloc(n, sizeof(double));
  wa3 = (double *)calloc(n, sizeof(double));
  wa4 = (double *)calloc(m, sizeof(double));
  fjac = (double **)calloc(n, sizeof(double *));
  for (j = 0; j < n; j++)
    fjac[j] = (double *)calloc(m, sizeof(double));
  ftol = tol;
  xtol = tol;
  gtol = 0.0;
  maxfev = 800;
  epsfcn = 0.0;
  mode = 1;
  factor = 10;
  *nfev = 0;
  lmdif(fcn, m, n, x, msk, fvec, ftol, xtol, gtol, maxfev, epsfcn, diag, mode,
        factor, info, nfev, fjac, ipvt, qtf, wa1, wa2, wa3, wa4);
  if (*info == 8)
    *info = 4;
  for (j = 0; j < n; j++)
    free(fjac[j]);
  free(fjac);
  free(wa4);
  free(wa3);
  free(wa2);
  free(wa1);
  free(qtf);
  free(diag);
  free(ipvt);
  return (0);
}


x86 assembly (clang, -O0):
<lmdif0>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x138,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x38(%rbp)
mov    %esi,-0x3c(%rbp)
mov    %edx,-0x40(%rbp)
mov    %rcx,-0x48(%rbp)
mov    %r8,-0x50(%rbp)
mov    %r9,-0x58(%rbp)
movsd  %xmm0,-0x60(%rbp)
cmpl   $0x0,-0x40(%rbp)
jle    118b <lmdif0+0x5b>
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jl     118b <lmdif0+0x5b>
xorps  %xmm0,%xmm0
ucomisd -0x60(%rbp),%xmm0
jbe    11a1 <lmdif0+0x71>
mov    0x10(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x1,-0x2c(%rbp)
jmp    148c <lmdif0+0x35c>
movslq -0x40(%rbp),%rdi
mov    $0x4,%esi
call   1040 <calloc@plt>
mov    %rax,-0x78(%rbp)
movslq -0x40(%rbp),%rdi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0xa8(%rbp)
movslq -0x40(%rbp),%rdi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0xb8(%rbp)
movslq -0x40(%rbp),%rdi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0xc0(%rbp)
movslq -0x40(%rbp),%rdi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0xc8(%rbp)
movslq -0x40(%rbp),%rdi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0xd0(%rbp)
movslq -0x3c(%rbp),%rdi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0xd8(%rbp)
movslq -0x40(%rbp),%rdi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,-0xb0(%rbp)
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1287 <lmdif0+0x157>
movslq -0x3c(%rbp),%rdi
mov    $0x8,%esi
call   1040 <calloc@plt>
mov    %rax,%rdx
mov    -0xb0(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    124d <lmdif0+0x11d>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movl   $0x320,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movl   $0x1,-0x6c(%rbp)
movsd  0xd36(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x38(%rbp),%rdi
mov    -0x3c(%rbp),%esi
mov    -0x40(%rbp),%edx
mov    -0x48(%rbp),%rcx
mov    -0x50(%rbp),%r8
mov    -0x58(%rbp),%r9
movsd  -0x80(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x90(%rbp),%xmm2
ff
mov    -0x68(%rbp),%eax
mov    %eax,-0xfc(%rbp)
movsd  -0x98(%rbp),%xmm3
ff
mov    -0xa8(%rbp),%rax
mov    %rax,-0xf8(%rbp)
mov    -0x6c(%rbp),%eax
mov    %eax,-0xec(%rbp)
movsd  -0xa0(%rbp),%xmm4
ff
mov    0x10(%rbp),%rax
mov    %rax,-0xe8(%rbp)
mov    0x18(%rbp),%r13
mov    -0xb0(%rbp),%r12
mov    -0x78(%rbp),%r15
mov    -0xb8(%rbp),%r14
mov    -0xc0(%rbp),%rbx
mov    -0xc8(%rbp),%r11
mov    -0xd0(%rbp),%r10
mov    -0xd8(%rbp),%rax
mov    %rax,-0xe0(%rbp)
mov    -0xfc(%rbp),%eax
mov    %eax,(%rsp)
mov    -0xf8(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0xec(%rbp),%eax
mov    %eax,0x10(%rsp)
mov    -0xe8(%rbp),%rax
mov    %rax,0x18(%rsp)
mov    -0xe0(%rbp),%rax
mov    %r13,0x20(%rsp)
mov    %r12,0x28(%rsp)
mov    %r15,0x30(%rsp)
mov    %r14,0x38(%rsp)
mov    %rbx,0x40(%rsp)
mov    %r11,0x48(%rsp)
mov    %r10,0x50(%rsp)
mov    %rax,0x58(%rsp)
mov    $0x5,%al
call   1050 <lmdif@plt>
mov    0x10(%rbp),%rax
cmpl   $0x8,(%rax)
jne    13f3 <lmdif0+0x2c3>
mov    0x10(%rbp),%rax
movl   $0x4,(%rax)
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1428 <lmdif0+0x2f8>
mov    -0xb0(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    13fa <lmdif0+0x2ca>
mov    -0xb0(%rbp),%rdi
call   1030 <free@plt>
mov    -0xd8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xd0(%rbp),%rdi
call   1030 <free@plt>
mov    -0xc8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xc0(%rbp),%rdi
call   1030 <free@plt>
mov    -0xb8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xa8(%rbp),%rdi
call   1030 <free@plt>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x138,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<lmdif0>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    0xa0(%rsp),%rax
test   %edx,%edx
jle    133e <lmdif0+0x20e>
mov    %edx,%r13d
mov    %esi,%ebp
cmp    %edx,%esi
jl     133e <lmdif0+0x20e>
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     133e <lmdif0+0x20e>
mov    %rdi,0x28(%rsp)
mov    %rcx,0x30(%rsp)
mov    %r8,0x38(%rsp)
mov    %r9,0x40(%rsp)
movsd  %xmm0,0x48(%rsp)
mov    %r13d,%ebx
mov    $0x4,%esi
mov    %rbx,%rdi
call   1040 <calloc@plt>
mov    %rax,0x60(%rsp)
mov    $0x8,%esi
mov    %rbx,%rdi
call   1040 <calloc@plt>
mov    %rax,0x58(%rsp)
mov    $0x8,%esi
mov    %rbx,%rdi
call   1040 <calloc@plt>
mov    %rax,0x50(%rsp)
mov    $0x8,%esi
mov    %rbx,%rdi
call   1040 <calloc@plt>
mov    %rax,0x20(%rsp)
mov    $0x8,%esi
mov    %rbx,%rdi
call   1040 <calloc@plt>
mov    %rax,0x18(%rsp)
mov    $0x8,%esi
mov    %rbx,%rdi
call   1040 <calloc@plt>
mov    %rax,0x10(%rsp)
movslq %ebp,%r12
mov    $0x8,%esi
mov    %r12,%rdi
call   1040 <calloc@plt>
mov    %rax,0x8(%rsp)
mov    $0x8,%esi
mov    %rbx,%rdi
call   1040 <calloc@plt>
mov    %rax,%r15
xor    %r14d,%r14d
nopw   0x0(%rax,%rax,1)
mov    $0x8,%esi
mov    %r12,%rdi
call   1040 <calloc@plt>
mov    %rax,(%r15,%r14,8)
add    $0x1,%r14
cmp    %r14,%rbx
jne    1220 <lmdif0+0xf0>
mov    0xa8(%rsp),%r10
movl   $0x0,(%r10)
movsd  0xdaf(%rip),%xmm4
xorps  %xmm2,%xmm2
xorps  %xmm3,%xmm3
mov    0x28(%rsp),%rdi
mov    %ebp,%esi
mov    %r13d,%edx
mov    0x30(%rsp),%rcx
mov    0x38(%rsp),%r8
mov    0x40(%rsp),%r9
movsd  0x48(%rsp),%xmm0
movapd %xmm0,%xmm1
mov    $0x5,%al
push   0x8(%rsp)
push   0x18(%rsp)
push   0x28(%rsp)
push   0x38(%rsp)
mov    0x70(%rsp),%r13
push   %r13
mov    0x88(%rsp),%r14
push   %r14
push   %r15
push   %r10
mov    0xe0(%rsp),%rbp
push   %rbp
push   $0x1
mov    0xa8(%rsp),%r12
push   %r12
push   $0x320
call   1050 <lmdif@plt>
add    $0x60,%rsp
cmpl   $0x8,0x0(%rbp)
jne    12d4 <lmdif0+0x1a4>
mov    %rbp,%rax
movl   $0x4,0x0(%rbp)
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
mov    (%r15,%rbp,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbp
cmp    %rbp,%rbx
jne    12e0 <lmdif0+0x1b0>
mov    %r15,%rdi
call   1030 <free@plt>
mov    0x8(%rsp),%rdi
call   1030 <free@plt>
mov    0x10(%rsp),%rdi
call   1030 <free@plt>
mov    0x18(%rsp),%rdi
call   1030 <free@plt>
mov    0x20(%rsp),%rdi
call   1030 <free@plt>
mov    %r13,%rdi
call   1030 <free@plt>
mov    %r12,%rdi
call   1030 <free@plt>
mov    %r14,%rdi
call   1030 <free@plt>
xor    %eax,%eax
jmp    1349 <lmdif0+0x219>
movl   $0x0,(%rax)
mov    $0x1,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @lmdif0(void (i32, i32, double*, double*, i32*)* %0, i32 %1, i32 %2, double* %3, i32* %4, double* %5, double %6, i32* %7, i32* %8) {
%10 = icmp slt i32 %2, 1
br i1 %10, label %15, label %11
11: ; preds = %9
%12 = icmp slt i32 %1, %2
%13 = fcmp olt double %6, 0.000000e+00
%14 = or i1 %12, %13
br i1 %14, label %15, label %16
15: ; preds = %11, %9
store i32 0, i32* %7
br label %56
16: ; preds = %11
%17 = zext i32 %2 to i64
%18 = tail call i8* @calloc(i64 %17, i64 4)
%19 = bitcast i8* %18 to i32*
%20 = tail call i8* @calloc(i64 %17, i64 8)
%21 = bitcast i8* %20 to double*
%22 = tail call i8* @calloc(i64 %17, i64 8)
%23 = bitcast i8* %22 to double*
%24 = tail call i8* @calloc(i64 %17, i64 8)
%25 = bitcast i8* %24 to double*
%26 = tail call i8* @calloc(i64 %17, i64 8)
%27 = bitcast i8* %26 to double*
%28 = tail call i8* @calloc(i64 %17, i64 8)
%29 = bitcast i8* %28 to double*
%30 = sext i32 %1 to i64
%31 = tail call i8* @calloc(i64 %30, i64 8)
%32 = bitcast i8* %31 to double*
%33 = tail call i8* @calloc(i64 %17, i64 8)
%34 = bitcast i8* %33 to double**
br label %35
35: ; preds = %16, %35
%36 = phi i64 [ 0, %16 ], [ %40, %35 ]
%37 = tail call i8* @calloc(i64 %30, i64 8)
%38 = getelementptr inbounds double*, double** %34, i64 %36
%39 = bitcast double** %38 to i8**
store i8* %37, i8** %39
%40 = add nuw nsw i64 %36, 1
%41 = icmp eq i64 %40, %17
br i1 %41, label %42, label %35
42: ; preds = %35
store i32 0, i32* %8
%43 = tail call i32 (void (i32, i32, double*, double*, i32*)*, i32, i32, double*, i32*, double*, double, double, double, i32, double, double*, i32, double, i32*, i32*, double**, i32*, double*, double*, double*, double*, double*, ...) bitcast (i32 (...)* @lmdif to i32 (void (i32, i32, double*, double*, i32*)*, i32, i32, double*, i32*, double*, double, double, double, i32, double, double*, i32, double, i32*, i32*, double**, i32*, double*, double*, double*, double*, double*, ...)*)(void (i32, i32, double*, double*, i32*)* %0, i32 %1, i32 %2, double* %3, i32* %4, double* %5, double %6, double %6, double 0.000000e+00, i32 800, double 0.000000e+00, double* %21, i32 1, double 1.000000e+01, i32* %7, i32* %8, double** %34, i32* %19, double* %23, double* %25, double* %27, double* %29, double* %32)
%44 = load i32, i32* %7
%45 = icmp eq i32 %44, 8
br i1 %45, label %46, label %47
46: ; preds = %42
store i32 4, i32* %7
br label %47
47: ; preds = %42, %46
br label %48
48: ; preds = %47, %48
%49 = phi i64 [ %53, %48 ], [ 0, %47 ]
%50 = getelementptr inbounds double*, double** %34, i64 %49
%51 = bitcast double** %50 to i8**
%52 = load i8*, i8** %51
tail call void @free(i8* %52)
%53 = add nuw nsw i64 %49, 1
%54 = icmp eq i64 %53, %17
br i1 %54, label %55, label %48
55: ; preds = %48
tail call void @free(i8* %33)
tail call void @free(i8* %31)
tail call void @free(i8* %28)
tail call void @free(i8* %26)
tail call void @free(i8* %24)
tail call void @free(i8* %22)
tail call void @free(i8* %20)
tail call void @free(i8* %18)
br label %56
56: ; preds = %55, %15
%57 = phi i32 [ 1, %15 ], [ 0, %55 ]
ret i32 %57
}