#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*/ free(int *);
scalar_t__ malloc(int);
int /*<<< orphan*/ memset(int *, int /*<<< orphan*/, int);
int find_number_of_unique_paths_in_matrix(int row, int col) {
  int **matrix;
  int i, j, max_paths;
  if ((row <= 0) || (col <= 0)) {
    return (0);
  }
  matrix = (int **)malloc(sizeof(int *) * row);
  if (!matrix) {
    return (0);
  }
  for (i = 0; i < row; ++i) {
    matrix[i] = (int *)malloc(sizeof(int) * col);
    if (!matrix[i]) {
      for (j = 0; j < i; ++j) {
        free(matrix[j]);
      }
      return (0);
    }
    memset(matrix[i], 0, sizeof(int) * col);
  }
  matrix[0][0] = 1;
  for (i = 0; i < row; ++i) {
    for (j = 0; j < col; ++j) {
      if ((i - 1) >= 0) {
        matrix[i][j] += matrix[i - 1][j];
      }
      if ((j - 1) >= 0) {
        matrix[i][j] += matrix[i][j - 1];
      }
    }
  }
  max_paths = matrix[row - 1][col - 1];
  for (j = 0; j < row; ++j) {
    free(matrix[j]);
  }
  return (max_paths);
}


x86 assembly (clang, -O0):
<find_number_of_unique_paths_in_matrix>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
cmpl   $0x0,-0x8(%rbp)
jle    1152 <find_number_of_unique_paths_in_matrix+0x22>
cmpl   $0x0,-0xc(%rbp)
jg     115e <find_number_of_unique_paths_in_matrix+0x2e>
movl   $0x0,-0x4(%rbp)
jmp    1360 <find_number_of_unique_paths_in_matrix+0x230>
movslq -0x8(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1050 <malloc@plt>
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    1188 <find_number_of_unique_paths_in_matrix+0x58>
movl   $0x0,-0x4(%rbp)
jmp    1360 <find_number_of_unique_paths_in_matrix+0x230>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1235 <find_number_of_unique_paths_in_matrix+0x105>
movslq -0xc(%rbp),%rax
shl    $0x2,%rax
mov    %eax,%edi
call   1050 <malloc@plt>
mov    %rax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
cmpq   $0x0,(%rax,%rcx,8)
jne    120a <find_number_of_unique_paths_in_matrix+0xda>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    11fe <find_number_of_unique_paths_in_matrix+0xce>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11d3 <find_number_of_unique_paths_in_matrix+0xa3>
movl   $0x0,-0x4(%rbp)
jmp    1360 <find_number_of_unique_paths_in_matrix+0x230>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
movslq -0xc(%rbp),%rax
shl    $0x2,%rax
mov    %eax,%edx
xor    %esi,%esi
call   1040 <memset@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    118f <find_number_of_unique_paths_in_matrix+0x5f>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movl   $0x1,(%rax)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1308 <find_number_of_unique_paths_in_matrix+0x1d8>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12f5 <find_number_of_unique_paths_in_matrix+0x1c5>
mov    -0x1c(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     12a5 <find_number_of_unique_paths_in_matrix+0x175>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     12e2 <find_number_of_unique_paths_in_matrix+0x1b2>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
jmp    12e7 <find_number_of_unique_paths_in_matrix+0x1b7>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    125c <find_number_of_unique_paths_in_matrix+0x12c>
jmp    12fa <find_number_of_unique_paths_in_matrix+0x1ca>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1249 <find_number_of_unique_paths_in_matrix+0x119>
mov    -0x18(%rbp),%rax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    135a <find_number_of_unique_paths_in_matrix+0x22a>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    132f <find_number_of_unique_paths_in_matrix+0x1ff>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<find_number_of_unique_paths_in_matrix>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
xor    %r12d,%r12d
test   %edi,%edi
jle    1282 <find_number_of_unique_paths_in_matrix+0x152>
mov    %esi,%r14d
test   %esi,%esi
jle    1282 <find_number_of_unique_paths_in_matrix+0x152>
mov    %edi,%ebx
lea    0x0(,%rbx,8),%edi
call   1050 <malloc@plt>
test   %rax,%rax
je     1282 <find_number_of_unique_paths_in_matrix+0x152>
mov    %rax,%r15
mov    %rbx,(%rsp)
mov    %ebx,%r13d
lea    0x0(,%r14,4),%ebp
xor    %r12d,%r12d
nopl   (%rax)
mov    %ebp,%edi
call   1050 <malloc@plt>
mov    %rax,(%r15,%r12,8)
test   %rax,%rax
je     1227 <find_number_of_unique_paths_in_matrix+0xf7>
mov    %rax,%rdi
xor    %esi,%esi
mov    %ebp,%edx
call   1040 <memset@plt>
add    $0x1,%r12
cmp    %r12,%r13
jne    1180 <find_number_of_unique_paths_in_matrix+0x50>
mov    (%r15),%rdi
movl   $0x1,(%rdi)
mov    %r14d,%eax
xor    %ecx,%ecx
mov    (%rsp),%r8
jmp    11c9 <find_number_of_unique_paths_in_matrix+0x99>
nopl   (%rax)
add    $0x1,%rcx
cmp    %r13,%rcx
je     1247 <find_number_of_unique_paths_in_matrix+0x117>
test   %r14d,%r14d
jle    11c0 <find_number_of_unique_paths_in_matrix+0x90>
test   %rcx,%rcx
je     11e0 <find_number_of_unique_paths_in_matrix+0xb0>
mov    -0x8(%r15,%rcx,8),%rdx
mov    (%r15,%rcx,8),%rsi
mov    (%rdx),%edx
add    %edx,(%rsi)
cmp    $0x1,%r14d
je     11c0 <find_number_of_unique_paths_in_matrix+0x90>
mov    (%r15,%rcx,8),%rdx
mov    $0x1,%esi
jmp    1210 <find_number_of_unique_paths_in_matrix+0xe0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    -0x4(%rdx,%rsi,4),%ebp
add    %ebp,(%rdx,%rsi,4)
add    $0x1,%rsi
cmp    %rsi,%rax
je     11c0 <find_number_of_unique_paths_in_matrix+0x90>
test   %rcx,%rcx
je     1200 <find_number_of_unique_paths_in_matrix+0xd0>
mov    -0x8(%r15,%rcx,8),%rbp
mov    (%r15,%rcx,8),%rbx
mov    0x0(%rbp,%rsi,4),%ebp
add    %ebp,(%rbx,%rsi,4)
jmp    1200 <find_number_of_unique_paths_in_matrix+0xd0>
test   %r12d,%r12d
je     1242 <find_number_of_unique_paths_in_matrix+0x112>
xor    %ebp,%ebp
xchg   %ax,%ax
mov    (%r15,%rbp,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbp
cmp    %rbp,%r12
jne    1230 <find_number_of_unique_paths_in_matrix+0x100>
xor    %r12d,%r12d
jmp    1282 <find_number_of_unique_paths_in_matrix+0x152>
add    $0xffffffff,%r8d
mov    (%r15,%r8,8),%rax
add    $0xffffffff,%r14d
mov    (%rax,%r14,4),%r12d
call   1030 <free@plt>
cmp    $0x1,%r13d
je     1282 <find_number_of_unique_paths_in_matrix+0x152>
mov    $0x1,%ebp
nopw   0x0(%rax,%rax,1)
mov    (%r15,%rbp,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbp
cmp    %rbp,%r13
jne    1270 <find_number_of_unique_paths_in_matrix+0x140>
mov    %r12d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @find_number_of_unique_paths_in_matrix(i32 %0, i32 %1) {
%3 = icmp slt i32 %0, 1
%4 = icmp slt i32 %1, 1
%5 = or i1 %3, %4
br i1 %5, label %99, label %6
6: ; preds = %2
%7 = shl i32 %0, 3
%8 = tail call i64 @malloc(i32 %7)
%9 = inttoptr i64 %8 to i32**
%10 = icmp eq i64 %8, 0
br i1 %10, label %99, label %11
11: ; preds = %6
%12 = shl i32 %1, 2
%13 = zext i32 %0 to i64
br label %14
14: ; preds = %11, %32
%15 = phi i64 [ 0, %11 ], [ %34, %32 ]
%16 = tail call i64 @malloc(i32 %12)
%17 = inttoptr i64 %16 to i32*
%18 = getelementptr inbounds i32*, i32** %9, i64 %15
store i32* %17, i32** %18
%19 = icmp eq i64 %16, 0
br i1 %19, label %20, label %32
20: ; preds = %14
%21 = trunc i64 %15 to i32
%22 = icmp eq i32 %21, 0
br i1 %22, label %99, label %23
23: ; preds = %20
%24 = and i64 %15, 4294967295
br label %25
25: ; preds = %23, %25
%26 = phi i64 [ 0, %23 ], [ %30, %25 ]
%27 = getelementptr inbounds i32*, i32** %9, i64 %26
%28 = load i32*, i32** %27
%29 = tail call i32 @free(i32* %28)
%30 = add nuw nsw i64 %26, 1
%31 = icmp eq i64 %30, %24
br i1 %31, label %99, label %25
32: ; preds = %14
%33 = tail call i32 @memset(i32* %17, i32 0, i32 %12)
%34 = add nuw nsw i64 %15, 1
%35 = icmp eq i64 %34, %13
br i1 %35, label %36, label %14
36: ; preds = %32
%37 = load i32*, i32** %9
store i32 1, i32* %37
%38 = icmp sgt i32 %1, 0
%39 = zext i32 %0 to i64
%40 = zext i32 %1 to i64
%41 = icmp eq i32 %1, 1
br label %42
42: ; preds = %36, %77
%43 = phi i64 [ 0, %36 ], [ %78, %77 ]
br i1 %38, label %44, label %77
44: ; preds = %42
%45 = icmp eq i64 %43, 0
%46 = add nsw i64 %43, -1
%47 = getelementptr inbounds i32*, i32** %9, i64 %46
%48 = getelementptr inbounds i32*, i32** %9, i64 %43
br i1 %45, label %55, label %49
49: ; preds = %44
%50 = load i32*, i32** %47
%51 = load i32, i32* %50
%52 = load i32*, i32** %48
%53 = load i32, i32* %52
%54 = add nsw i32 %53, %51
store i32 %54, i32* %52
br label %55
55: ; preds = %44, %49
br i1 %41, label %77, label %56
56: ; preds = %55
%57 = load i32*, i32** %48
br label %58
58: ; preds = %56, %68
%59 = phi i64 [ 1, %56 ], [ %75, %68 ]
br i1 %45, label %68, label %60
60: ; preds = %58
%61 = load i32*, i32** %47
%62 = getelementptr inbounds i32, i32* %61, i64 %59
%63 = load i32, i32* %62
%64 = load i32*, i32** %48
%65 = getelementptr inbounds i32, i32* %64, i64 %59
%66 = load i32, i32* %65
%67 = add nsw i32 %66, %63
store i32 %67, i32* %65
br label %68
68: ; preds = %60, %58
%69 = add nsw i64 %59, -1
%70 = getelementptr inbounds i32, i32* %57, i64 %69
%71 = load i32, i32* %70
%72 = getelementptr inbounds i32, i32* %57, i64 %59
%73 = load i32, i32* %72
%74 = add nsw i32 %73, %71
store i32 %74, i32* %72
%75 = add nuw nsw i64 %59, 1
%76 = icmp eq i64 %75, %40
br i1 %76, label %77, label %58
77: ; preds = %68, %55, %42
%78 = add nuw nsw i64 %43, 1
%79 = icmp eq i64 %78, %39
br i1 %79, label %80, label %42
80: ; preds = %77
%81 = add nsw i32 %0, -1
%82 = zext i32 %81 to i64
%83 = getelementptr inbounds i32*, i32** %9, i64 %82
%84 = load i32*, i32** %83
%85 = add nsw i32 %1, -1
%86 = zext i32 %85 to i64
%87 = getelementptr inbounds i32, i32* %84, i64 %86
%88 = load i32, i32* %87
%89 = zext i32 %0 to i64
%90 = tail call i32 @free(i32* %37)
%91 = icmp eq i32 %0, 1
br i1 %91, label %99, label %92
92: ; preds = %80, %92
%93 = phi i64 [ %97, %92 ], [ 1, %80 ]
%94 = getelementptr inbounds i32*, i32** %9, i64 %93
%95 = load i32*, i32** %94
%96 = tail call i32 @free(i32* %95)
%97 = add nuw nsw i64 %93, 1
%98 = icmp eq i64 %97, %89
br i1 %98, label %99, label %92
99: ; preds = %92, %25, %80, %20, %6, %2
%100 = phi i32 [ 0, %2 ], [ 0, %6 ], [ 0, %20 ], [ %88, %80 ], [ 0, %25 ], [ %88, %92 ]
ret i32 %100
}