void zero_cross(float *lapim, int *image, int width, int height, int depth) {
  int i, j, d;
  for (d = 0; d < depth; d++) {
    for (i = 1; i < height - 1; i++) {
      for (j = 1; j < width - 1; j++) {
        image[((height) * (j) + (i) + (width) * (height) * (d))] = 0;
        if (lapim[((height) * (j) + (i - 1) + (width) * (height) * (d))] *
                lapim[((height) * (j) + (i + 1) + (width) * (height) * (d))] <
            0) {
          image[((height) * (j) + (i) + (width) * (height) * (d))] = 255;
          continue;
        }
        if (lapim[((height) * (j - 1) + (i) + (width) * (height) * (d))] *
                lapim[((height) * (j + 1) + (i) + (width) * (height) * (d))] <
            0) {
          image[((height) * (j) + (i) + (width) * (height) * (d))] = 255;
          continue;
        }
        if (lapim[((height) * (j - 1) + (i + 1) + (width) * (height) * (d))] *
                lapim[((height) * (j + 1) + (i - 1) +
                       (width) * (height) * (d))] <
            0) {
          image[((height) * (j) + (i) + (width) * (height) * (d))] = 255;
          continue;
        }
        if (lapim[((height) * (j - 1) + (i - 1) + (width) * (height) * (d))] *
                lapim[((height) * (j + 1) + (i + 1) +
                       (width) * (height) * (d))] <
            0) {
          image[((height) * (j) + (i) + (width) * (height) * (d))] = 255;
          continue;
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<zero_cross>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    13e3 <zero_cross+0x2e3>
movl   $0x1,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13d0 <zero_cross+0x2d0>
movl   $0x1,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13bd <zero_cross+0x2bd>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x20(%rbp),%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x24(%rbp),%ecx
mov    -0x20(%rbp),%edx
sub    $0x1,%edx
add    %edx,%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x24(%rbp),%ecx
mov    -0x20(%rbp),%edx
add    $0x1,%edx
add    %edx,%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    1204 <zero_cross+0x104>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x20(%rbp),%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movl   $0xff,(%rax,%rcx,4)
jmp    13af <zero_cross+0x2af>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x24(%rbp),%edx
sub    $0x1,%edx
imul   %edx,%ecx
add    -0x20(%rbp),%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x24(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
add    -0x20(%rbp),%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    128a <zero_cross+0x18a>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x20(%rbp),%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movl   $0xff,(%rax,%rcx,4)
jmp    13af <zero_cross+0x2af>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x24(%rbp),%edx
sub    $0x1,%edx
imul   %edx,%ecx
mov    -0x20(%rbp),%edx
add    $0x1,%edx
add    %edx,%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x24(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
mov    -0x20(%rbp),%edx
sub    $0x1,%edx
add    %edx,%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    131a <zero_cross+0x21a>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x20(%rbp),%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movl   $0xff,(%rax,%rcx,4)
jmp    13af <zero_cross+0x2af>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x24(%rbp),%edx
sub    $0x1,%edx
imul   %edx,%ecx
mov    -0x20(%rbp),%edx
sub    $0x1,%edx
add    %edx,%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    -0x24(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
mov    -0x20(%rbp),%edx
add    $0x1,%edx
add    %edx,%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    13aa <zero_cross+0x2aa>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x20(%rbp),%ecx
mov    -0x14(%rbp),%edx
imul   -0x18(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movl   $0xff,(%rax,%rcx,4)
jmp    13af <zero_cross+0x2af>
jmp    13af <zero_cross+0x2af>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1148 <zero_cross+0x48>
jmp    13c2 <zero_cross+0x2c2>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1130 <zero_cross+0x30>
jmp    13d5 <zero_cross+0x2d5>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    111d <zero_cross+0x1d>
pop    %rbp
ret

x86 assembly (clang, -O2):
<zero_cross>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %r8d,-0x8(%rsp)
test   %r8d,%r8d
jle    1282 <zero_cross+0x182>
lea    -0x1(%rcx),%eax
lea    -0x1(%rdx),%r12d
mov    %ecx,%ebp
imul   %edx,%ebp
mov    %ebp,-0xc(%rsp)
movl   $0x0,-0x10(%rsp)
xorps  %xmm0,%xmm0
mov    %eax,-0x4(%rsp)
jmp    1155 <zero_cross+0x55>
nopl   0x0(%rax)
mov    -0x10(%rsp),%ebp
add    $0x1,%ebp
mov    %ebp,-0x10(%rsp)
cmp    -0x8(%rsp),%ebp
je     1282 <zero_cross+0x182>
cmp    $0x3,%ecx
jl     1140 <zero_cross+0x40>
mov    -0xc(%rsp),%ebp
mov    %ebp,%r14d
imul   -0x10(%rsp),%r14d
mov    $0x1,%r15d
jmp    1179 <zero_cross+0x79>
nop
mov    -0x4(%rsp),%eax
cmp    %eax,%r15d
je     1140 <zero_cross+0x40>
cmp    $0x2,%edx
jle    1270 <zero_cross+0x170>
lea    (%r15,%r14,1),%ebx
mov    %r15d,%eax
lea    (%rax,%r14,1),%r13d
add    $0xffffffff,%r13d
add    $0x1,%r15d
lea    (%rax,%r14,1),%r9d
add    $0x1,%r9d
mov    $0x1,%r8d
jmp    11c1 <zero_cross+0xc1>
cs nopw 0x0(%rax,%rax,1)
nop
movl   $0xff,(%rsi,%r10,4)
add    $0x1,%r8
cmp    %r12,%r8
je     1170 <zero_cross+0x70>
mov    %r8d,%ebp
imul   %ecx,%ebp
lea    (%rbx,%rbp,1),%eax
movslq %eax,%r10
movl   $0x0,(%rsi,%r10,4)
lea    0x0(%r13,%rbp,1),%eax
cltq
movss  (%rdi,%rax,4),%xmm1
add    %r9d,%ebp
movslq %ebp,%rax
mulss  (%rdi,%rax,4),%xmm1
ucomiss %xmm1,%xmm0
ja     11b0 <zero_cross+0xb0>
lea    -0x1(%r8),%r11d
imul   %ecx,%r11d
lea    (%rbx,%r11,1),%eax
cltq
movss  (%rdi,%rax,4),%xmm1
add    $0x1,%r8
mov    %r8d,%ebp
imul   %ecx,%ebp
lea    (%rbx,%rbp,1),%eax
cltq
mulss  (%rdi,%rax,4),%xmm1
ucomiss %xmm1,%xmm0
ja     1260 <zero_cross+0x160>
lea    (%r9,%r11,1),%eax
cltq
movss  (%rdi,%rax,4),%xmm1
lea    0x0(%r13,%rbp,1),%eax
cltq
mulss  (%rdi,%rax,4),%xmm1
ucomiss %xmm1,%xmm0
ja     1260 <zero_cross+0x160>
add    %r13d,%r11d
movslq %r11d,%rax
movss  (%rdi,%rax,4),%xmm1
add    %r9d,%ebp
movslq %ebp,%rax
mulss  (%rdi,%rax,4),%xmm1
ucomiss %xmm1,%xmm0
jbe    11bc <zero_cross+0xbc>
nopl   0x0(%rax,%rax,1)
movl   $0xff,(%rsi,%r10,4)
jmp    11bc <zero_cross+0xbc>
nopl   (%rax)
add    $0x1,%r15d
cmp    %eax,%r15d
jne    1179 <zero_cross+0x79>
jmp    1140 <zero_cross+0x40>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @zero_cross(float* %0, i32* %1, i32 %2, i32 %3, i32 %4) {
%6 = alloca float*
%7 = alloca i32*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
store float* %0, float** %6
store i32* %1, i32** %7
store i32 %2, i32* %8
store i32 %3, i32* %9
store i32 %4, i32* %10
store i32 0, i32* %13
br label %14
14: ; preds = %257, %5
%15 = load i32, i32* %13
%16 = load i32, i32* %10
%17 = icmp slt i32 %15, %16
br i1 %17, label %18, label %260
18: ; preds = %14
store i32 1, i32* %11
br label %19
19: ; preds = %253, %18
%20 = load i32, i32* %11
%21 = load i32, i32* %9
%22 = sub nsw i32 %21, 1
%23 = icmp slt i32 %20, %22
br i1 %23, label %24, label %256
24: ; preds = %19
store i32 1, i32* %12
br label %25
25: ; preds = %249, %24
%26 = load i32, i32* %12
%27 = load i32, i32* %8
%28 = sub nsw i32 %27, 1
%29 = icmp slt i32 %26, %28
br i1 %29, label %30, label %252
30: ; preds = %25
%31 = load i32*, i32** %7
%32 = load i32, i32* %9
%33 = load i32, i32* %12
%34 = mul nsw i32 %32, %33
%35 = load i32, i32* %11
%36 = add nsw i32 %34, %35
%37 = load i32, i32* %8
%38 = load i32, i32* %9
%39 = mul nsw i32 %37, %38
%40 = load i32, i32* %13
%41 = mul nsw i32 %39, %40
%42 = add nsw i32 %36, %41
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i32, i32* %31, i64 %43
store i32 0, i32* %44
%45 = load float*, float** %6
%46 = load i32, i32* %9
%47 = load i32, i32* %12
%48 = mul nsw i32 %46, %47
%49 = load i32, i32* %11
%50 = sub nsw i32 %49, 1
%51 = add nsw i32 %48, %50
%52 = load i32, i32* %8
%53 = load i32, i32* %9
%54 = mul nsw i32 %52, %53
%55 = load i32, i32* %13
%56 = mul nsw i32 %54, %55
%57 = add nsw i32 %51, %56
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds float, float* %45, i64 %58
%60 = load float, float* %59
%61 = load float*, float** %6
%62 = load i32, i32* %9
%63 = load i32, i32* %12
%64 = mul nsw i32 %62, %63
%65 = load i32, i32* %11
%66 = add nsw i32 %65, 1
%67 = add nsw i32 %64, %66
%68 = load i32, i32* %8
%69 = load i32, i32* %9
%70 = mul nsw i32 %68, %69
%71 = load i32, i32* %13
%72 = mul nsw i32 %70, %71
%73 = add nsw i32 %67, %72
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds float, float* %61, i64 %74
%76 = load float, float* %75
%77 = fmul float %60, %76
%78 = fcmp olt float %77, 0.000000e+00
br i1 %78, label %79, label %94
79: ; preds = %30
%80 = load i32*, i32** %7
%81 = load i32, i32* %9
%82 = load i32, i32* %12
%83 = mul nsw i32 %81, %82
%84 = load i32, i32* %11
%85 = add nsw i32 %83, %84
%86 = load i32, i32* %8
%87 = load i32, i32* %9
%88 = mul nsw i32 %86, %87
%89 = load i32, i32* %13
%90 = mul nsw i32 %88, %89
%91 = add nsw i32 %85, %90
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds i32, i32* %80, i64 %92
store i32 255, i32* %93
br label %249
94: ; preds = %30
%95 = load float*, float** %6
%96 = load i32, i32* %9
%97 = load i32, i32* %12
%98 = sub nsw i32 %97, 1
%99 = mul nsw i32 %96, %98
%100 = load i32, i32* %11
%101 = add nsw i32 %99, %100
%102 = load i32, i32* %8
%103 = load i32, i32* %9
%104 = mul nsw i32 %102, %103
%105 = load i32, i32* %13
%106 = mul nsw i32 %104, %105
%107 = add nsw i32 %101, %106
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds float, float* %95, i64 %108
%110 = load float, float* %109
%111 = load float*, float** %6
%112 = load i32, i32* %9
%113 = load i32, i32* %12
%114 = add nsw i32 %113, 1
%115 = mul nsw i32 %112, %114
%116 = load i32, i32* %11
%117 = add nsw i32 %115, %116
%118 = load i32, i32* %8
%119 = load i32, i32* %9
%120 = mul nsw i32 %118, %119
%121 = load i32, i32* %13
%122 = mul nsw i32 %120, %121
%123 = add nsw i32 %117, %122
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds float, float* %111, i64 %124
%126 = load float, float* %125
%127 = fmul float %110, %126
%128 = fcmp olt float %127, 0.000000e+00
br i1 %128, label %129, label %144
129: ; preds = %94
%130 = load i32*, i32** %7
%131 = load i32, i32* %9
%132 = load i32, i32* %12
%133 = mul nsw i32 %131, %132
%134 = load i32, i32* %11
%135 = add nsw i32 %133, %134
%136 = load i32, i32* %8
%137 = load i32, i32* %9
%138 = mul nsw i32 %136, %137
%139 = load i32, i32* %13
%140 = mul nsw i32 %138, %139
%141 = add nsw i32 %135, %140
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds i32, i32* %130, i64 %142
store i32 255, i32* %143
br label %249
144: ; preds = %94
%145 = load float*, float** %6
%146 = load i32, i32* %9
%147 = load i32, i32* %12
%148 = sub nsw i32 %147, 1
%149 = mul nsw i32 %146, %148
%150 = load i32, i32* %11
%151 = add nsw i32 %150, 1
%152 = add nsw i32 %149, %151
%153 = load i32, i32* %8
%154 = load i32, i32* %9
%155 = mul nsw i32 %153, %154
%156 = load i32, i32* %13
%157 = mul nsw i32 %155, %156
%158 = add nsw i32 %152, %157
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds float, float* %145, i64 %159
%161 = load float, float* %160
%162 = load float*, float** %6
%163 = load i32, i32* %9
%164 = load i32, i32* %12
%165 = add nsw i32 %164, 1
%166 = mul nsw i32 %163, %165
%167 = load i32, i32* %11
%168 = sub nsw i32 %167, 1
%169 = add nsw i32 %166, %168
%170 = load i32, i32* %8
%171 = load i32, i32* %9
%172 = mul nsw i32 %170, %171
%173 = load i32, i32* %13
%174 = mul nsw i32 %172, %173
%175 = add nsw i32 %169, %174
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds float, float* %162, i64 %176
%178 = load float, float* %177
%179 = fmul float %161, %178
%180 = fcmp olt float %179, 0.000000e+00
br i1 %180, label %181, label %196
181: ; preds = %144
%182 = load i32*, i32** %7
%183 = load i32, i32* %9
%184 = load i32, i32* %12
%185 = mul nsw i32 %183, %184
%186 = load i32, i32* %11
%187 = add nsw i32 %185, %186
%188 = load i32, i32* %8
%189 = load i32, i32* %9
%190 = mul nsw i32 %188, %189
%191 = load i32, i32* %13
%192 = mul nsw i32 %190, %191
%193 = add nsw i32 %187, %192
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds i32, i32* %182, i64 %194
store i32 255, i32* %195
br label %249
196: ; preds = %144
%197 = load float*, float** %6
%198 = load i32, i32* %9
%199 = load i32, i32* %12
%200 = sub nsw i32 %199, 1
%201 = mul nsw i32 %198, %200
%202 = load i32, i32* %11
%203 = sub nsw i32 %202, 1
%204 = add nsw i32 %201, %203
%205 = load i32, i32* %8
%206 = load i32, i32* %9
%207 = mul nsw i32 %205, %206
%208 = load i32, i32* %13
%209 = mul nsw i32 %207, %208
%210 = add nsw i32 %204, %209
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds float, float* %197, i64 %211
%213 = load float, float* %212
%214 = load float*, float** %6
%215 = load i32, i32* %9
%216 = load i32, i32* %12
%217 = add nsw i32 %216, 1
%218 = mul nsw i32 %215, %217
%219 = load i32, i32* %11
%220 = add nsw i32 %219, 1
%221 = add nsw i32 %218, %220
%222 = load i32, i32* %8
%223 = load i32, i32* %9
%224 = mul nsw i32 %222, %223
%225 = load i32, i32* %13
%226 = mul nsw i32 %224, %225
%227 = add nsw i32 %221, %226
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds float, float* %214, i64 %228
%230 = load float, float* %229
%231 = fmul float %213, %230
%232 = fcmp olt float %231, 0.000000e+00
br i1 %232, label %233, label %248
233: ; preds = %196
%234 = load i32*, i32** %7
%235 = load i32, i32* %9
%236 = load i32, i32* %12
%237 = mul nsw i32 %235, %236
%238 = load i32, i32* %11
%239 = add nsw i32 %237, %238
%240 = load i32, i32* %8
%241 = load i32, i32* %9
%242 = mul nsw i32 %240, %241
%243 = load i32, i32* %13
%244 = mul nsw i32 %242, %243
%245 = add nsw i32 %239, %244
%246 = sext i32 %245 to i64
%247 = getelementptr inbounds i32, i32* %234, i64 %246
store i32 255, i32* %247
br label %249
248: ; preds = %196
br label %249
249: ; preds = %248, %233, %181, %129, %79
%250 = load i32, i32* %12
%251 = add nsw i32 %250, 1
store i32 %251, i32* %12
br label %25
252: ; preds = %25
br label %253
253: ; preds = %252
%254 = load i32, i32* %11
%255 = add nsw i32 %254, 1
store i32 %255, i32* %11
br label %19
256: ; preds = %19
br label %257
257: ; preds = %256
%258 = load i32, i32* %13
%259 = add nsw i32 %258, 1
store i32 %259, i32* %13
br label %14
260: ; preds = %14
ret void
}

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