void make_mask(float FR1[500][500], float NEW[500][500], int rows, int cols) {
  int i, j;
  int AI, BI, CI, DI;
  int AJ, BJ, CJ, DJ;
  int okA, okB, okC, okD;
  float frA, frB, frC, frD;
  int OK;
  for (i = 0; i < (rows / 2); i++)
    for (j = 0; j < (cols / 2); j++)
      NEW[i][j] = 0;
  for (i = 0; i < (rows / 2); i++) {
    for (j = 0; j < (cols / 2); j++) {
      OK = 0;
      AJ = j * 2;
      AI = i * 2;
      BJ = j * 2 + 1;
      BI = i * 2;
      CJ = j * 2;
      CI = i * 2 + 1;
      DJ = j * 2 + 1;
      DI = i * 2 + 1;
      frA = frB = frC = frD = 0.0;
      okA = okB = okC = okD = 0;
      if (FR1[AI][AJ] > 0) {
        okA = 1;
        frA = FR1[AI][AJ];
      }
      if (FR1[BI][BJ] > 0) {
        okB = 1;
        frB = FR1[BI][BJ];
      }
      if (FR1[CI][CJ] > 0) {
        okC = 1;
        frC = FR1[CI][CJ];
      }
      if (FR1[DI][DJ] > 0) {
        okD = 1;
        frD = FR1[DI][DJ];
      }
      OK = okA + okB + okC + okD;
      if (OK > 0) {
        NEW[i][j] = FR1[AI][AJ] * 0.25 + FR1[BI][BJ] * 0.25 +
                    FR1[CI][CJ] * 0.25 + FR1[DI][DJ] * 0.25;
      }
    }
  }
}


