double getEfficiency_overlap(int ilimit, int olimit, int asize, int bsize,
                             int blockA, int blockB) {
  const int remainder1 = asize % blockA;
  const int remainder2 = bsize % blockB;
  const int ilimitr = ilimit * remainder1 / blockA;
  const int olimitr = olimit * remainder2 / blockB;
  double f1, f2, f3, f4, f;
  f1 = ((ilimit / 32) * (olimit / 32) +
        (double)(ilimit / 32) * (olimit % 32) / 32 +
        (double)(ilimit % 32) * (olimit / 32) / 32 +
        (double)(ilimit % 32) * (olimit % 32) / (32 * 32)) /
       (int)(((ilimit + 31) / 32) * ((olimit + 31) / 32));
  f2 = ((ilimitr / 32) * (olimit / 32) +
        (double)(ilimitr / 32) * (olimit % 32) / 32 +
        (double)(ilimitr % 32) * (olimit / 32) / 32 +
        (double)(ilimitr % 32) * (olimit % 32) / (32 * 32)) /
       (1 > (int)(((ilimitr + 31) / 32) * ((olimit + 31) / 32))
            ? 1
            : (int)(((ilimitr + 31) / 32) * ((olimit + 31) / 32)));
  f3 = ((ilimit / 32) * (olimitr / 32) +
        (double)(ilimit / 32) * (olimitr % 32) / 32 +
        (double)(ilimit % 32) * (olimitr / 32) / 32 +
        (double)(ilimit % 32) * (olimitr % 32) / (32 * 32)) /
       (1 > (int)(((ilimit + 31) / 32) * ((olimitr + 31) / 32))
            ? 1
            : (int)(((ilimit + 31) / 32) * ((olimitr + 31) / 32)));
  f4 = ((ilimitr / 32) * (olimitr / 32) +
        (double)(ilimitr / 32) * (olimitr % 32) / 32 +
        (double)(ilimitr % 32) * (olimitr / 32) / 32 +
        (double)(ilimitr % 32) * (olimitr % 32) / (32 * 32)) /
       (1 > (int)(((olimitr + 31) / 32) * ((olimitr + 31) / 32))
            ? 1
            : (int)(((olimitr + 31) / 32) * ((olimitr + 31) / 32)));
  int amax = blockA;
  int bmax = blockB;
  f = ((asize / amax) * (bsize / bmax) * f1 +
       (double)((asize / amax) * (bsize % bmax > 0) * f3) +
       (double)((asize % amax > 0) * (bsize / bmax) * f2) +
       (double)((asize % amax > 0) * (bsize % bmax > 0) * f4)) /
      (int)(((asize + amax - 1) / amax) * ((bsize + bmax - 1) / bmax));
  return f;
}


