#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ reslist;

/* Variables and functions */
double *malloc(int);
double *calcOMES_line(char m[], int n, int l, int pos) {
  int i, j, k, k1, k2;
  char reslist[] = {'-', 'A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L',
                    'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'};
  int resnum = sizeof(reslist) / sizeof(char);
  double p[l][resnum];
  double *om;
  om = malloc(l * sizeof(double));
  for (i = 0; i < l; i++)
    for (j = 0; j < resnum; j++)
      p[i][j] = 0;
  for (i = 0; i < l; i++) {
    double count = 0;
    for (j = 0; j < n; j++)
      for (k = 0; k < resnum; k++)
        if (m[j * l + i] == reslist[k]) {
          p[i][k]++;
          count++;
          break;
        }
    for (k = 0; k < resnum; k++)
      p[i][k] = p[i][k] / n;
  }
  for (i = pos; i < pos + 1; i++) {
    om[i] = 0;
    for (j = 0; j < l; j++) {
      double add = 0;
      for (k1 = 0; k1 < resnum; k1++)
        for (k2 = 0; k2 < resnum; k2++) {
          if ((p[i][k1] != 0.0) && (p[j][k2] != 0.0)) {
            double count = 0;
            for (k = 0; k < n; k++) {
              if ((m[k * l + i] == reslist[k1]) &&
                  (m[k * l + j] == reslist[k2]))
                count++;
            }
            if (count != 0.0) {
              count = count / n;
              add += (count - p[i][k1] * p[j][k2]) *
                     (count - p[i][k1] * p[j][k2]) / (p[i][k1] * p[j][k2]);
            }
          }
        }
      om[j] = add;
    }
  }
  return om;
}