x86 assembly (clang, -O0):
<make_mask>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x68(%rbp),%eax
cmp    %ecx,%eax
jge    119b <make_mask+0x9b>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x6c(%rbp),%eax
cmp    %ecx,%eax
jge    1188 <make_mask+0x88>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    113e <make_mask+0x3e>
jmp    118d <make_mask+0x8d>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1119 <make_mask+0x19>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x70(%rbp),%eax
cmp    %ecx,%eax
jge    14ca <make_mask+0x3ca>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x74(%rbp),%eax
cmp    %ecx,%eax
jge    14b7 <make_mask+0x3b7>
movl   $0x0,-0x64(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
movl   $0x0,-0x50(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    12ca <make_mask+0x1ca>
movl   $0x1,-0x44(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1318 <make_mask+0x218>
movl   $0x1,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1366 <make_mask+0x266>
movl   $0x1,-0x4c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    13b4 <make_mask+0x2b4>
movl   $0x1,-0x50(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x44(%rbp),%eax
add    -0x48(%rbp),%eax
add    -0x4c(%rbp),%eax
add    -0x50(%rbp),%eax
mov    %eax,-0x64(%rbp)
cmpl   $0x0,-0x64(%rbp)
jle    14a4 <make_mask+0x3a4>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xbed(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xbe1(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xbb2(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb83(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
imul   $0x7d0,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    14a9 <make_mask+0x3a9>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11c7 <make_mask+0xc7>
jmp    14bc <make_mask+0x3bc>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a2 <make_mask+0xa2>
pop    %rbp
ret

x86 assembly (clang, -O2):
<make_mask>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %ecx,0x4(%rsp)
mov    %rdi,0x18(%rsp)
cmp    $0x2,%edx
jl     14c5 <make_mask+0x3b5>
mov    %rsi,0x8(%rsp)
mov    %edx,%eax
shr    $0x1f,%eax
mov    %edx,0x14(%rsp)
add    %edx,%eax
sar    %eax
mov    0x4(%rsp),%ecx
mov    %ecx,%r14d
shr    $0x1f,%r14d
add    %ecx,%r14d
sar    %r14d
lea    -0x1(%r14),%ecx
lea    0x4(,%rcx,4),%r13
mov    %eax,%r15d
lea    -0x1(%r15),%rax
mov    %r15d,%ebp
and    $0x3,%ebp
cmp    $0x3,%rax
mov    %r15,0x20(%rsp)
jae    14d4 <make_mask+0x3c4>
xor    %r12d,%r12d
test   %rbp,%rbp
je     11c3 <make_mask+0xb3>
imul   $0x7d0,%r12,%r15
add    0x8(%rsp),%r15
imul   $0x7d0,%rbp,%rbx
xor    %ebp,%ebp
jmp    11ac <make_mask+0x9c>
nopw   0x0(%rax,%rax,1)
add    $0x7d0,%rbp
cmp    %rbp,%rbx
je     11c3 <make_mask+0xb3>
cmpl   $0x2,0x4(%rsp)
jl     11a0 <make_mask+0x90>
lea    (%r15,%rbp,1),%rdi
xor    %esi,%esi
mov    %r13,%rdx
call   1030 <memset@plt>
jmp    11a0 <make_mask+0x90>
cmpl   $0x2,0x14(%rsp)
mov    0x8(%rsp),%r13
jl     14c5 <make_mask+0x3b5>
lea    (%r14,%r14,1),%r8
mov    %r14d,%r9d
and    $0xfffffffc,%r9d
lea    0xc(%r13),%r12
mov    0x18(%rsp),%rax
lea    0x7d0(%rax),%rsi
lea    0x0(,%r14,4),%r10
and    $0xfffffffffffffff0,%r10
lea    0x7d4(%rax),%rbp
xor    %r11d,%r11d
xorps  %xmm12,%xmm12
movsd  0xe0f(%rip),%xmm10
movaps 0xde7(%rip),%xmm8
movapd 0xdee(%rip),%xmm11
pcmpeqd %xmm9,%xmm9
mov    %r13,%r15
jmp    125b <make_mask+0x14b>
nopl   0x0(%rax)
add    $0x1,%r11
add    $0x7d0,%r12
add    $0xfa0,%rsi
add    $0x7d0,%r15
add    $0xfa0,%rbp
cmp    0x20(%rsp),%r11
je     14c5 <make_mask+0x3b5>
cmpl   $0x2,0x4(%rsp)
jl     1230 <make_mask+0x120>
cmp    $0x4,%r14d
jae    1270 <make_mask+0x160>
xor    %ecx,%ecx
jmp    142d <make_mask+0x31d>
nop
imul   $0x7d0,%r11,%rcx
add    %r13,%rcx
lea    (%r11,%r11,1),%rdi
add    $0x1,%rdi
imul   $0x7d0,%rdi,%rdi
mov    0x18(%rsp),%rax
add    %rax,%rdi
lea    (%rdi,%r8,4),%rdi
cmp    %rdi,%rcx
jae    12b4 <make_mask+0x1a4>
imul   $0xfa0,%r11,%rdi
add    %rax,%rdi
lea    (%rcx,%r14,4),%rcx
cmp    %rcx,%rdi
jae    12b4 <make_mask+0x1a4>
xor    %ecx,%ecx
jmp    142d <make_mask+0x31d>
xor    %ecx,%ecx
jmp    12cd <make_mask+0x1bd>
nopl   0x0(%rax,%rax,1)
add    $0x10,%rcx
cmp    %rcx,%r10
je     140e <make_mask+0x2fe>
movups -0x7d0(%rsi,%rcx,2),%xmm2
ff
movups -0x7c0(%rsi,%rcx,2),%xmm7
ff
movaps %xmm2,%xmm4
shufps $0x88,%xmm7,%xmm4
shufps $0xdd,%xmm7,%xmm2
xorps  %xmm1,%xmm1
cmpltps %xmm4,%xmm1
andps  %xmm8,%xmm1
xorps  %xmm5,%xmm5
cmpltps %xmm2,%xmm5
psubd  %xmm5,%xmm1
movups 0x10(%rsi,%rcx,2),%xmm6
movups (%rsi,%rcx,2),%xmm3
movaps %xmm3,%xmm0
shufps $0x88,%xmm6,%xmm0
shufps $0xdd,%xmm6,%xmm3
xorps  %xmm5,%xmm5
cmpltps %xmm0,%xmm5
psubd  %xmm5,%xmm1
xorps  %xmm5,%xmm5
cmpltps %xmm3,%xmm5
pcmpeqd %xmm1,%xmm5
cvtps2pd %xmm4,%xmm1
cvtps2pd %xmm2,%xmm2
mulpd  %xmm11,%xmm2
mulpd  %xmm11,%xmm1
addpd  %xmm2,%xmm1
cvtps2pd %xmm0,%xmm0
mulpd  %xmm11,%xmm0
addpd  %xmm1,%xmm0
cvtps2pd %xmm3,%xmm2
mulpd  %xmm11,%xmm2
addpd  %xmm0,%xmm2
movd   %xmm5,%edi
not    %edi
test   $0x1,%dil
je     136e <make_mask+0x25e>
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  %xmm0,-0xc(%r12,%rcx,1)
pxor   %xmm9,%xmm5
pextrw $0x2,%xmm5,%edi
test   $0x1,%dil
je     138f <make_mask+0x27f>
movhlps %xmm2,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  %xmm0,-0x8(%r12,%rcx,1)
movaps %xmm7,%xmm0
shufps $0xe8,%xmm7,%xmm0
cvtps2pd %xmm0,%xmm0
shufps $0xed,%xmm7,%xmm7
cvtps2pd %xmm7,%xmm1
mulpd  %xmm11,%xmm1
mulpd  %xmm11,%xmm0
addpd  %xmm1,%xmm0
movaps %xmm6,%xmm1
shufps $0xe8,%xmm6,%xmm1
cvtps2pd %xmm1,%xmm1
mulpd  %xmm11,%xmm1
addpd  %xmm0,%xmm1
shufps $0xed,%xmm6,%xmm6
cvtps2pd %xmm6,%xmm2
mulpd  %xmm11,%xmm2
addpd  %xmm1,%xmm2
pextrw $0x4,%xmm5,%edi
test   $0x1,%dil
je     13ea <make_mask+0x2da>
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  %xmm0,-0x4(%r12,%rcx,1)
pextrw $0x6,%xmm5,%edi
test   $0x1,%dil
je     12c0 <make_mask+0x1b0>
movhlps %xmm2,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  %xmm0,(%r12,%rcx,1)
jmp    12c0 <make_mask+0x1b0>
mov    %r9,%rcx
cmp    %r14,%r9
jne    142d <make_mask+0x31d>
jmp    1230 <make_mask+0x120>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rcx
cmp    %rcx,%r14
je     1230 <make_mask+0x120>
movss  -0x7d4(%rbp,%rcx,8),%xmm5
ff ff
xor    %edi,%edi
ucomiss %xmm12,%xmm5
movss  -0x7d0(%rbp,%rcx,8),%xmm6
ff ff
seta   %dil
xor    %ebx,%ebx
ucomiss %xmm12,%xmm6
seta   %bl
movss  -0x4(%rbp,%rcx,8),%xmm7
xor    %eax,%eax
ucomiss %xmm12,%xmm7
seta   %al
movss  0x0(%rbp,%rcx,8),%xmm2
xor    %edx,%edx
ucomiss %xmm12,%xmm2
seta   %dl
neg    %edx
add    %edi,%ebx
add    %eax,%ebx
cmp    %edx,%ebx
je     1420 <make_mask+0x310>
xorps  %xmm0,%xmm0
cvtss2sd %xmm5,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
mulsd  %xmm10,%xmm1
mulsd  %xmm10,%xmm0
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm7,%xmm1
mulsd  %xmm10,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
mulsd  %xmm10,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r15,%rcx,4)
jmp    1420 <make_mask+0x310>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
and    $0xfffffffc,%r15d
xor    %r12d,%r12d
mov    0x8(%rsp),%rbx
jmp    1504 <make_mask+0x3f4>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x4,%r12
add    $0x1f40,%rbx
cmp    %r12,%r15
je     117e <make_mask+0x6e>
cmpl   $0x2,0x4(%rsp)
jl     14f0 <make_mask+0x3e0>
mov    %rbx,%rdi
xor    %esi,%esi
mov    %r13,%rdx
call   1030 <memset@plt>
lea    0x7d0(%rbx),%rdi
xor    %esi,%esi
mov    %r13,%rdx
call   1030 <memset@plt>
lea    0xfa0(%rbx),%rdi
xor    %esi,%esi
mov    %r13,%rdx
call   1030 <memset@plt>
lea    0x1770(%rbx),%rdi
xor    %esi,%esi
mov    %r13,%rdx
call   1030 <memset@plt>
jmp    14f0 <make_mask+0x3e0>

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

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