x86 assembly (clang, -O0):
<getEfficiency_overlap>:
push   %rbp
mov    %rsp,%rbp
sub    $0x38,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
mov    -0xc(%rbp),%eax
cltd
idivl  -0x14(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x10(%rbp),%eax
cltd
idivl  -0x18(%rbp)
mov    %edx,-0x20(%rbp)
mov    -0x4(%rbp),%eax
imul   -0x1c(%rbp),%eax
cltd
idivl  -0x14(%rbp)
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
imul   -0x20(%rbp),%eax
cltd
idivl  -0x18(%rbp)
mov    %eax,-0x28(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,-0x6c(%rbp)
mov    -0x8(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x6c(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
mov    -0x4(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm1
mov    -0x8(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe6d(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm1
mov    -0x8(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe3b(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm1
mov    -0x8(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe01(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,-0x68(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x68(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,-0x64(%rbp)
mov    -0x8(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x64(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
mov    -0x24(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm1
mov    -0x8(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd7e(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x24(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm1
mov    -0x8(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd4c(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x24(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm1
mov    -0x8(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd12(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x8(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%esi
cltd
idiv   %esi
imul   %eax,%ecx
mov    $0x1,%eax
cmp    %ecx,%eax
jle    1336 <getEfficiency_overlap+0x236>
mov    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    1360 <getEfficiency_overlap+0x260>
mov    -0x24(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,-0x74(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x74(%rbp),%eax
imul   %ecx,%eax
mov    %eax,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x70(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,-0x84(%rbp)
mov    -0x28(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x84(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
mov    -0x4(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm1
mov    -0x28(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc3e(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm1
mov    -0x28(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc0c(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm1
mov    -0x28(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xbd2(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x28(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%esi
cltd
idiv   %esi
imul   %eax,%ecx
mov    $0x1,%eax
cmp    %ecx,%eax
jle    1479 <getEfficiency_overlap+0x379>
mov    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    14ac <getEfficiency_overlap+0x3ac>
mov    -0x4(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,-0x8c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x8c(%rbp),%eax
imul   %ecx,%eax
mov    %eax,-0x88(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x88(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,-0x9c(%rbp)
mov    -0x28(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9c(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
mov    -0x24(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm1
mov    -0x28(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xaef(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x24(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm1
mov    -0x28(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xabd(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x24(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm1
mov    -0x28(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xa83(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x28(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x28(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%esi
cltd
idiv   %esi
imul   %eax,%ecx
mov    $0x1,%eax
cmp    %ecx,%eax
jle    15cb <getEfficiency_overlap+0x4cb>
mov    $0x1,%eax
mov    %eax,-0xa0(%rbp)
jmp    15fe <getEfficiency_overlap+0x4fe>
mov    -0x28(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,-0xa4(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1f,%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0xa4(%rbp),%eax
imul   %ecx,%eax
mov    %eax,-0xa0(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0xa0(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0xc(%rbp),%eax
cltd
idivl  -0x54(%rbp)
mov    %eax,-0xb8(%rbp)
mov    -0x10(%rbp),%eax
cltd
idivl  -0x58(%rbp)
mov    %eax,%ecx
mov    -0xb8(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x30(%rbp),%xmm2
mov    -0xc(%rbp),%eax
cltd
idivl  -0x54(%rbp)
mov    %eax,-0xb4(%rbp)
mov    -0x10(%rbp),%eax
cltd
idivl  -0x58(%rbp)
mov    -0xb4(%rbp),%eax
cmp    $0x0,%edx
setg   %cl
and    $0x1,%cl
movzbl %cl,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
mulsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0xc(%rbp),%eax
cltd
idivl  -0x54(%rbp)
cmp    $0x0,%edx
setg   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xb0(%rbp)
mov    -0x10(%rbp),%eax
cltd
idivl  -0x58(%rbp)
mov    %eax,%ecx
mov    -0xb0(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0xc(%rbp),%eax
cltd
idivl  -0x54(%rbp)
cmp    $0x0,%edx
setg   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xac(%rbp)
mov    -0x10(%rbp),%eax
cltd
idivl  -0x58(%rbp)
mov    -0xac(%rbp),%eax
cmp    $0x0,%edx
setg   %cl
and    $0x1,%cl
movzbl %cl,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0xc(%rbp),%eax
add    -0x54(%rbp),%eax
sub    $0x1,%eax
cltd
idivl  -0x54(%rbp)
mov    %eax,-0xa8(%rbp)
mov    -0x10(%rbp),%eax
add    -0x58(%rbp),%eax
sub    $0x1,%eax
cltd
idivl  -0x58(%rbp)
mov    %eax,%ecx
mov    -0xa8(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
add    $0x38,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getEfficiency_overlap>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %ecx,%ebp
mov    %edx,%eax
mov    %rax,-0x10(%rsp)
cltd
idiv   %r8d
mov    %eax,%r13d
mov    %edx,-0x14(%rsp)
mov    %edx,%eax
imul   %edi,%eax
cltd
idiv   %r8d
mov    %eax,%ecx
mov    %rbp,-0x8(%rsp)
mov    %ebp,%eax
cltd
idiv   %r9d
mov    %eax,-0x18(%rsp)
mov    %edx,%r12d
mov    %edx,%eax
imul   %esi,%eax
cltd
idiv   %r9d
lea    0x1f(%rdi),%ebp
test   %edi,%edi
mov    %edi,%edx
cmovs  %ebp,%edx
mov    %edx,%r10d
sar    $0x5,%r10d
test   %esi,%esi
lea    0x1f(%rsi),%r11d
mov    %esi,%ebx
cmovs  %r11d,%ebx
mov    %ebx,%r14d
and    $0xffffffe0,%ebx
mov    %esi,%r15d
sub    %ebx,%r15d
cvtsi2sd %r15d,%xmm9
and    $0xffffffe0,%edx
mov    %edi,%ebx
sub    %edx,%ebx
cvtsi2sd %ebx,%xmm15
sar    $0x5,%r14d
add    $0x3e,%edi
test   %ebp,%ebp
cmovns %ebp,%edi
sar    $0x5,%edi
add    $0x3e,%esi
test   %r11d,%r11d
cmovns %r11d,%esi
sar    $0x5,%esi
lea    0x1f(%rcx),%edx
test   %ecx,%ecx
mov    %ecx,%ebp
cmovs  %edx,%ebp
mov    %ebp,%r11d
and    $0xffffffe0,%ebp
mov    %ecx,%ebx
sub    %ebp,%ebx
cvtsi2sd %ebx,%xmm0
sar    $0x5,%r11d
add    $0x3e,%ecx
test   %edx,%edx
cmovns %edx,%ecx
sar    $0x5,%ecx
imul   %esi,%ecx
test   %ecx,%ecx
mov    $0x1,%r15d
cmovle %r15d,%ecx
cvtsi2sd %ecx,%xmm8
test   %eax,%eax
lea    0x1f(%rax),%ebx
mov    %eax,%ebp
cmovs  %ebx,%ebp
mov    %ebp,%ecx
and    $0xffffffe0,%ebp
mov    %eax,%edx
sub    %ebp,%edx
cvtsi2sd %edx,%xmm3
sar    $0x5,%ecx
add    $0x3e,%eax
test   %ebx,%ebx
cmovns %ebx,%eax
sar    $0x5,%eax
mov    %eax,%edx
imul   %edi,%edx
test   %edx,%edx
cmovle %r15d,%edx
cvtsi2sd %edx,%xmm11
cvtsi2sd %r10d,%xmm14
cvtsi2sd %r14d,%xmm6
cvtsi2sd %r11d,%xmm1
cvtsi2sd %ecx,%xmm4
imul   %eax,%eax
test   %eax,%eax
je     122b <getEfficiency_overlap+0x12b>
cvtsi2sd %eax,%xmm13
jmp    1234 <getEfficiency_overlap+0x134>
movsd  0xdcc(%rip),%xmm13
movapd %xmm1,%xmm5
mulsd  %xmm3,%xmm5
movsd  0xdc3(%rip),%xmm12
mulsd  %xmm12,%xmm5
mov    %ecx,%eax
imul   %r11d,%eax
cvtsi2sd %eax,%xmm7
addsd  %xmm5,%xmm7
movapd %xmm0,%xmm2
mulsd  %xmm4,%xmm2
mulsd  %xmm12,%xmm2
addsd  %xmm7,%xmm2
movapd %xmm0,%xmm5
mulsd  %xmm3,%xmm5
movsd  0xd96(%rip),%xmm10
mulsd  %xmm10,%xmm5
addsd  %xmm2,%xmm5
divsd  %xmm13,%xmm5
movapd %xmm14,%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm12,%xmm2
imul   %r10d,%ecx
xorps  %xmm7,%xmm7
cvtsi2sd %ecx,%xmm7
addsd  %xmm2,%xmm7
mulsd  %xmm15,%xmm4
mulsd  %xmm12,%xmm4
addsd  %xmm7,%xmm4
mulsd  %xmm15,%xmm3
mulsd  %xmm10,%xmm3
addsd  %xmm4,%xmm3
divsd  %xmm11,%xmm3
mulsd  %xmm9,%xmm1
mulsd  %xmm12,%xmm1
imul   %r14d,%r11d
xorps  %xmm2,%xmm2
cvtsi2sd %r11d,%xmm2
addsd  %xmm1,%xmm2
movapd %xmm6,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm12,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm9,%xmm0
mulsd  %xmm10,%xmm0
addsd  %xmm1,%xmm0
divsd  %xmm8,%xmm0
mulsd  %xmm9,%xmm14
mulsd  %xmm12,%xmm14
imul   %r10d,%r14d
xorps  %xmm1,%xmm1
cvtsi2sd %r14d,%xmm1
addsd  %xmm14,%xmm1
mulsd  %xmm15,%xmm6
mulsd  %xmm12,%xmm6
addsd  %xmm1,%xmm6
mulsd  %xmm9,%xmm15
mulsd  %xmm10,%xmm15
addsd  %xmm6,%xmm15
imul   %edi,%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
divsd  %xmm1,%xmm15
mov    -0x18(%rsp),%esi
mov    %esi,%eax
imul   %r13d,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm15,%xmm1
xor    %eax,%eax
test   %r12d,%r12d
setg   %cl
cmovle %eax,%r13d
xorps  %xmm2,%xmm2
cvtsi2sd %r13d,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
cmpl   $0x0,-0x14(%rsp)
setg   %dl
cmovg  %esi,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm2,%xmm1
and    %cl,%dl
movzbl %dl,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  %xmm5,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rsp),%rax
add    %r8d,%eax
add    $0xffffffff,%eax
cltd
idiv   %r8d
mov    %eax,%ecx
mov    -0x8(%rsp),%rax
add    %r9d,%eax
add    $0xffffffff,%eax
cltd
idiv   %r9d
imul   %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define double @getEfficiency_overlap(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%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 double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca i32
%23 = alloca i32
store i32 %0, i32* %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store i32 %4, i32* %11
store i32 %5, i32* %12
%24 = load i32, i32* %9
%25 = load i32, i32* %11
%26 = srem i32 %24, %25
store i32 %26, i32* %13
%27 = load i32, i32* %10
%28 = load i32, i32* %12
%29 = srem i32 %27, %28
store i32 %29, i32* %14
%30 = load i32, i32* %7
%31 = load i32, i32* %13
%32 = mul nsw i32 %30, %31
%33 = load i32, i32* %11
%34 = sdiv i32 %32, %33
store i32 %34, i32* %15
%35 = load i32, i32* %8
%36 = load i32, i32* %14
%37 = mul nsw i32 %35, %36
%38 = load i32, i32* %12
%39 = sdiv i32 %37, %38
store i32 %39, i32* %16
%40 = load i32, i32* %7
%41 = sdiv i32 %40, 32
%42 = load i32, i32* %8
%43 = sdiv i32 %42, 32
%44 = mul nsw i32 %41, %43
%45 = sitofp i32 %44 to double
%46 = load i32, i32* %7
%47 = sdiv i32 %46, 32
%48 = sitofp i32 %47 to double
%49 = load i32, i32* %8
%50 = srem i32 %49, 32
%51 = sitofp i32 %50 to double
%52 = fmul double %48, %51
%53 = fdiv double %52, 3.200000e+01
%54 = fadd double %45, %53
%55 = load i32, i32* %7
%56 = srem i32 %55, 32
%57 = sitofp i32 %56 to double
%58 = load i32, i32* %8
%59 = sdiv i32 %58, 32
%60 = sitofp i32 %59 to double
%61 = fmul double %57, %60
%62 = fdiv double %61, 3.200000e+01
%63 = fadd double %54, %62
%64 = load i32, i32* %7
%65 = srem i32 %64, 32
%66 = sitofp i32 %65 to double
%67 = load i32, i32* %8
%68 = srem i32 %67, 32
%69 = sitofp i32 %68 to double
%70 = fmul double %66, %69
%71 = fdiv double %70, 1.024000e+03
%72 = fadd double %63, %71
%73 = load i32, i32* %7
%74 = add nsw i32 %73, 31
%75 = sdiv i32 %74, 32
%76 = load i32, i32* %8
%77 = add nsw i32 %76, 31
%78 = sdiv i32 %77, 32
%79 = mul nsw i32 %75, %78
%80 = sitofp i32 %79 to double
%81 = fdiv double %72, %80
store double %81, double* %17
%82 = load i32, i32* %15
%83 = sdiv i32 %82, 32
%84 = load i32, i32* %8
%85 = sdiv i32 %84, 32
%86 = mul nsw i32 %83, %85
%87 = sitofp i32 %86 to double
%88 = load i32, i32* %15
%89 = sdiv i32 %88, 32
%90 = sitofp i32 %89 to double
%91 = load i32, i32* %8
%92 = srem i32 %91, 32
%93 = sitofp i32 %92 to double
%94 = fmul double %90, %93
%95 = fdiv double %94, 3.200000e+01
%96 = fadd double %87, %95
%97 = load i32, i32* %15
%98 = srem i32 %97, 32
%99 = sitofp i32 %98 to double
%100 = load i32, i32* %8
%101 = sdiv i32 %100, 32
%102 = sitofp i32 %101 to double
%103 = fmul double %99, %102
%104 = fdiv double %103, 3.200000e+01
%105 = fadd double %96, %104
%106 = load i32, i32* %15
%107 = srem i32 %106, 32
%108 = sitofp i32 %107 to double
%109 = load i32, i32* %8
%110 = srem i32 %109, 32
%111 = sitofp i32 %110 to double
%112 = fmul double %108, %111
%113 = fdiv double %112, 1.024000e+03
%114 = fadd double %105, %113
%115 = load i32, i32* %15
%116 = add nsw i32 %115, 31
%117 = sdiv i32 %116, 32
%118 = load i32, i32* %8
%119 = add nsw i32 %118, 31
%120 = sdiv i32 %119, 32
%121 = mul nsw i32 %117, %120
%122 = icmp sgt i32 1, %121
br i1 %122, label %123, label %124
123: ; preds = %6
br label %132
124: ; preds = %6
%125 = load i32, i32* %15
%126 = add nsw i32 %125, 31
%127 = sdiv i32 %126, 32
%128 = load i32, i32* %8
%129 = add nsw i32 %128, 31
%130 = sdiv i32 %129, 32
%131 = mul nsw i32 %127, %130
br label %132
132: ; preds = %124, %123
%133 = phi i32 [ 1, %123 ], [ %131, %124 ]
%134 = sitofp i32 %133 to double
%135 = fdiv double %114, %134
store double %135, double* %18
%136 = load i32, i32* %7
%137 = sdiv i32 %136, 32
%138 = load i32, i32* %16
%139 = sdiv i32 %138, 32
%140 = mul nsw i32 %137, %139
%141 = sitofp i32 %140 to double
%142 = load i32, i32* %7
%143 = sdiv i32 %142, 32
%144 = sitofp i32 %143 to double
%145 = load i32, i32* %16
%146 = srem i32 %145, 32
%147 = sitofp i32 %146 to double
%148 = fmul double %144, %147
%149 = fdiv double %148, 3.200000e+01
%150 = fadd double %141, %149
%151 = load i32, i32* %7
%152 = srem i32 %151, 32
%153 = sitofp i32 %152 to double
%154 = load i32, i32* %16
%155 = sdiv i32 %154, 32
%156 = sitofp i32 %155 to double
%157 = fmul double %153, %156
%158 = fdiv double %157, 3.200000e+01
%159 = fadd double %150, %158
%160 = load i32, i32* %7
%161 = srem i32 %160, 32
%162 = sitofp i32 %161 to double
%163 = load i32, i32* %16
%164 = srem i32 %163, 32
%165 = sitofp i32 %164 to double
%166 = fmul double %162, %165
%167 = fdiv double %166, 1.024000e+03
%168 = fadd double %159, %167
%169 = load i32, i32* %7
%170 = add nsw i32 %169, 31
%171 = sdiv i32 %170, 32
%172 = load i32, i32* %16
%173 = add nsw i32 %172, 31
%174 = sdiv i32 %173, 32
%175 = mul nsw i32 %171, %174
%176 = icmp sgt i32 1, %175
br i1 %176, label %177, label %178
177: ; preds = %132
br label %186
178: ; preds = %132
%179 = load i32, i32* %7
%180 = add nsw i32 %179, 31
%181 = sdiv i32 %180, 32
%182 = load i32, i32* %16
%183 = add nsw i32 %182, 31
%184 = sdiv i32 %183, 32
%185 = mul nsw i32 %181, %184
br label %186
186: ; preds = %178, %177
%187 = phi i32 [ 1, %177 ], [ %185, %178 ]
%188 = sitofp i32 %187 to double
%189 = fdiv double %168, %188
store double %189, double* %19
%190 = load i32, i32* %15
%191 = sdiv i32 %190, 32
%192 = load i32, i32* %16
%193 = sdiv i32 %192, 32
%194 = mul nsw i32 %191, %193
%195 = sitofp i32 %194 to double
%196 = load i32, i32* %15
%197 = sdiv i32 %196, 32
%198 = sitofp i32 %197 to double
%199 = load i32, i32* %16
%200 = srem i32 %199, 32
%201 = sitofp i32 %200 to double
%202 = fmul double %198, %201
%203 = fdiv double %202, 3.200000e+01
%204 = fadd double %195, %203
%205 = load i32, i32* %15
%206 = srem i32 %205, 32
%207 = sitofp i32 %206 to double
%208 = load i32, i32* %16
%209 = sdiv i32 %208, 32
%210 = sitofp i32 %209 to double
%211 = fmul double %207, %210
%212 = fdiv double %211, 3.200000e+01
%213 = fadd double %204, %212
%214 = load i32, i32* %15
%215 = srem i32 %214, 32
%216 = sitofp i32 %215 to double
%217 = load i32, i32* %16
%218 = srem i32 %217, 32
%219 = sitofp i32 %218 to double
%220 = fmul double %216, %219
%221 = fdiv double %220, 1.024000e+03
%222 = fadd double %213, %221
%223 = load i32, i32* %16
%224 = add nsw i32 %223, 31
%225 = sdiv i32 %224, 32
%226 = load i32, i32* %16
%227 = add nsw i32 %226, 31
%228 = sdiv i32 %227, 32
%229 = mul nsw i32 %225, %228
%230 = icmp sgt i32 1, %229
br i1 %230, label %231, label %232
231: ; preds = %186
br label %240
232: ; preds = %186
%233 = load i32, i32* %16
%234 = add nsw i32 %233, 31
%235 = sdiv i32 %234, 32
%236 = load i32, i32* %16
%237 = add nsw i32 %236, 31
%238 = sdiv i32 %237, 32
%239 = mul nsw i32 %235, %238
br label %240
240: ; preds = %232, %231
%241 = phi i32 [ 1, %231 ], [ %239, %232 ]
%242 = sitofp i32 %241 to double
%243 = fdiv double %222, %242
store double %243, double* %20
%244 = load i32, i32* %11
store i32 %244, i32* %22
%245 = load i32, i32* %12
store i32 %245, i32* %23
%246 = load i32, i32* %9
%247 = load i32, i32* %22
%248 = sdiv i32 %246, %247
%249 = load i32, i32* %10
%250 = load i32, i32* %23
%251 = sdiv i32 %249, %250
%252 = mul nsw i32 %248, %251
%253 = sitofp i32 %252 to double
%254 = load double, double* %17
%255 = load i32, i32* %9
%256 = load i32, i32* %22
%257 = sdiv i32 %255, %256
%258 = load i32, i32* %10
%259 = load i32, i32* %23
%260 = srem i32 %258, %259
%261 = icmp sgt i32 %260, 0
%262 = zext i1 %261 to i32
%263 = mul nsw i32 %257, %262
%264 = sitofp i32 %263 to double
%265 = load double, double* %19
%266 = fmul double %264, %265
%267 = call double @llvm.fmuladd.f64(double %253, double %254, double %266)
%268 = load i32, i32* %9
%269 = load i32, i32* %22
%270 = srem i32 %268, %269
%271 = icmp sgt i32 %270, 0
%272 = zext i1 %271 to i32
%273 = load i32, i32* %10
%274 = load i32, i32* %23
%275 = sdiv i32 %273, %274
%276 = mul nsw i32 %272, %275
%277 = sitofp i32 %276 to double
%278 = load double, double* %18
%279 = call double @llvm.fmuladd.f64(double %277, double %278, double %267)
%280 = load i32, i32* %9
%281 = load i32, i32* %22
%282 = srem i32 %280, %281
%283 = icmp sgt i32 %282, 0
%284 = zext i1 %283 to i32
%285 = load i32, i32* %10
%286 = load i32, i32* %23
%287 = srem i32 %285, %286
%288 = icmp sgt i32 %287, 0
%289 = zext i1 %288 to i32
%290 = mul nsw i32 %284, %289
%291 = sitofp i32 %290 to double
%292 = load double, double* %20
%293 = call double @llvm.fmuladd.f64(double %291, double %292, double %279)
%294 = load i32, i32* %9
%295 = load i32, i32* %22
%296 = add nsw i32 %294, %295
%297 = sub nsw i32 %296, 1
%298 = load i32, i32* %22
%299 = sdiv i32 %297, %298
%300 = load i32, i32* %10
%301 = load i32, i32* %23
%302 = add nsw i32 %300, %301
%303 = sub nsw i32 %302, 1
%304 = load i32, i32* %23
%305 = sdiv i32 %303, %304
%306 = mul nsw i32 %299, %305
%307 = sitofp i32 %306 to double
%308 = fdiv double %293, %307
store double %308, double* %21
%309 = load double, double* %21
ret double %309
}

LLVM IR (-O2):
define double @getEfficiency_overlap(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = srem i32 %2, %4
%8 = srem i32 %3, %5
%9 = mul nsw i32 %7, %0
%10 = sdiv i32 %9, %4
%11 = mul nsw i32 %8, %1
%12 = sdiv i32 %11, %5
%13 = sdiv i32 %0, 32
%14 = sdiv i32 %1, 32
%15 = sitofp i32 %13 to double
%16 = srem i32 %1, 32
%17 = sitofp i32 %16 to double
%18 = srem i32 %0, 32
%19 = sitofp i32 %18 to double
%20 = sitofp i32 %14 to double
%21 = add nsw i32 %0, 31
%22 = sdiv i32 %21, 32
%23 = add nsw i32 %1, 31
%24 = sdiv i32 %23, 32
%25 = sdiv i32 %10, 32
%26 = sitofp i32 %25 to double
%27 = srem i32 %10, 32
%28 = sitofp i32 %27 to double
%29 = add nsw i32 %10, 31
%30 = sdiv i32 %29, 32
%31 = mul nsw i32 %30, %24
%32 = icmp sgt i32 %31, 1
%33 = select i1 %32, i32 %31, i32 1
%34 = sitofp i32 %33 to double
%35 = sdiv i32 %12, 32
%36 = srem i32 %12, 32
%37 = sitofp i32 %36 to double
%38 = sitofp i32 %35 to double
%39 = add nsw i32 %12, 31
%40 = sdiv i32 %39, 32
%41 = mul nsw i32 %40, %22
%42 = icmp sgt i32 %41, 1
%43 = select i1 %42, i32 %41, i32 1
%44 = sitofp i32 %43 to double
%45 = mul nsw i32 %40, %40
%46 = icmp eq i32 %45, 0
%47 = sitofp i32 %45 to double
%48 = select i1 %46, double 1.000000e+00, double %47
%49 = fmul double %26, %37
%50 = fmul double %49, 3.125000e-02
%51 = mul nsw i32 %35, %25
%52 = sitofp i32 %51 to double
%53 = fadd double %50, %52
%54 = fmul double %28, %38
%55 = fmul double %54, 3.125000e-02
%56 = fadd double %55, %53
%57 = fmul double %28, %37
%58 = fmul double %57, 0x3F50000000000000
%59 = fadd double %58, %56
%60 = fmul double %15, %37
%61 = fmul double %60, 3.125000e-02
%62 = mul nsw i32 %35, %13
%63 = sitofp i32 %62 to double
%64 = fadd double %61, %63
%65 = fmul double %19, %38
%66 = fmul double %65, 3.125000e-02
%67 = fadd double %66, %64
%68 = fmul double %19, %37
%69 = fmul double %68, 0x3F50000000000000
%70 = fadd double %69, %67
%71 = fdiv double %70, %44
%72 = fmul double %17, %26
%73 = fmul double %72, 3.125000e-02
%74 = mul nsw i32 %25, %14
%75 = sitofp i32 %74 to double
%76 = fadd double %73, %75
%77 = fmul double %20, %28
%78 = fmul double %77, 3.125000e-02
%79 = fadd double %78, %76
%80 = fmul double %17, %28
%81 = fmul double %80, 0x3F50000000000000
%82 = fadd double %81, %79
%83 = fdiv double %82, %34
%84 = fmul double %15, %17
%85 = fmul double %84, 3.125000e-02
%86 = mul nsw i32 %14, %13
%87 = sitofp i32 %86 to double
%88 = fadd double %85, %87
%89 = fmul double %19, %20
%90 = fmul double %89, 3.125000e-02
%91 = fadd double %90, %88
%92 = fmul double %19, %17
%93 = fmul double %92, 0x3F50000000000000
%94 = fadd double %93, %91
%95 = mul nsw i32 %24, %22
%96 = sitofp i32 %95 to double
%97 = fdiv double %94, %96
%98 = fdiv double %59, %48
%99 = sdiv i32 %2, %4
%100 = sdiv i32 %3, %5
%101 = mul nsw i32 %100, %99
%102 = sitofp i32 %101 to double
%103 = icmp sgt i32 %8, 0
%104 = select i1 %103, i32 %99, i32 0
%105 = sitofp i32 %104 to double
%106 = fmul double %71, %105
%107 = tail call double @llvm.fmuladd.f64(double %102, double %97, double %106)
%108 = icmp sgt i32 %7, 0
%109 = select i1 %108, i32 %100, i32 0
%110 = sitofp i32 %109 to double
%111 = tail call double @llvm.fmuladd.f64(double %110, double %83, double %107)
%112 = and i1 %108, %103
%113 = uitofp i1 %112 to double
%114 = tail call double @llvm.fmuladd.f64(double %113, double %98, double %111)
%115 = add i32 %2, -1
%116 = add i32 %115, %4
%117 = sdiv i32 %116, %4
%118 = add i32 %3, -1
%119 = add i32 %118, %5
%120 = sdiv i32 %119, %5
%121 = mul nsw i32 %120, %117
%122 = sitofp i32 %121 to double
%123 = fdiv double %114, %122
ret double %123
}