x86 assembly (clang, -O0):
<calcOMES_line>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
movabs $0x5957565453525150,%rax
56 57 59
mov    %rax,-0x33(%rbp)
movaps 0xed3(%rip),%xmm0
movaps %xmm0,-0x40(%rbp)
movl   $0x15,-0x44(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,%ecx
mov    -0x44(%rbp),%eax
mov    %rax,-0x90(%rbp)
mov    %rsp,%rdx
mov    %rdx,-0x50(%rbp)
mov    %rcx,%rdx
imul   %rax,%rdx
lea    0xf(,%rdx,8),%rsi
and    $0xfffffffffffffff0,%rsi
mov    %rsp,%rdx
sub    %rsi,%rdx
mov    %rdx,-0x88(%rbp)
mov    %rdx,%rsp
mov    %rcx,-0x58(%rbp)
mov    %rax,-0x60(%rbp)
movslq -0x10(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x68(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    120c <calcOMES_line+0xfc>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    11f9 <calcOMES_line+0xe9>
mov    -0x88(%rbp),%rax
mov    -0x90(%rbp),%rdx
movslq -0x18(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11b6 <calcOMES_line+0xa6>
jmp    11fe <calcOMES_line+0xee>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11a3 <calcOMES_line+0x93>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1361 <calcOMES_line+0x251>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12e3 <calcOMES_line+0x1d3>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    12d0 <calcOMES_line+0x1c0>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x18(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
movslq -0x20(%rbp),%rcx
movsbl -0x40(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
jne    12bd <calcOMES_line+0x1ad>
mov    -0x88(%rbp),%rax
mov    -0x90(%rbp),%rdx
movslq -0x18(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movsd  0xd64(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xd52(%rip),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    12d0 <calcOMES_line+0x1c0>
jmp    12c2 <calcOMES_line+0x1b2>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1241 <calcOMES_line+0x131>
jmp    12d5 <calcOMES_line+0x1c5>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    122e <calcOMES_line+0x11e>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    134e <calcOMES_line+0x23e>
mov    -0x88(%rbp),%rax
mov    -0x90(%rbp),%rdx
movslq -0x18(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x3,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x20(%rbp),%rsi
movsd  (%rcx,%rsi,8),%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
divsd  %xmm1,%xmm0
movslq -0x18(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    12ea <calcOMES_line+0x1da>
jmp    1353 <calcOMES_line+0x243>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1213 <calcOMES_line+0x103>
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1666 <calcOMES_line+0x556>
mov    -0x68(%rbp),%rax
movslq -0x18(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1653 <calcOMES_line+0x543>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1633 <calcOMES_line+0x523>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1620 <calcOMES_line+0x510>
mov    -0x88(%rbp),%rax
mov    -0x90(%rbp),%rdx
movslq -0x18(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1407 <calcOMES_line+0x2f7>
jp     1407 <calcOMES_line+0x2f7>
jmp    160d <calcOMES_line+0x4fd>
mov    -0x88(%rbp),%rax
mov    -0x90(%rbp),%rdx
movslq -0x1c(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1445 <calcOMES_line+0x335>
jp     1445 <calcOMES_line+0x335>
jmp    160d <calcOMES_line+0x4fd>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    14d1 <calcOMES_line+0x3c1>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x18(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
movslq -0x24(%rbp),%rcx
movsbl -0x40(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
jne    14be <calcOMES_line+0x3ae>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
movslq -0x28(%rbp),%rcx
movsbl -0x40(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
jne    14be <calcOMES_line+0x3ae>
movsd  0xb4c(%rip),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    14c3 <calcOMES_line+0x3b3>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1454 <calcOMES_line+0x344>
movsd  -0x80(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    14ee <calcOMES_line+0x3de>
jp     14ee <calcOMES_line+0x3de>
jmp    1608 <calcOMES_line+0x4f8>
mov    -0x88(%rbp),%rax
mov    -0x90(%rbp),%rdx
movsd  -0x80(%rbp),%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm1
movslq -0x18(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x3,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x24(%rbp),%rsi
movsd  (%rcx,%rsi,8),%xmm0
movslq -0x1c(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x3,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x28(%rbp),%rsi
movsd  (%rcx,%rsi,8),%xmm2
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rcx
movq   %rcx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x80(%rbp),%xmm2
movslq -0x18(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x3,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x24(%rbp),%rsi
movsd  (%rcx,%rsi,8),%xmm1
movslq -0x1c(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x3,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x28(%rbp),%rsi
movsd  (%rcx,%rsi,8),%xmm3
movq   %xmm1,%rcx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rcx
movq   %rcx,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movslq -0x18(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x3,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x24(%rbp),%rsi
movsd  (%rcx,%rsi,8),%xmm1
movslq -0x1c(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    160d <calcOMES_line+0x4fd>
jmp    1612 <calcOMES_line+0x502>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    13bd <calcOMES_line+0x2ad>
jmp    1625 <calcOMES_line+0x515>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    13aa <calcOMES_line+0x29a>
movsd  -0x78(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    138f <calcOMES_line+0x27f>
jmp    1658 <calcOMES_line+0x548>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1367 <calcOMES_line+0x257>
mov    -0x68(%rbp),%rax
mov    -0x50(%rbp),%rcx
mov    %rcx,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<calcOMES_line>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %ecx,%r13d
mov    %edx,%r12d
mov    %esi,-0x2c(%rbp)
mov    %rdi,%r14
mov    %edx,%eax
mov    %rsp,%rbx
mov    %rax,-0x38(%rbp)
imul   $0xa8,%rax,%r15
lea    0xf(%r15),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rbx
mov    %rbx,%rsp
lea    0x0(,%r12,8),%edi
call   1040 <malloc@plt>
mov    %r12,-0x48(%rbp)
test   %r12d,%r12d
jle    14e4 <calcOMES_line+0x3c4>
mov    %rax,-0x60(%rbp)
mov    %r13d,-0x40(%rbp)
mov    -0x2c(%rbp),%r13d
mov    %r14,%r12
xor    %r14d,%r14d
mov    %rbx,%rdi
xor    %esi,%esi
mov    %r15,%rdx
call   1030 <memset@plt>
cvtsi2sd %r13d,%xmm9
mov    %r13d,%eax
mov    -0x40(%rbp),%r15d
mov    %rax,-0x50(%rbp)
movapd %xmm9,%xmm2
unpcklpd %xmm9,%xmm2
movabs $0x16fbdfd00001,%r9
lea    0xe79(%rip),%r8
movsd  0xe39(%rip),%xmm1
mov    %r12,-0x68(%rbp)
mov    %r12,%r10
mov    %rbx,%rdi
jmp    12af <calcOMES_line+0x18f>
cs nopw 0x0(%rax,%rax,1)
movupd (%rdi,%rsi,8),%xmm0
movupd 0x10(%rdi,%rsi,8),%xmm3
movupd 0x20(%rdi,%rsi,8),%xmm4
movupd 0x30(%rdi,%rsi,8),%xmm5
divpd  %xmm2,%xmm0
movupd %xmm0,(%rdi,%rsi,8)
divpd  %xmm2,%xmm3
movupd %xmm3,0x10(%rdi,%rsi,8)
divpd  %xmm2,%xmm4
movupd %xmm4,0x20(%rdi,%rsi,8)
divpd  %xmm2,%xmm5
movupd %xmm5,0x30(%rdi,%rsi,8)
movupd 0x40(%rdi,%rsi,8),%xmm0
divpd  %xmm2,%xmm0
movupd %xmm0,0x40(%rdi,%rsi,8)
movupd 0x50(%rdi,%rsi,8),%xmm0
divpd  %xmm2,%xmm0
movupd %xmm0,0x50(%rdi,%rsi,8)
movupd 0x60(%rdi,%rsi,8),%xmm0
divpd  %xmm2,%xmm0
movupd %xmm0,0x60(%rdi,%rsi,8)
movupd 0x70(%rdi,%rsi,8),%xmm0
divpd  %xmm2,%xmm0
movupd %xmm0,0x70(%rdi,%rsi,8)
movupd 0x80(%rdi,%rsi,8),%xmm0
divpd  %xmm2,%xmm0
movupd %xmm0,0x80(%rdi,%rsi,8)
movupd 0x90(%rdi,%rsi,8),%xmm0
divpd  %xmm2,%xmm0
movupd %xmm0,0x90(%rdi,%rsi,8)
movsd  0xa0(%rdi,%rsi,8),%xmm0
divsd  %xmm9,%xmm0
movsd  %xmm0,0xa0(%rdi,%rsi,8)
add    $0x1,%r14
add    $0x1,%r10
cmp    -0x38(%rbp),%r14
je     130a <calcOMES_line+0x1ea>
lea    (%r14,%r14,4),%rax
lea    (%r14,%rax,4),%rsi
cmpl   $0x0,-0x2c(%rbp)
jle    11e0 <calcOMES_line+0xc0>
lea    (%rdi,%rsi,8),%r11
mov    -0x50(%rbp),%rcx
mov    %r10,%rdx
jmp    12de <calcOMES_line+0x1be>
xchg   %ax,%ax
add    -0x38(%rbp),%rdx
add    $0xffffffffffffffff,%rcx
je     11e0 <calcOMES_line+0xc0>
movzbl (%rdx),%eax
add    $0xd3,%al
cmp    $0x2c,%al
ja     12d0 <calcOMES_line+0x1b0>
movzbl %al,%ebx
bt     %rbx,%r9
jae    12d0 <calcOMES_line+0x1b0>
movsbq %al,%rax
mov    (%r8,%rax,8),%rax
movsd  (%r11,%rax,8),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r11,%rax,8)
jmp    12d0 <calcOMES_line+0x1b0>
mov    %rdi,-0x58(%rbp)
movslq %r15d,%rcx
mov    -0x60(%rbp),%rax
movq   $0x0,(%rax,%rcx,8)
cmpl   $0x0,-0x48(%rbp)
mov    -0x2c(%rbp),%r14d
jle    14ef <calcOMES_line+0x3cf>
imul   $0xa8,%rcx,%rax
add    -0x58(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x50(%rbp),%rsi
and    $0xfffffffe,%esi
mov    -0x38(%rbp),%r15
lea    (%r15,%r15,1),%rdi
lea    (%rcx,%r15,1),%rdx
xor    %r10d,%r10d
movapd 0xcb7(%rip),%xmm8
xorpd  %xmm3,%xmm3
lea    0xcbc(%rip),%r11
jmp    138c <calcOMES_line+0x26c>
cs nopw 0x0(%rax,%rax,1)
mov    -0x60(%rbp),%rax
movsd  %xmm4,(%rax,%r10,8)
add    $0x1,%r10
add    $0x1,%r15
cmp    -0x38(%rbp),%r10
je     14ef <calcOMES_line+0x3cf>
imul   $0xa8,%r10,%rbx
add    -0x58(%rbp),%rbx
xor    %r9d,%r9d
xorpd  %xmm4,%xmm4
mov    %rbx,-0x40(%rbp)
jmp    13ba <calcOMES_line+0x29a>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r9
cmp    $0x15,%r9
je     1370 <calcOMES_line+0x250>
mov    -0x70(%rbp),%rax
movsd  (%rax,%r9,8),%xmm5
movapd %xmm5,%xmm6
xorpd  %xmm8,%xmm6
xor    %r8d,%r8d
mov    %r9,-0x48(%rbp)
jmp    13f2 <calcOMES_line+0x2d2>
cs nopw 0x0(%rax,%rax,1)
mov    -0x48(%rbp),%r9
mov    -0x40(%rbp),%rbx
add    $0x1,%r8
cmp    $0x15,%r8
je     13b0 <calcOMES_line+0x290>
ucomisd %xmm3,%xmm5
jne    13fa <calcOMES_line+0x2da>
jnp    13e8 <calcOMES_line+0x2c8>
movsd  (%rbx,%r8,8),%xmm7
ucomisd %xmm3,%xmm7
jne    1408 <calcOMES_line+0x2e8>
jnp    13e8 <calcOMES_line+0x2c8>
test   %r14d,%r14d
jle    13e8 <calcOMES_line+0x2c8>
mov    (%r9,%r11,1),%r12b
xorpd  %xmm0,%xmm0
cmp    $0x1,%r14d
jne    1486 <calcOMES_line+0x366>
xor    %r9d,%r9d
testb  $0x1,-0x50(%rbp)
mov    -0x2c(%rbp),%r14d
je     1458 <calcOMES_line+0x338>
imul   -0x38(%rbp),%r9
lea    (%r9,%rcx,1),%rax
mov    -0x68(%rbp),%rbx
cmp    %r12b,(%rbx,%rax,1)
jne    1458 <calcOMES_line+0x338>
add    %r10,%r9
mov    (%rbx,%r9,1),%al
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
cmp    (%r8,%r11,1),%al
je     1454 <calcOMES_line+0x334>
movapd %xmm0,%xmm2
movapd %xmm2,%xmm0
ucomisd %xmm3,%xmm0
jne    1460 <calcOMES_line+0x340>
jnp    13e0 <calcOMES_line+0x2c0>
divsd  %xmm9,%xmm0
movapd %xmm6,%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm0,%xmm2
mulsd  %xmm2,%xmm2
mulsd  %xmm5,%xmm7
divsd  %xmm7,%xmm2
addsd  %xmm2,%xmm4
jmp    13e0 <calcOMES_line+0x2c0>
mov    -0x68(%rbp),%r14
xor    %r9d,%r9d
jmp    14a4 <calcOMES_line+0x384>
nop
movapd %xmm2,%xmm0
add    $0x2,%r9
add    %rdi,%r14
cmp    %r9,%rsi
je     141e <calcOMES_line+0x2fe>
cmp    %r12b,(%r14,%rcx,1)
jne    14c5 <calcOMES_line+0x3a5>
movzbl (%r14,%r10,1),%r13d
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
cmp    (%r8,%r11,1),%r13b
je     14c1 <calcOMES_line+0x3a1>
movapd %xmm0,%xmm2
movapd %xmm2,%xmm0
cmp    %r12b,(%r14,%rdx,1)
jne    1494 <calcOMES_line+0x374>
movzbl (%r14,%r15,1),%eax
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
cmp    (%r8,%r11,1),%al
je     1490 <calcOMES_line+0x370>
movapd %xmm0,%xmm2
jmp    1490 <calcOMES_line+0x370>
movslq %r13d,%rcx
movq   $0x0,(%rax,%rcx,8)
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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