void setZeroes(int **matrix, int matrixRowSize, int matrixColSize) {
  int r = matrixRowSize;
  if (r == 0)
    return;
  int c = matrixColSize;
  int firstRow = 1;
  int firstCol = 1;
  for (int i = 0; i < r; i++) {
    if (matrix[i][0] == 0)
      firstCol = 0;
    for (int j = 0; j < c; j++) {
      if (i == 0 && matrix[i][j] == 0)
        firstRow = 0;
      if (matrix[i][j] == 0) {
        matrix[i][0] = 0;
        matrix[0][j] = 0;
      }
    }
  }
  for (int i = 1; i < r; i++) {
    for (int j = 1; j < c; j++) {
      if (matrix[i][0] == 0 || matrix[0][j] == 0) {
        matrix[i][j] = 0;
      }
    }
  }
  if (firstRow == 0) {
    for (int j = 0; j < c; j++)
      matrix[0][j] = 0;
  }
  if (firstCol == 0) {
    for (int i = 0; i < r; i++)
      matrix[i][0] = 0;
  }
  return;
}


x86 assembly (clang, -O0):
<setZeroes>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jne    1123 <setZeroes+0x23>
jmp    131e <setZeroes+0x21e>
mov    -0x10(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x1,-0x1c(%rbp)
movl   $0x1,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1208 <setZeroes+0x108>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
cmpl   $0x0,(%rax)
jne    1166 <setZeroes+0x66>
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    11f5 <setZeroes+0xf5>
cmpl   $0x0,-0x24(%rbp)
jne    11a4 <setZeroes+0xa4>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    11a4 <setZeroes+0xa4>
movl   $0x0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    11e2 <setZeroes+0xe2>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movl   $0x0,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movslq -0x28(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    11e7 <setZeroes+0xe7>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    116d <setZeroes+0x6d>
jmp    11fa <setZeroes+0xfa>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    113e <setZeroes+0x3e>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1295 <setZeroes+0x195>
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1282 <setZeroes+0x182>
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
cmpl   $0x0,(%rax)
je     1258 <setZeroes+0x158>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movslq -0x30(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    126f <setZeroes+0x16f>
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    1274 <setZeroes+0x174>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1222 <setZeroes+0x122>
jmp    1287 <setZeroes+0x187>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    120f <setZeroes+0x10f>
cmpl   $0x0,-0x1c(%rbp)
jne    12d7 <setZeroes+0x1d7>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    12d2 <setZeroes+0x1d2>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movslq -0x34(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12a6 <setZeroes+0x1a6>
jmp    12d7 <setZeroes+0x1d7>
cmpl   $0x0,-0x20(%rbp)
jne    1319 <setZeroes+0x219>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1314 <setZeroes+0x214>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movl   $0x0,(%rax)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    12e8 <setZeroes+0x1e8>
jmp    1319 <setZeroes+0x219>
jmp    131e <setZeroes+0x21e>
pop    %rbp
ret

x86 assembly (clang, -O2):
<setZeroes>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
test   %esi,%esi
je     13c3 <setZeroes+0x2b3>
jle    13c3 <setZeroes+0x2b3>
mov    %rdi,%r13
mov    %esi,0x4(%rsp)
mov    %esi,%r15d
mov    %edx,%r11d
lea    -0x1(%r11),%r9
mov    %r11d,%r8d
and    $0xfffffffe,%r8d
mov    $0x1,%r12d
xor    %r10d,%r10d
xor    %r14d,%r14d
mov    $0x1,%esi
jmp    1170 <setZeroes+0x60>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %rcx,%r11
add    $0x1,%r14
cmp    %r15,%r14
je     1222 <setZeroes+0x112>
mov    0x0(%r13,%r14,8),%rbp
mov    0x0(%rbp),%eax
test   %eax,%eax
cmove  %eax,%r12d
test   %edx,%edx
jle    1163 <setZeroes+0x53>
xor    %eax,%eax
test   %r9,%r9
jne    11c9 <setZeroes+0xb9>
test   $0x1,%r11b
je     1163 <setZeroes+0x53>
mov    %r11,%rcx
mov    0x0(%rbp,%rax,4),%r11d
test   %r11d,%r11d
mov    %esi,%ebx
cmove  %r11d,%ebx
test   %r14,%r14
cmove  %ebx,%esi
test   %r11d,%r11d
jne    1160 <setZeroes+0x50>
movl   $0x0,0x0(%rbp)
mov    0x0(%r13),%rbp
movl   $0x0,0x0(%rbp,%rax,4)
jmp    1160 <setZeroes+0x50>
add    $0x2,%rax
cmp    %rax,%r8
je     1189 <setZeroes+0x79>
test   %r14,%r14
sete   %cl
mov    0x0(%rbp,%rax,4),%edi
test   %edi,%edi
sete   %bl
and    %cl,%bl
test   %edi,%edi
jne    11f0 <setZeroes+0xe0>
movl   $0x0,0x0(%rbp)
mov    0x0(%r13),%rcx
movl   $0x0,(%rcx,%rax,4)
test   %bl,%bl
mov    %esi,%ecx
cmovne %r10d,%ecx
mov    0x4(%rbp,%rax,4),%edi
test   %edi,%edi
mov    %ecx,%esi
cmove  %edi,%esi
test   %r14,%r14
cmovne %ecx,%esi
test   %edi,%edi
jne    11c0 <setZeroes+0xb0>
movl   $0x0,0x0(%rbp)
mov    0x0(%r13),%rcx
movl   $0x0,0x4(%rcx,%rax,4)
jmp    11c0 <setZeroes+0xb0>
mov    0x4(%rsp),%r14d
cmp    $0x2,%r14d
jl     12e0 <setZeroes+0x1d0>
mov    %r9,%rax
and    $0xfffffffffffffffe,%rax
neg    %rax
mov    $0x1,%r10d
jmp    125d <setZeroes+0x14d>
movl   $0x0,(%rdi,%rbp,4)
nopw   0x0(%rax,%rax,1)
add    $0x1,%r10
cmp    %r15,%r10
je     12e0 <setZeroes+0x1d0>
cmp    $0x2,%edx
jl     1250 <setZeroes+0x140>
mov    0x0(%r13,%r10,8),%rdi
mov    (%rdi),%ecx
mov    $0x1,%ebp
jne    1290 <setZeroes+0x180>
test   $0x1,%r9b
je     1250 <setZeroes+0x140>
test   %ecx,%ecx
je     1243 <setZeroes+0x133>
mov    0x0(%r13),%rcx
cmpl   $0x0,(%rcx,%rbp,4)
jne    1250 <setZeroes+0x140>
jmp    1243 <setZeroes+0x133>
cs nopw 0x0(%rax,%rax,1)
mov    $0x1,%ebp
jmp    12ba <setZeroes+0x1aa>
nopw   0x0(%rax,%rax,1)
movl   $0x0,0x4(%rdi,%rbp,4)
lea    (%rax,%rbp,1),%rbx
add    $0x2,%rbx
add    $0x2,%rbp
cmp    $0x1,%rbx
je     1270 <setZeroes+0x160>
test   %ecx,%ecx
je     12c8 <setZeroes+0x1b8>
mov    0x0(%r13),%rbx
cmpl   $0x0,(%rbx,%rbp,4)
jne    12cf <setZeroes+0x1bf>
movl   $0x0,(%rdi,%rbp,4)
test   %ecx,%ecx
je     12a0 <setZeroes+0x190>
mov    0x0(%r13),%rbx
cmpl   $0x0,0x4(%rbx,%rbp,4)
jne    12a8 <setZeroes+0x198>
jmp    12a0 <setZeroes+0x190>
test   %esi,%esi
jne    12fa <setZeroes+0x1ea>
test   %edx,%edx
jle    12fa <setZeroes+0x1ea>
mov    0x0(%r13),%rdi
shl    $0x2,%r11
xor    %esi,%esi
mov    %r11,%rdx
call   1030 <memset@plt>
test   %r12d,%r12d
jne    13c3 <setZeroes+0x2b3>
test   %r14d,%r14d
jle    13c3 <setZeroes+0x2b3>
lea    -0x1(%r15),%rcx
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%rcx
jae    1320 <setZeroes+0x210>
xor    %ecx,%ecx
jmp    1391 <setZeroes+0x281>
and    $0xfffffff8,%r15d
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
mov    0x0(%r13,%rcx,8),%rdx
movl   $0x0,(%rdx)
mov    0x8(%r13,%rcx,8),%rdx
movl   $0x0,(%rdx)
mov    0x10(%r13,%rcx,8),%rdx
movl   $0x0,(%rdx)
mov    0x18(%r13,%rcx,8),%rdx
movl   $0x0,(%rdx)
mov    0x20(%r13,%rcx,8),%rdx
movl   $0x0,(%rdx)
mov    0x28(%r13,%rcx,8),%rdx
movl   $0x0,(%rdx)
mov    0x30(%r13,%rcx,8),%rdx
movl   $0x0,(%rdx)
mov    0x38(%r13,%rcx,8),%rdx
movl   $0x0,(%rdx)
add    $0x8,%rcx
cmp    %rcx,%r15
jne    1330 <setZeroes+0x220>
test   %rax,%rax
je     13c3 <setZeroes+0x2b3>
lea    0x0(,%rcx,8),%rcx
add    %r13,%rcx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%rcx,%rdx,8),%rsi
movl   $0x0,(%rsi)
add    $0x1,%rdx
cmp    %rdx,%rax
jne    13b0 <setZeroes+0x2a0>
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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