void avgpix(unsigned char *src, unsigned char *msk, unsigned char *dst,
            int xmin, int xmax, int xspan, int ymin, int ymax, int yspan,
            int zmin, int zmax, int zspan) {
  int csum, cnum, psum[65], pnum[65];
  int sum, num, i, j, k, x, y, z;
  int xsmin, xsmax, ysmin, ysmax, zsmin, zsmax;
  for (z = zmin; z < zmax; ++z)
    for (y = ymin; y < ymax; ++y)
      for (x = xmin; x < xmax; ++x) {
        zsmin = z - zspan;
        zsmax = z + zspan;
        ysmin = y - yspan;
        ysmax = y + yspan;
        xsmin = x - xspan;
        xsmax = x + xspan;
        sum = 0;
        num = 0;
        for (k = zsmin; k <= zsmax; ++k)
          for (j = ysmin; j <= ysmax; ++j)
            for (i = xsmin; i <= xsmax; ++i) {
              if (*(msk + k * 65536 + j * 256 + i)) {
                sum += *(src + k * 65536 + j * 256 + i);
                ++num;
              }
            }
        if (num == 0)
          *(dst + z * 65536 + y * 256 + x) = 0x00;
        else
          *(dst + z * 65536 + y * 256 + x) = (unsigned char)(sum / num);
      }
}


