#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 log(double);
double *malloc(int);
double *calcMI_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 *mi;
  mi = 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++) {
    mi[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 * log(count / p[i][k1] / p[j][k2]);
            }
          }
        }
      mi[j] = add;
    }
  }
  return mi;
}


x86 assembly (clang, -O0):
<calcMI_line>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%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 0xec3(%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    121c <calcMI_line+0xfc>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1209 <calcMI_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    11c6 <calcMI_line+0xa6>
jmp    120e <calcMI_line+0xee>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11b3 <calcMI_line+0x93>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1371 <calcMI_line+0x251>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12f3 <calcMI_line+0x1d3>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    12e0 <calcMI_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    12cd <calcMI_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  0xd54(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xd42(%rip),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    12e0 <calcMI_line+0x1c0>
jmp    12d2 <calcMI_line+0x1b2>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1251 <calcMI_line+0x131>
jmp    12e5 <calcMI_line+0x1c5>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    123e <calcMI_line+0x11e>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    135e <calcMI_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    12fa <calcMI_line+0x1da>
jmp    1363 <calcMI_line+0x243>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1223 <calcMI_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    15e4 <calcMI_line+0x4c4>
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    15d1 <calcMI_line+0x4b1>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    15b1 <calcMI_line+0x491>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    159e <calcMI_line+0x47e>
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    1417 <calcMI_line+0x2f7>
jp     1417 <calcMI_line+0x2f7>
jmp    158b <calcMI_line+0x46b>
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    1455 <calcMI_line+0x335>
jp     1455 <calcMI_line+0x335>
jmp    158b <calcMI_line+0x46b>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    14e1 <calcMI_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    14ce <calcMI_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    14ce <calcMI_line+0x3ae>
movsd  0xb3c(%rip),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    14d3 <calcMI_line+0x3b3>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1464 <calcMI_line+0x344>
movsd  -0x80(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    14fe <calcMI_line+0x3de>
jp     14fe <calcMI_line+0x3de>
jmp    1586 <calcMI_line+0x466>
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),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movslq -0x18(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x3,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x24(%rbp),%rsi
divsd  (%rcx,%rsi,8),%xmm0
movslq -0x1c(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
call   1040 <log@plt>
movaps %xmm0,%xmm2
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    158b <calcMI_line+0x46b>
jmp    1590 <calcMI_line+0x470>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    13cd <calcMI_line+0x2ad>
jmp    15a3 <calcMI_line+0x483>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    13ba <calcMI_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    139f <calcMI_line+0x27f>
jmp    15d6 <calcMI_line+0x4b6>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1377 <calcMI_line+0x257>
mov    -0x68(%rbp),%rax
mov    -0x50(%rbp),%rcx
mov    %rcx,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<calcMI_line>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %ecx,-0x38(%rbp)
mov    %edx,%r14d
mov    %esi,%ebx
mov    %rdi,-0x40(%rbp)
mov    %edx,%eax
mov    %rsp,%r12
mov    %rax,-0x30(%rbp)
imul   $0xa8,%rax,%r13
lea    0xf(%r13),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r12
mov    %r12,%rsp
lea    0x0(,%r14,8),%edi
call   1040 <malloc@plt>
mov    %rax,%r15
mov    %r14,-0x50(%rbp)
test   %r14d,%r14d
jle    1553 <calcMI_line+0x423>
xor    %r14d,%r14d
mov    %r12,%rdi
xor    %esi,%esi
mov    %r13,%rdx
call   1030 <memset@plt>
cvtsi2sd %ebx,%xmm0
mov    %ebx,%eax
mov    %rax,-0x48(%rbp)
movapd %xmm0,-0xb0(%rbp)
ff
unpcklpd %xmm0,%xmm0
movabs $0x16fbdfd00001,%rdi
lea    0xe66(%rip),%r8
movsd  0xe36(%rip),%xmm5
mov    -0x40(%rbp),%r10
mov    %ebx,%r9d
mov    %r15,%rax
jmp    12c8 <calcMI_line+0x198>
nopl   0x0(%rax)
movupd (%r12,%r15,8),%xmm1
movupd 0x10(%r12,%r15,8),%xmm2
movupd 0x20(%r12,%r15,8),%xmm3
movupd 0x30(%r12,%r15,8),%xmm4
divpd  %xmm0,%xmm1
movupd %xmm1,(%r12,%r15,8)
divpd  %xmm0,%xmm2
movupd %xmm2,0x10(%r12,%r15,8)
divpd  %xmm0,%xmm3
movupd %xmm3,0x20(%r12,%r15,8)
divpd  %xmm0,%xmm4
movupd %xmm4,0x30(%r12,%r15,8)
movupd 0x40(%r12,%r15,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,0x40(%r12,%r15,8)
movupd 0x50(%r12,%r15,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,0x50(%r12,%r15,8)
movupd 0x60(%r12,%r15,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,0x60(%r12,%r15,8)
movupd 0x70(%r12,%r15,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,0x70(%r12,%r15,8)
movupd 0x80(%r12,%r15,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,0x80(%r12,%r15,8)
movupd 0x90(%r12,%r15,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,0x90(%r12,%r15,8)
movsd  0xa0(%r12,%r15,8),%xmm1
divsd  -0xb0(%rbp),%xmm1
ff
movsd  %xmm1,0xa0(%r12,%r15,8)
add    $0x1,%r14
add    $0x1,%r10
cmp    -0x30(%rbp),%r14
je     132c <calcMI_line+0x1fc>
lea    (%r14,%r14,4),%rcx
lea    (%r14,%rcx,4),%r15
test   %r9d,%r9d
jle    11e0 <calcMI_line+0xb0>
lea    (%r12,%r15,8),%r11
mov    -0x48(%rbp),%rsi
mov    %r10,%rdx
jmp    12fe <calcMI_line+0x1ce>
cs nopw 0x0(%rax,%rax,1)
add    -0x30(%rbp),%rdx
add    $0xffffffffffffffff,%rsi
je     11e0 <calcMI_line+0xb0>
movzbl (%rdx),%ecx
add    $0xd3,%cl
cmp    $0x2c,%cl
ja     12f0 <calcMI_line+0x1c0>
movzbl %cl,%ebx
bt     %rbx,%rdi
jae    12f0 <calcMI_line+0x1c0>
movsbq %cl,%rcx
mov    (%r8,%rcx,8),%rcx
movsd  (%r11,%rcx,8),%xmm1
addsd  %xmm5,%xmm1
movsd  %xmm1,(%r11,%rcx,8)
jmp    12f0 <calcMI_line+0x1c0>
mov    %r12,-0x58(%rbp)
movslq -0x38(%rbp),%rsi
movq   $0x0,(%rax,%rsi,8)
cmpl   $0x0,-0x50(%rbp)
mov    -0x40(%rbp),%r8
jle    1562 <calcMI_line+0x432>
imul   $0xa8,%rsi,%rcx
add    -0x58(%rbp),%rcx
mov    %rcx,-0x78(%rbp)
mov    -0x48(%rbp),%r13
and    $0xfffffffe,%r13d
mov    -0x30(%rbp),%rcx
lea    (%rcx,%rcx,1),%r12
lea    (%rsi,%rcx,1),%r14
xor    %r10d,%r10d
xorpd  %xmm2,%xmm2
lea    0xc95(%rip),%rdi
mov    %rcx,%r11
mov    %rax,-0x70(%rbp)
mov    %rsi,-0x80(%rbp)
jmp    13ac <calcMI_line+0x27c>
nopl   0x0(%rax,%rax,1)
mov    -0x70(%rbp),%rax
movsd  %xmm3,(%rax,%r10,8)
add    $0x1,%r10
add    $0x1,%r11
cmp    -0x30(%rbp),%r10
je     1562 <calcMI_line+0x432>
imul   $0xa8,%r10,%rcx
add    -0x58(%rbp),%rcx
xor    %edx,%edx
xorpd  %xmm3,%xmm3
mov    %rcx,-0x60(%rbp)
mov    %r10,-0x90(%rbp)
mov    %r11,-0x88(%rbp)
jmp    13ea <calcMI_line+0x2ba>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdx
cmp    $0x15,%rdx
je     1390 <calcMI_line+0x260>
mov    -0x78(%rbp),%rax
movsd  (%rax,%rdx,8),%xmm4
xor    %r15d,%r15d
mov    %rdx,-0x68(%rbp)
movsd  %xmm4,-0x98(%rbp)
ff
jmp    1422 <calcMI_line+0x2f2>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    -0x60(%rbp),%rcx
mov    -0x68(%rbp),%rdx
add    $0x1,%r15
cmp    $0x15,%r15
je     13e0 <calcMI_line+0x2b0>
ucomisd %xmm2,%xmm4
jne    142a <calcMI_line+0x2fa>
jnp    1418 <calcMI_line+0x2e8>
movsd  (%rcx,%r15,8),%xmm1
ucomisd %xmm2,%xmm1
jne    1438 <calcMI_line+0x308>
jnp    1418 <calcMI_line+0x2e8>
test   %r9d,%r9d
jle    1418 <calcMI_line+0x2e8>
mov    (%rdx,%rdi,1),%al
xorpd  %xmm6,%xmm6
cmp    $0x1,%r9d
jne    14f7 <calcMI_line+0x3c7>
xor    %ecx,%ecx
testb  $0x1,-0x48(%rbp)
je     1482 <calcMI_line+0x352>
imul   -0x30(%rbp),%rcx
lea    (%rcx,%rsi,1),%rdx
cmp    %al,(%r8,%rdx,1)
jne    1482 <calcMI_line+0x352>
add    %r10,%rcx
mov    (%r8,%rcx,1),%al
movapd %xmm6,%xmm0
addsd  %xmm5,%xmm0
cmp    (%r15,%rdi,1),%al
je     147e <calcMI_line+0x34e>
movapd %xmm6,%xmm0
movapd %xmm0,%xmm6
ucomisd %xmm2,%xmm6
jne    148a <calcMI_line+0x35a>
jnp    1410 <calcMI_line+0x2e0>
divsd  -0xb0(%rbp),%xmm6
ff
movsd  %xmm6,-0x50(%rbp)
movapd %xmm6,%xmm0
divsd  %xmm4,%xmm0
divsd  %xmm1,%xmm0
mov    %r9d,%ebx
movsd  %xmm3,-0x38(%rbp)
call   1050 <log@plt>
movsd  -0x98(%rbp),%xmm4
ff
movsd  -0x38(%rbp),%xmm3
mov    -0x88(%rbp),%r11
lea    0xb45(%rip),%rdi
xorpd  %xmm2,%xmm2
mov    -0x90(%rbp),%r10
mov    -0x80(%rbp),%rsi
movsd  0xb1e(%rip),%xmm5
mov    -0x40(%rbp),%r8
mov    %ebx,%r9d
mulsd  -0x50(%rbp),%xmm0
addsd  %xmm0,%xmm3
jmp    1410 <calcMI_line+0x2e0>
mov    %r8,%rdx
xor    %ecx,%ecx
jmp    1514 <calcMI_line+0x3e4>
xchg   %ax,%ax
movapd %xmm0,%xmm6
add    $0x2,%rcx
add    %r12,%rdx
cmp    %rcx,%r13
je     1450 <calcMI_line+0x320>
cmp    %al,(%rdx,%rsi,1)
jne    1534 <calcMI_line+0x404>
movzbl (%rdx,%r10,1),%ebx
movapd %xmm6,%xmm0
addsd  %xmm5,%xmm0
cmp    (%r15,%rdi,1),%bl
je     1530 <calcMI_line+0x400>
movapd %xmm6,%xmm0
movapd %xmm0,%xmm6
cmp    %al,(%rdx,%r14,1)
jne    1504 <calcMI_line+0x3d4>
movzbl (%rdx,%r11,1),%ebx
movapd %xmm6,%xmm0
addsd  %xmm5,%xmm0
cmp    (%r15,%rdi,1),%bl
je     1500 <calcMI_line+0x3d0>
movapd %xmm6,%xmm0
jmp    1500 <calcMI_line+0x3d0>
movslq -0x38(%rbp),%rax
movq   $0x0,(%r15,%rax,8)
mov    %r15,%rax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.calcMI_line.reslist = [21 x i8] c"-ACDEFGHIKLMNPQRSTVWY"
define double* @calcMI_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 = %285, %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 %288
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 = %281, %150
%156 = load i32, i32* %10
%157 = load i32, i32* %7
%158 = icmp slt i32 %156, %157
br i1 %158, label %159, label %284
159: ; preds = %155
store double 0.000000e+00, double* %21
store i32 0, i32* %12
br label %160
160: ; preds = %272, %159
%161 = load i32, i32* %12
%162 = load i32, i32* %15
%163 = icmp slt i32 %161, %162
br i1 %163, label %164, label %275
164: ; preds = %160
store i32 0, i32* %13
br label %165
165: ; preds = %268, %164
%166 = load i32, i32* %13
%167 = load i32, i32* %15
%168 = icmp slt i32 %166, %167
br i1 %168, label %169, label %271
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 %267
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 %267
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 %266
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 double, double* %22
%245 = load i32, i32* %9
%246 = sext i32 %245 to i64
%247 = mul nsw i64 %246, %27
%248 = getelementptr inbounds double, double* %30, i64 %247
%249 = load i32, i32* %12
%250 = sext i32 %249 to i64
%251 = getelementptr inbounds double, double* %248, i64 %250
%252 = load double, double* %251
%253 = fdiv double %244, %252
%254 = load i32, i32* %10
%255 = sext i32 %254 to i64
%256 = mul nsw i64 %255, %27
%257 = getelementptr inbounds double, double* %30, i64 %256
%258 = load i32, i32* %13
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds double, double* %257, i64 %259
%261 = load double, double* %260
%262 = fdiv double %253, %261
%263 = call double @log(double %262)
%264 = load double, double* %21
%265 = call double @llvm.fmuladd.f64(double %243, double %263, double %264)
store double %265, double* %21
br label %266
266: ; preds = %238, %235
br label %267
267: ; preds = %266, %179, %169
br label %268
268: ; preds = %267
%269 = load i32, i32* %13
%270 = add nsw i32 %269, 1
store i32 %270, i32* %13
br label %165
271: ; preds = %165
br label %272
272: ; preds = %271
%273 = load i32, i32* %12
%274 = add nsw i32 %273, 1
store i32 %274, i32* %12
br label %160
275: ; preds = %160
%276 = load double, double* %21
%277 = load double*, double** %19
%278 = load i32, i32* %10
%279 = sext i32 %278 to i64
%280 = getelementptr inbounds double, double* %277, i64 %279
store double %276, double* %280
br label %281
281: ; preds = %275
%282 = load i32, i32* %10
%283 = add nsw i32 %282, 1
store i32 %283, i32* %10
br label %155
284: ; preds = %155
br label %285
285: ; preds = %284
%286 = load i32, i32* %9
%287 = add nsw i32 %286, 1
store i32 %287, i32* %9
br label %145
288: ; preds = %145
%289 = load double*, double** %19
%290 = load i8*, i8** %16
ret double* %289
}

LLVM IR (-O2):
@__const.calcMI_line.reslist = [21 x i8] c"-ACDEFGHIKLMNPQRSTVWY"
@switch.table.calcMI_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* @calcMI_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 %216
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 %216
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.calcMI_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, %212
%119 = phi i64 [ 0, %111 ], [ %214, %212 ]
%120 = mul nuw nsw i64 %119, 21
%121 = getelementptr inbounds double, double* %7, i64 %120
br label %122
122: ; preds = %118, %209
%123 = phi i64 [ 0, %118 ], [ %210, %209 ]
%124 = phi double [ 0.000000e+00, %118 ], [ %206, %209 ]
%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.calcMI_line.reslist, i64 0, i64 %123
br label %129
129: ; preds = %122, %205
%130 = phi i64 [ 0, %122 ], [ %207, %205 ]
%131 = phi double [ %124, %122 ], [ %206, %205 ]
br i1 %127, label %132, label %205
132: ; preds = %129
%133 = getelementptr inbounds double, double* %121, i64 %130
%134 = load double, double* %133
%135 = fcmp oeq double %134, 0.000000e+00
%136 = or i1 %135, %29
br i1 %136, label %205, label %137
137: ; preds = %132
%138 = load i8, i8* %128
%139 = getelementptr inbounds [21 x i8], [21 x i8]* @__const.calcMI_line.reslist, i64 0, i64 %130
br i1 %115, label %178, label %140
140: ; preds = %137, %173
%141 = phi i64 [ %175, %173 ], [ 0, %137 ]
%142 = phi double [ %174, %173 ], [ 0.000000e+00, %137 ]
%143 = phi i64 [ %176, %173 ], [ 0, %137 ]
%144 = mul nsw i64 %141, %19
%145 = add nsw i64 %144, %30
%146 = getelementptr inbounds i8, i8* %0, i64 %145
%147 = load i8, i8* %146
%148 = icmp eq i8 %147, %138
br i1 %148, label %149, label %157
149: ; preds = %140
%150 = add nuw nsw i64 %144, %119
%151 = getelementptr inbounds i8, i8* %0, i64 %150
%152 = load i8, i8* %151
%153 = load i8, i8* %139
%154 = icmp eq i8 %152, %153
%155 = fadd double %142, 1.000000e+00
%156 = select i1 %154, double %155, double %142
br label %157
157: ; preds = %149, %140
%158 = phi double [ %142, %140 ], [ %156, %149 ]
%159 = or i64 %141, 1
%160 = mul nsw i64 %159, %19
%161 = add nsw i64 %160, %30
%162 = getelementptr inbounds i8, i8* %0, i64 %161
%163 = load i8, i8* %162
%164 = icmp eq i8 %163, %138
br i1 %164, label %165, label %173
165: ; preds = %157
%166 = add nuw nsw i64 %160, %119
%167 = getelementptr inbounds i8, i8* %0, i64 %166
%168 = load i8, i8* %167
%169 = load i8, i8* %139
%170 = icmp eq i8 %168, %169
%171 = fadd double %158, 1.000000e+00
%172 = select i1 %170, double %171, double %158
br label %173
173: ; preds = %165, %157
%174 = phi double [ %158, %157 ], [ %172, %165 ]
%175 = add nuw nsw i64 %141, 2
%176 = add i64 %143, 2
%177 = icmp eq i64 %176, %116
br i1 %177, label %178, label %140
178: ; preds = %173, %137
%179 = phi double [ undef, %137 ], [ %174, %173 ]
%180 = phi i64 [ 0, %137 ], [ %175, %173 ]
%181 = phi double [ 0.000000e+00, %137 ], [ %174, %173 ]
br i1 %117, label %196, label %182
182: ; preds = %178
%183 = mul nsw i64 %180, %19
%184 = add nsw i64 %183, %30
%185 = getelementptr inbounds i8, i8* %0, i64 %184
%186 = load i8, i8* %185
%187 = icmp eq i8 %186, %138
br i1 %187, label %188, label %196
188: ; preds = %182
%189 = add nuw nsw i64 %183, %119
%190 = getelementptr inbounds i8, i8* %0, i64 %189
%191 = load i8, i8* %190
%192 = load i8, i8* %139
%193 = icmp eq i8 %191, %192
%194 = fadd double %181, 1.000000e+00
%195 = select i1 %193, double %194, double %181
br label %196
196: ; preds = %182, %188, %178
%197 = phi double [ %179, %178 ], [ %181, %182 ], [ %195, %188 ]
%198 = fcmp une double %197, 0.000000e+00
br i1 %198, label %199, label %205
199: ; preds = %196
%200 = fdiv double %197, %18
%201 = fdiv double %200, %126
%202 = fdiv double %201, %134
%203 = tail call double @log(double %202)
%204 = tail call double @llvm.fmuladd.f64(double %200, double %203, double %131)
br label %205
205: ; preds = %132, %196, %199, %129
%206 = phi double [ %131, %132 ], [ %131, %129 ], [ %204, %199 ], [ %131, %196 ]
%207 = add nuw nsw i64 %130, 1
%208 = icmp eq i64 %207, 21
br i1 %208, label %209, label %129
209: ; preds = %205
%210 = add nuw nsw i64 %123, 1
%211 = icmp eq i64 %210, 21
br i1 %211, label %212, label %122
212: ; preds = %209
%213 = getelementptr inbounds double, double* %9, i64 %119
store double %206, double* %213
%214 = add nuw nsw i64 %119, 1
%215 = icmp eq i64 %214, %5
br i1 %215, label %216, label %118
216: ; preds = %212, %11, %28
ret double* %9
}