void avgfuzz(int npixel, int ipart, unsigned char *src, double *fuzz,
             unsigned char *dst, int xmin, int xmax, int xspan, int ymin,
             int ymax, int yspan, int zmin, int zmax, int zspan) {
  int i, j, k, x, y, z;
  int xsmin, xsmax, ysmin, ysmax, zsmin, zsmax;
  double sum, num;
  fuzz += ipart * npixel;
  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.0;
        num = 0.0;
        for (k = zsmin; k <= zsmax; ++k)
          for (j = ysmin; j <= ysmax; ++j)
            for (i = xsmin; i <= xsmax; ++i) {
              sum += *(src + k * 65536 + j * 256 + i) *
                     *(fuzz + k * 65536 + j * 256 + i);
              num += *(fuzz + k * 65536 + j * 256 + i);
            }
        if (num == 0.0)
          *(dst + z * 65536 + y * 256 + x) = 0x00;
        else
          *(dst + z * 65536 + y * 256 + x) = (unsigned char)(sum / num);
      }
}


x86 assembly (clang, -O0):
<avgfuzz>:
push   %rbp
mov    %rsp,%rbp
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%eax
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    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
mov    -0x8(%rbp),%ecx
imul   -0x4(%rbp),%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x18(%rbp)
mov    0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    1380 <avgfuzz+0x280>
mov    0x20(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    136d <avgfuzz+0x26d>
mov    -0x24(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    135a <avgfuzz+0x25a>
mov    -0x3c(%rbp),%eax
sub    0x48(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x3c(%rbp),%eax
add    0x48(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x38(%rbp),%eax
sub    0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x38(%rbp),%eax
add    0x30(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
sub    0x18(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x34(%rbp),%eax
add    0x18(%rbp),%eax
mov    %eax,-0x44(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x54(%rbp),%eax
jg     12cf <avgfuzz+0x1cf>
mov    -0x48(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jg     12bc <avgfuzz+0x1bc>
mov    -0x40(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x44(%rbp),%eax
jg     12a9 <avgfuzz+0x1a9>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x2c(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cvtsi2sd %eax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x2c(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x2c(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11f1 <avgfuzz+0xf1>
jmp    12ae <avgfuzz+0x1ae>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11df <avgfuzz+0xdf>
jmp    12c1 <avgfuzz+0x1c1>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11cd <avgfuzz+0xcd>
movsd  -0x68(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1310 <avgfuzz+0x210>
jp     1310 <avgfuzz+0x210>
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x38(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1347 <avgfuzz+0x247>
movsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x38(%rbp),%ecx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    134c <avgfuzz+0x24c>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1175 <avgfuzz+0x75>
jmp    135f <avgfuzz+0x25f>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1163 <avgfuzz+0x63>
jmp    1372 <avgfuzz+0x272>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1151 <avgfuzz+0x51>
pop    %rbp
ret

x86 assembly (clang, -O2):
<avgfuzz>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %r9d,-0x80(%rsp)
mov    %r8,(%rsp)
mov    %rdx,-0x28(%rsp)
mov    0xe0(%rsp),%r8d
mov    0xd8(%rsp),%edx
cmp    %r8d,%edx
jge    1507 <avgfuzz+0x407>
mov    %edx,%ebp
mov    0xe8(%rsp),%ebx
mov    0xd0(%rsp),%eax
mov    0xc0(%rsp),%r9d
mov    0xb8(%rsp),%r10d
imul   %edi,%esi
movslq %esi,%rdx
lea    (%rcx,%rdx,8),%rcx
mov    %rcx,-0x18(%rsp)
mov    -0x80(%rsp),%r11d
mov    %r11d,%ecx
sub    %r10d,%ecx
mov    %ecx,-0x50(%rsp)
mov    %ebp,%esi
sub    %ebx,%esi
movslq %r9d,%rdi
movslq %eax,%rdx
movslq %ebp,%rcx
mov    %rcx,-0x70(%rsp)
movslq %ebx,%rcx
add    %ebp,%ebx
mov    %ebx,-0x74(%rsp)
shl    $0x10,%ebp
mov    %rcx,-0x10(%rsp)
shl    $0x10,%ecx
sub    %ecx,%ebp
mov    %ebp,-0x7c(%rsp)
mov    %rsi,%rbp
mov    %rdi,-0x8(%rsp)
mov    %edi,%esi
shl    $0x8,%esi
mov    %rdx,0x18(%rsp)
mov    %edx,%ecx
shl    $0x8,%ecx
sub    %ecx,%esi
mov    %esi,-0x58(%rsp)
mov    %r9d,%ecx
sub    %eax,%ecx
mov    %ecx,-0x5c(%rsp)
add    %r9d,%eax
mov    %eax,-0x54(%rsp)
movslq %r8d,%rax
mov    %rax,0x8(%rsp)
xorpd  %xmm0,%xmm0
movslq %r11d,%rax
mov    %rax,0x10(%rsp)
movslq %r10d,%rax
movslq 0xc8(%rsp),%rcx
mov    %rcx,0x28(%rsp)
movslq 0xb0(%rsp),%rdx
mov    %rax,0x40(%rsp)
lea    (%rax,%rax,1),%r13d
mov    -0x28(%rsp),%rax
add    $0x2,%rax
mov    %rax,0x30(%rsp)
mov    %rdx,0x38(%rsp)
jmp    1244 <avgfuzz+0x144>
cs nopw 0x0(%rax,%rax,1)
nop
mov    -0x70(%rsp),%rax
add    $0x1,%rax
add    $0x1,%ebp
addl   $0x10000,-0x7c(%rsp)
mov    %rax,-0x70(%rsp)
cmp    0x8(%rsp),%rax
je     1507 <avgfuzz+0x407>
addl   $0x1,-0x74(%rsp)
mov    %ebp,%ebp
mov    0xc0(%rsp),%eax
cmp    0xc8(%rsp),%eax
jge    1220 <avgfuzz+0x120>
mov    -0x70(%rsp),%rax
mov    %rax,%rsi
mov    -0x10(%rsp),%rcx
sub    %rcx,%rsi
add    %rax,%rcx
cltq
shl    $0x10,%rax
add    (%rsp),%rax
mov    %rax,0x20(%rsp)
mov    -0x58(%rsp),%eax
mov    %eax,-0x78(%rsp)
mov    -0x8(%rsp),%rax
mov    %rax,-0x68(%rsp)
mov    -0x54(%rsp),%r14d
mov    -0x5c(%rsp),%eax
mov    %eax,%edi
mov    %rbp,-0x38(%rsp)
mov    %rsi,-0x40(%rsp)
mov    %rcx,-0x48(%rsp)
jmp    12d9 <avgfuzz+0x1d9>
nopl   0x0(%rax,%rax,1)
mov    -0x68(%rsp),%rax
add    $0x1,%rax
mov    -0x20(%rsp),%rdi
add    $0x1,%edi
addl   $0x100,-0x78(%rsp)
mov    %rax,-0x68(%rsp)
cmp    0x28(%rsp),%rax
je     1220 <avgfuzz+0x120>
add    $0x1,%r14d
mov    %edi,%edi
mov    %rdi,-0x20(%rsp)
mov    0xb0(%rsp),%eax
cmp    %eax,-0x80(%rsp)
jge    12b0 <avgfuzz+0x1b0>
mov    -0x68(%rsp),%rdi
mov    %rdi,%rbx
mov    0x18(%rsp),%rax
sub    %rax,%rbx
mov    %rbx,0x68(%rsp)
add    %rdi,%rax
mov    %rax,0x60(%rsp)
movslq %edi,%rdi
shl    $0x8,%rdi
add    0x20(%rsp),%rdi
mov    0x10(%rsp),%r15
mov    -0x50(%rsp),%eax
mov    %eax,%r12d
mov    %rdi,0x48(%rsp)
jmp    1347 <avgfuzz+0x247>
nopl   (%rax)
xor    %eax,%eax
mov    %al,(%rdi,%r15,1)
add    $0x1,%r15
add    $0x1,%r12d
cmp    %rdx,%r15
je     12b0 <avgfuzz+0x1b0>
movslq %r12d,%r12
cmp    %rcx,%rsi
jg     1330 <avgfuzz+0x230>
mov    0x40(%rsp),%rax
lea    (%r15,%rax,1),%r8
mov    %r15,-0x30(%rsp)
sub    %rax,%r15
mov    0x30(%rsp),%rax
add    %r12,%rax
mov    %rax,0x58(%rsp)
mov    -0x18(%rsp),%rax
lea    0x10(%rax,%r12,8),%rax
mov    %rax,0x50(%rsp)
xorpd  %xmm1,%xmm1
mov    -0x7c(%rsp),%ecx
xorpd  %xmm2,%xmm2
jmp    13a8 <avgfuzz+0x2a8>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rbp
mov    -0x4c(%rsp),%ecx
add    $0x10000,%ecx
cmp    %ebp,-0x74(%rsp)
je     14d0 <avgfuzz+0x3d0>
mov    0x60(%rsp),%rax
cmp    %rax,0x68(%rsp)
mov    %ecx,-0x4c(%rsp)
jg     1390 <avgfuzz+0x290>
movslq %ecx,%rcx
movslq %ebp,%r10
mov    %r10,%r11
shl    $0x10,%r11
add    -0x28(%rsp),%r11
shl    $0x13,%r10
add    -0x18(%rsp),%r10
mov    0x58(%rsp),%rax
add    %rcx,%rax
mov    %rax,0x70(%rsp)
mov    0x50(%rsp),%rax
lea    (%rax,%rcx,8),%rdi
mov    -0x78(%rsp),%ecx
mov    -0x20(%rsp),%rsi
movapd %xmm2,%xmm3
jmp    141b <avgfuzz+0x31b>
nopl   0x0(%rax,%rax,1)
movapd %xmm3,%xmm2
add    $0x1,%rsi
add    $0x100,%ecx
movapd %xmm2,%xmm3
cmp    %esi,%r14d
je     1390 <avgfuzz+0x290>
cmp    %r8,%r15
jg     1400 <avgfuzz+0x300>
movslq %esi,%rdx
mov    %rdx,%rbx
shl    $0x8,%rbx
add    %r11,%rbx
shl    $0xb,%rdx
add    %r10,%rdx
movzbl (%r12,%rbx,1),%ebx
xorps  %xmm2,%xmm2
cvtsi2sd %ebx,%xmm2
movsd  (%rdx,%r12,8),%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
addsd  %xmm4,%xmm1
testl  $0x7fffffff,0xb8(%rsp)
ff ff ff 7f
je     1404 <avgfuzz+0x304>
movslq %ecx,%rdx
mov    0x70(%rsp),%rax
lea    (%rax,%rdx,1),%r9
lea    (%rdi,%rdx,8),%rbx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl -0x1(%r9,%rdx,1),%eax
xorps  %xmm3,%xmm3
cvtsi2sd %eax,%xmm3
movsd  -0x8(%rbx,%rdx,8),%xmm4
movsd  (%rbx,%rdx,8),%xmm5
mulsd  %xmm4,%xmm3
addsd  %xmm2,%xmm3
addsd  %xmm4,%xmm1
movzbl (%r9,%rdx,1),%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
mulsd  %xmm5,%xmm2
addsd  %xmm3,%xmm2
addsd  %xmm5,%xmm1
add    $0x2,%rdx
cmp    %edx,%r13d
jne    1480 <avgfuzz+0x380>
jmp    1404 <avgfuzz+0x304>
nopw   0x0(%rax,%rax,1)
ucomisd %xmm0,%xmm1
mov    0x38(%rsp),%rdx
mov    0x48(%rsp),%rdi
jne    14e6 <avgfuzz+0x3e6>
jp     14e6 <avgfuzz+0x3e6>
xor    %eax,%eax
jmp    14ee <avgfuzz+0x3ee>
divsd  %xmm1,%xmm2
cvttsd2si %xmm2,%eax
mov    -0x38(%rsp),%rbp
mov    -0x40(%rsp),%rsi
mov    -0x48(%rsp),%rcx
mov    -0x30(%rsp),%r15
jmp    1332 <avgfuzz+0x232>
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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