x86 assembly (clang, -O0):
<avgpix>:
push   %rbp
mov    %rsp,%rbp
sub    $0x200,%rsp
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
mov    0x28(%rbp),%eax
mov    %eax,-0x260(%rbp)
mov    -0x260(%rbp),%eax
cmp    0x30(%rbp),%eax
jge    13cf <avgpix+0x2cf>
mov    0x10(%rbp),%eax
mov    %eax,-0x25c(%rbp)
mov    -0x25c(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    13b6 <avgpix+0x2b6>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x258(%rbp)
mov    -0x258(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    139d <avgpix+0x29d>
mov    -0x260(%rbp),%eax
sub    0x38(%rbp),%eax
mov    %eax,-0x274(%rbp)
mov    -0x260(%rbp),%eax
add    0x38(%rbp),%eax
mov    %eax,-0x278(%rbp)
mov    -0x25c(%rbp),%eax
sub    0x20(%rbp),%eax
mov    %eax,-0x26c(%rbp)
mov    -0x25c(%rbp),%eax
add    0x20(%rbp),%eax
mov    %eax,-0x270(%rbp)
mov    -0x258(%rbp),%eax
sub    -0x24(%rbp),%eax
mov    %eax,-0x264(%rbp)
mov    -0x258(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x268(%rbp)
movl   $0x0,-0x244(%rbp)
movl   $0x0,-0x248(%rbp)
mov    -0x274(%rbp),%eax
mov    %eax,-0x254(%rbp)
mov    -0x254(%rbp),%eax
cmp    -0x278(%rbp),%eax
jg     130a <avgpix+0x20a>
mov    -0x26c(%rbp),%eax
mov    %eax,-0x250(%rbp)
mov    -0x250(%rbp),%eax
cmp    -0x270(%rbp),%eax
jg     12f1 <avgpix+0x1f1>
mov    -0x264(%rbp),%eax
mov    %eax,-0x24c(%rbp)
mov    -0x24c(%rbp),%eax
cmp    -0x268(%rbp),%eax
jg     12d8 <avgpix+0x1d8>
mov    -0x10(%rbp),%rax
mov    -0x254(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x250(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x24c(%rbp),%rcx
cmpb   $0x0,(%rax,%rcx,1)
je     12bf <avgpix+0x1bf>
mov    -0x8(%rbp),%rax
mov    -0x254(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x250(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x24c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
add    -0x244(%rbp),%eax
mov    %eax,-0x244(%rbp)
mov    -0x248(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x248(%rbp)
jmp    12c4 <avgpix+0x1c4>
mov    -0x24c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24c(%rbp)
jmp    1232 <avgpix+0x132>
jmp    12dd <avgpix+0x1dd>
mov    -0x250(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x250(%rbp)
jmp    1214 <avgpix+0x114>
jmp    12f6 <avgpix+0x1f6>
mov    -0x254(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x254(%rbp)
jmp    11f6 <avgpix+0xf6>
cmpl   $0x0,-0x248(%rbp)
jne    1349 <avgpix+0x249>
mov    -0x18(%rbp),%rax
mov    -0x260(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x25c(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x258(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1384 <avgpix+0x284>
mov    -0x244(%rbp),%eax
cltd
idivl  -0x248(%rbp)
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x260(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x25c(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x258(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1389 <avgpix+0x289>
mov    -0x258(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x258(%rbp)
jmp    116d <avgpix+0x6d>
jmp    13a2 <avgpix+0x2a2>
mov    -0x25c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x25c(%rbp)
jmp    1155 <avgpix+0x55>
jmp    13bb <avgpix+0x2bb>
mov    -0x260(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x260(%rbp)
jmp    113d <avgpix+0x3d>
add    $0x200,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<avgpix>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xa0,%rsp
mov    %r9d,-0x6c(%rsp)
mov    %r8d,-0x7c(%rsp)
mov    %ecx,-0x80(%rsp)
mov    %rdx,0x18(%rsp)
mov    %rsi,-0x8(%rsp)
mov    %rdi,-0x10(%rsp)
mov    0xf8(%rsp),%r8d
mov    0xf0(%rsp),%ecx
cmp    %r8d,%ecx
jge    14e8 <avgpix+0x3e8>
mov    %ecx,%esi
mov    0x100(%rsp),%edi
mov    0xe8(%rsp),%ebp
mov    0xd8(%rsp),%r9d
mov    -0x80(%rsp),%ecx
mov    %ecx,%eax
mov    -0x6c(%rsp),%r10d
sub    %r10d,%eax
mov    %eax,-0x48(%rsp)
mov    %r9d,%eax
sub    %ebp,%eax
mov    %eax,-0x50(%rsp)
mov    %esi,%r11d
sub    %edi,%r11d
movslq %ecx,%rax
mov    %rax,0x30(%rsp)
movslq %r9d,%rax
movslq %ebp,%rdx
movslq %esi,%rcx
mov    %rcx,-0x68(%rsp)
movslq %edi,%rcx
add    %esi,%edi
mov    %edi,-0x70(%rsp)
shl    $0x10,%esi
mov    %rcx,0x8(%rsp)
shl    $0x10,%ecx
sub    %ecx,%esi
mov    %esi,-0x78(%rsp)
mov    %rax,0x10(%rsp)
shl    $0x8,%eax
mov    %rdx,0x28(%rsp)
mov    %edx,%ecx
shl    $0x8,%ecx
sub    %ecx,%eax
mov    %eax,-0x54(%rsp)
movslq %r10d,%rax
add    %r9d,%ebp
mov    %ebp,-0x4c(%rsp)
movslq %r8d,%rcx
mov    %rcx,0x20(%rsp)
movslq 0xe0(%rsp),%rcx
mov    %rcx,0x40(%rsp)
movslq -0x7c(%rsp),%rdx
mov    %rax,0x58(%rsp)
lea    (%rax,%rax,1),%r13d
mov    -0x8(%rsp),%rax
add    $0x2,%rax
mov    %rax,0x50(%rsp)
mov    -0x10(%rsp),%rax
add    $0x2,%rax
mov    %rax,0x48(%rsp)
mov    %rdx,-0x40(%rsp)
jmp    1245 <avgpix+0x145>
nopw   0x0(%rax,%rax,1)
mov    -0x68(%rsp),%rax
add    $0x1,%rax
add    $0x1,%r11d
addl   $0x10000,-0x78(%rsp)
mov    %rax,-0x68(%rsp)
cmp    0x20(%rsp),%rax
je     14e8 <avgpix+0x3e8>
addl   $0x1,-0x70(%rsp)
mov    %r11d,%r11d
mov    0xd8(%rsp),%eax
cmp    0xe0(%rsp),%eax
jge    1220 <avgpix+0x120>
mov    -0x68(%rsp),%rax
mov    %rax,%rsi
mov    0x8(%rsp),%rcx
sub    %rcx,%rsi
lea    (%rax,%rcx,1),%rdi
cltq
shl    $0x10,%rax
add    0x18(%rsp),%rax
mov    %rax,0x38(%rsp)
mov    -0x54(%rsp),%eax
mov    %eax,-0x74(%rsp)
mov    0x10(%rsp),%rax
mov    %rax,-0x60(%rsp)
mov    -0x4c(%rsp),%r15d
mov    -0x50(%rsp),%eax
mov    %eax,%ecx
mov    %r11,-0x28(%rsp)
mov    %rsi,-0x30(%rsp)
mov    %rdi,-0x38(%rsp)
jmp    12d8 <avgpix+0x1d8>
nop
mov    -0x60(%rsp),%rax
add    $0x1,%rax
mov    (%rsp),%rcx
add    $0x1,%ecx
addl   $0x100,-0x74(%rsp)
mov    %rax,-0x60(%rsp)
cmp    0x40(%rsp),%rax
je     1220 <avgpix+0x120>
add    $0x1,%r15d
mov    %ecx,%ecx
mov    %rcx,(%rsp)
mov    -0x80(%rsp),%eax
cmp    -0x7c(%rsp),%eax
jge    12b0 <avgpix+0x1b0>
mov    -0x60(%rsp),%rcx
mov    %rcx,%rbp
mov    0x28(%rsp),%rax
sub    %rax,%rbp
mov    %rbp,0x78(%rsp)
add    %rcx,%rax
mov    %rax,0x70(%rsp)
movslq %ecx,%rbx
shl    $0x8,%rbx
add    0x38(%rsp),%rbx
mov    0x30(%rsp),%rbp
mov    -0x48(%rsp),%eax
mov    %eax,%ecx
mov    %rbx,-0x20(%rsp)
jmp    136e <avgpix+0x26e>
nopw   0x0(%rax,%rax,1)
test   %r11d,%r11d
je     14e1 <avgpix+0x3e1>
cltd
idiv   %r11d
mov    -0x28(%rsp),%r11
mov    -0x40(%rsp),%rdx
mov    -0x30(%rsp),%rsi
mov    -0x38(%rsp),%rdi
mov    -0x20(%rsp),%rbx
mov    -0x18(%rsp),%rbp
mov    %al,(%rbx,%rbp,1)
add    $0x1,%rbp
add    $0x1,%ecx
cmp    %rdx,%rbp
je     12b0 <avgpix+0x1b0>
xor    %eax,%eax
movslq %ecx,%rcx
cmp    %rdi,%rsi
jg     135b <avgpix+0x25b>
mov    0x58(%rsp),%rsi
lea    (%rsi,%rbp,1),%rdx
mov    %rbp,-0x18(%rsp)
sub    %rsi,%rbp
mov    0x50(%rsp),%rsi
add    %rcx,%rsi
mov    %rsi,0x68(%rsp)
mov    0x48(%rsp),%rsi
add    %rcx,%rsi
mov    %rsi,0x60(%rsp)
mov    -0x78(%rsp),%edi
mov    %r11,%rbx
xor    %r11d,%r11d
jmp    13d0 <avgpix+0x2d0>
nop
mov    0x80(%rsp),%rbx
add    $0x1,%rbx
mov    -0x44(%rsp),%edi
add    $0x10000,%edi
cmp    %ebx,-0x70(%rsp)
je     1330 <avgpix+0x230>
mov    0x70(%rsp),%rsi
cmp    %rsi,0x78(%rsp)
mov    %edi,-0x44(%rsp)
mov    %rbx,0x80(%rsp)
jg     13b0 <avgpix+0x2b0>
movslq %edi,%rdi
movslq %ebx,%rbx
shl    $0x10,%rbx
mov    -0x8(%rsp),%rsi
add    %rbx,%rsi
mov    %rsi,0x98(%rsp)
add    -0x10(%rsp),%rbx
mov    %rbx,0x88(%rsp)
mov    0x68(%rsp),%rsi
add    %rdi,%rsi
add    0x60(%rsp),%rdi
mov    %rdi,0x90(%rsp)
mov    %rsi,%rdi
mov    -0x74(%rsp),%r14d
mov    (%rsp),%r8
jmp    1454 <avgpix+0x354>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r8
add    $0x100,%r14d
cmp    %r8d,%r15d
je     13b0 <avgpix+0x2b0>
cmp    %rdx,%rbp
jg     1440 <avgpix+0x340>
movslq %r8d,%rbx
shl    $0x8,%rbx
mov    0x98(%rsp),%rsi
add    %rbx,%rsi
cmpb   $0x0,(%rcx,%rsi,1)
je     1483 <avgpix+0x383>
add    0x88(%rsp),%rbx
movzbl (%rbx,%rcx,1),%esi
add    %esi,%eax
add    $0x1,%r11d
testl  $0x7fffffff,-0x6c(%rsp)
7f
je     1440 <avgpix+0x340>
movslq %r14d,%r9
lea    (%rdi,%r9,1),%r12
add    0x90(%rsp),%r9
xor    %r10d,%r10d
jmp    14b9 <avgpix+0x3b9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x2,%r10
cmp    %r10d,%r13d
je     1440 <avgpix+0x340>
cmpb   $0x0,-0x1(%r12,%r10,1)
je     14cd <avgpix+0x3cd>
movzbl -0x1(%r9,%r10,1),%esi
add    %esi,%eax
add    $0x1,%r11d
cmpb   $0x0,(%r12,%r10,1)
je     14b0 <avgpix+0x3b0>
movzbl (%r9,%r10,1),%esi
add    %esi,%eax
add    $0x1,%r11d
jmp    14b0 <avgpix+0x3b0>
xor    %eax,%eax
jmp    133d <avgpix+0x23d>
add    $0xa0,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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