#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 */

/* Variables and functions */
char *cloneString(char *);
int /*<<< orphan*/ errAbort(char *);
int /*<<< orphan*/ freeMem(char *);
double log(double);
double log10(double);
int /*<<< orphan*/ strUpper(char *);
double oligoTm(char *dna, double DNA_nM, double K_mM) {
  register int dh = 0, ds = 108;
  register char c;
  char *dupe = cloneString(dna);
  char *s = dupe;
  double delta_H, delta_S;
  (void)strUpper(s);
  c = *s;
  s++;
  if (c == 'A')
    goto A_STATE;
  else if (c == 'G')
    goto G_STATE;
  else if (c == 'T')
    goto T_STATE;
  else if (c == 'C')
    goto C_STATE;
  else if (c == 'N')
    goto N_STATE;
  else
    goto ERROR;
A_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dh += 91;
    ds += 240;
    goto A_STATE;
  } else if ('T' == c) {
    dh += 86;
    ds += 239;
    goto T_STATE;
  } else if ('G' == c) {
    dh += 78;
    ds += 208;
    goto G_STATE;
  } else if ('C' == c) {
    dh += 65;
    ds += 173;
    goto C_STATE;
  } else if ('N' == c) {
    dh += 80;
    ds += 215;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
T_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dh += 60;
    ds += 169;
    goto A_STATE;
  } else if ('T' == c) {
    dh += 91;
    ds += 240;
    goto T_STATE;
  } else if ('G' == c) {
    dh += 58;
    ds += 129;
    goto G_STATE;
  } else if ('C' == c) {
    dh += 56;
    ds += 135;
    goto C_STATE;
  } else if ('N' == c) {
    dh += 66;
    ds += 168;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
G_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dh += 56;
    ds += 135;
    goto A_STATE;
  } else if ('T' == c) {
    dh += 65;
    ds += 173;
    goto T_STATE;
  } else if ('G' == c) {
    dh += 110;
    ds += 266;
    goto G_STATE;
  } else if ('C' == c) {
    dh += 111;
    ds += 267;
    goto C_STATE;
  } else if ('N' == c) {
    dh += 85;
    ds += 210;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
C_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dh += 58;
    ds += 129;
    goto A_STATE;
  } else if ('T' == c) {
    dh += 78;
    ds += 208;
    goto T_STATE;
  } else if ('G' == c) {
    dh += 119;
    ds += 278;
    goto G_STATE;
  } else if ('C' == c) {
    dh += 110;
    ds += 266;
    goto C_STATE;
  } else if ('N' == c) {
    dh += 91;
    ds += 220;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
N_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dh += 66;
    ds += 168;
    goto A_STATE;
  } else if ('T' == c) {
    dh += 80;
    ds += 215;
    goto T_STATE;
  } else if ('G' == c) {
    dh += 91;
    ds += 220;
    goto G_STATE;
  } else if ('C' == c) {
    dh += 85;
    ds += 210;
    goto C_STATE;
  } else if ('N' == c) {
    dh += 80;
    ds += 203;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
DONE:
  delta_H = dh * -100.0;
  delta_S = ds * -0.1;
  freeMem(dupe);
  return delta_H / (delta_S + 1.987 * log(DNA_nM / 4000000000.0)) - 273.15 +
         16.6 * log10(K_mM / 1000.0);
ERROR:
  freeMem(dupe);
  errAbort("Not a valid oligo in oligoTm.");
  return 0;
}


x86 assembly (clang, -O0):
<oligoTm>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x6c,-0x28(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <cloneString@plt>
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
call   1060 <strUpper@plt>
mov    -0x40(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x29(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
movsbl -0x29(%rbp),%eax
cmp    $0x41,%eax
jne    11c9 <oligoTm+0x69>
jmp    1216 <oligoTm+0xb6>
movsbl -0x29(%rbp),%eax
cmp    $0x47,%eax
jne    11db <oligoTm+0x7b>
jmp    1414 <oligoTm+0x2b4>
movsbl -0x29(%rbp),%eax
cmp    $0x54,%eax
jne    11ed <oligoTm+0x8d>
jmp    1315 <oligoTm+0x1b5>
movsbl -0x29(%rbp),%eax
cmp    $0x43,%eax
jne    11ff <oligoTm+0x9f>
jmp    1513 <oligoTm+0x3b3>
movsbl -0x29(%rbp),%eax
cmp    $0x4e,%eax
jne    1211 <oligoTm+0xb1>
jmp    1612 <oligoTm+0x4b2>
jmp    17d7 <oligoTm+0x677>
mov    -0x40(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x29(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
movsbl -0x29(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    1255 <oligoTm+0xf5>
mov    -0x24(%rbp),%eax
add    $0x5b,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xf0,%eax
mov    %eax,-0x28(%rbp)
jmp    1216 <oligoTm+0xb6>
movsbl -0x29(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    127f <oligoTm+0x11f>
mov    -0x24(%rbp),%eax
add    $0x56,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xef,%eax
mov    %eax,-0x28(%rbp)
jmp    1315 <oligoTm+0x1b5>
movsbl -0x29(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    12a9 <oligoTm+0x149>
mov    -0x24(%rbp),%eax
add    $0x4e,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xd0,%eax
mov    %eax,-0x28(%rbp)
jmp    1414 <oligoTm+0x2b4>
movsbl -0x29(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    12d3 <oligoTm+0x173>
mov    -0x24(%rbp),%eax
add    $0x41,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xad,%eax
mov    %eax,-0x28(%rbp)
jmp    1513 <oligoTm+0x3b3>
movsbl -0x29(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    12fd <oligoTm+0x19d>
mov    -0x24(%rbp),%eax
add    $0x50,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xd7,%eax
mov    %eax,-0x28(%rbp)
jmp    1612 <oligoTm+0x4b2>
movsbl -0x29(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    1310 <oligoTm+0x1b0>
jmp    1711 <oligoTm+0x5b1>
jmp    17d7 <oligoTm+0x677>
mov    -0x40(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x29(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
movsbl -0x29(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    1354 <oligoTm+0x1f4>
mov    -0x24(%rbp),%eax
add    $0x3c,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xa9,%eax
mov    %eax,-0x28(%rbp)
jmp    1216 <oligoTm+0xb6>
movsbl -0x29(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    137e <oligoTm+0x21e>
mov    -0x24(%rbp),%eax
add    $0x5b,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xf0,%eax
mov    %eax,-0x28(%rbp)
jmp    1315 <oligoTm+0x1b5>
movsbl -0x29(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    13a8 <oligoTm+0x248>
mov    -0x24(%rbp),%eax
add    $0x3a,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x81,%eax
mov    %eax,-0x28(%rbp)
jmp    1414 <oligoTm+0x2b4>
movsbl -0x29(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    13d2 <oligoTm+0x272>
mov    -0x24(%rbp),%eax
add    $0x38,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x87,%eax
mov    %eax,-0x28(%rbp)
jmp    1513 <oligoTm+0x3b3>
movsbl -0x29(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    13fc <oligoTm+0x29c>
mov    -0x24(%rbp),%eax
add    $0x42,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xa8,%eax
mov    %eax,-0x28(%rbp)
jmp    1612 <oligoTm+0x4b2>
movsbl -0x29(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    140f <oligoTm+0x2af>
jmp    1711 <oligoTm+0x5b1>
jmp    17d7 <oligoTm+0x677>
mov    -0x40(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x29(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
movsbl -0x29(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    1453 <oligoTm+0x2f3>
mov    -0x24(%rbp),%eax
add    $0x38,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x87,%eax
mov    %eax,-0x28(%rbp)
jmp    1216 <oligoTm+0xb6>
movsbl -0x29(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    147d <oligoTm+0x31d>
mov    -0x24(%rbp),%eax
add    $0x41,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xad,%eax
mov    %eax,-0x28(%rbp)
jmp    1315 <oligoTm+0x1b5>
movsbl -0x29(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    14a7 <oligoTm+0x347>
mov    -0x24(%rbp),%eax
add    $0x6e,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x10a,%eax
mov    %eax,-0x28(%rbp)
jmp    1414 <oligoTm+0x2b4>
movsbl -0x29(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    14d1 <oligoTm+0x371>
mov    -0x24(%rbp),%eax
add    $0x6f,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x10b,%eax
mov    %eax,-0x28(%rbp)
jmp    1513 <oligoTm+0x3b3>
movsbl -0x29(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    14fb <oligoTm+0x39b>
mov    -0x24(%rbp),%eax
add    $0x55,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xd2,%eax
mov    %eax,-0x28(%rbp)
jmp    1612 <oligoTm+0x4b2>
movsbl -0x29(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    150e <oligoTm+0x3ae>
jmp    1711 <oligoTm+0x5b1>
jmp    17d7 <oligoTm+0x677>
mov    -0x40(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x29(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
movsbl -0x29(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    1552 <oligoTm+0x3f2>
mov    -0x24(%rbp),%eax
add    $0x3a,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x81,%eax
mov    %eax,-0x28(%rbp)
jmp    1216 <oligoTm+0xb6>
movsbl -0x29(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    157c <oligoTm+0x41c>
mov    -0x24(%rbp),%eax
add    $0x4e,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xd0,%eax
mov    %eax,-0x28(%rbp)
jmp    1315 <oligoTm+0x1b5>
movsbl -0x29(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    15a6 <oligoTm+0x446>
mov    -0x24(%rbp),%eax
add    $0x77,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x116,%eax
mov    %eax,-0x28(%rbp)
jmp    1414 <oligoTm+0x2b4>
movsbl -0x29(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    15d0 <oligoTm+0x470>
mov    -0x24(%rbp),%eax
add    $0x6e,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x10a,%eax
mov    %eax,-0x28(%rbp)
jmp    1513 <oligoTm+0x3b3>
movsbl -0x29(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    15fa <oligoTm+0x49a>
mov    -0x24(%rbp),%eax
add    $0x5b,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xdc,%eax
mov    %eax,-0x28(%rbp)
jmp    1612 <oligoTm+0x4b2>
movsbl -0x29(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    160d <oligoTm+0x4ad>
jmp    1711 <oligoTm+0x5b1>
jmp    17d7 <oligoTm+0x677>
mov    -0x40(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x29(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
movsbl -0x29(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    1651 <oligoTm+0x4f1>
mov    -0x24(%rbp),%eax
add    $0x42,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xa8,%eax
mov    %eax,-0x28(%rbp)
jmp    1216 <oligoTm+0xb6>
movsbl -0x29(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    167b <oligoTm+0x51b>
mov    -0x24(%rbp),%eax
add    $0x50,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xd7,%eax
mov    %eax,-0x28(%rbp)
jmp    1315 <oligoTm+0x1b5>
movsbl -0x29(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    16a5 <oligoTm+0x545>
mov    -0x24(%rbp),%eax
add    $0x5b,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xdc,%eax
mov    %eax,-0x28(%rbp)
jmp    1414 <oligoTm+0x2b4>
movsbl -0x29(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    16cf <oligoTm+0x56f>
mov    -0x24(%rbp),%eax
add    $0x55,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xd2,%eax
mov    %eax,-0x28(%rbp)
jmp    1513 <oligoTm+0x3b3>
movsbl -0x29(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    16f9 <oligoTm+0x599>
mov    -0x24(%rbp),%eax
add    $0x50,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0xcb,%eax
mov    %eax,-0x28(%rbp)
jmp    1612 <oligoTm+0x4b2>
movsbl -0x29(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    170c <oligoTm+0x5ac>
jmp    1711 <oligoTm+0x5b1>
jmp    17d7 <oligoTm+0x677>
cvtsi2sdl -0x24(%rbp),%xmm0
movsd  0x912(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
cvtsi2sdl -0x28(%rbp),%xmm0
movsd  0x8f4(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x38(%rbp),%rdi
call   1030 <freeMem@plt>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0x8b9(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1070 <log@plt>
movsd  -0x68(%rbp),%xmm2
movaps %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  0x893(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  0x877(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0x859(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <log10@plt>
movsd  -0x58(%rbp),%xmm1
movsd  0x83b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    17f4 <oligoTm+0x694>
mov    -0x38(%rbp),%rdi
call   1030 <freeMem@plt>
lea    0x851(%rip),%rdi
call   1040 <errAbort@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<oligoTm>:
push   %rbx
sub    $0x20,%rsp
movq   %xmm1,0x18(%rsp)
movsd  %xmm0,0x10(%rsp)
call   1050 <cloneString@plt>
mov    %rax,%rbx
mov    %rax,%rdi
call   1060 <strUpper@plt>
mov    (%rbx),%cl
mov    %rbx,%rax
add    $0x1,%rax
movdqa 0xe6e(%rip),%xmm0
add    $0xbf,%cl
movzbl %cl,%ecx
cmp    $0x13,%cl
ja     145b <oligoTm+0x2fb>
lea    0xf90(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl -0x1(%rax),%ecx
cmp    $0x41,%cl
jne    11d3 <oligoTm+0x73>
paddd  %xmm1,%xmm0
add    $0x1,%rax
jmp    11c0 <oligoTm+0x60>
lea    -0x43(%rcx),%edx
movzbl %dl,%edx
cmp    $0x11,%dl
ja     1292 <oligoTm+0x132>
lea    0xf9f(%rip),%rcx
movslq (%rcx,%rdx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
paddd  0xe26(%rip),%xmm0
jmp    13a0 <oligoTm+0x240>
paddd  0xe29(%rip),%xmm0
jmp    1334 <oligoTm+0x1d4>
paddd  0xdfc(%rip),%xmm0
jmp    1401 <oligoTm+0x2a1>
paddd  0xe1f(%rip),%xmm0
add    $0x1,%rax
movdqa 0xeb3(%rip),%xmm1
nopl   (%rax)
movzbl -0x1(%rax),%ecx
cmp    $0x54,%cl
jne    1243 <oligoTm+0xe3>
paddd  %xmm1,%xmm0
add    $0x1,%rax
jmp    1230 <oligoTm+0xd0>
lea    -0x41(%rcx),%edx
movzbl %dl,%edx
cmp    $0xd,%dl
ja     1292 <oligoTm+0x132>
lea    0xf7b(%rip),%rcx
movslq (%rcx,%rdx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
paddd  0xe8a(%rip),%xmm0
jmp    144a <oligoTm+0x2ea>
paddd  0xded(%rip),%xmm0
jmp    13a0 <oligoTm+0x240>
paddd  0xdf0(%rip),%xmm0
jmp    1334 <oligoTm+0x1d4>
paddd  0xdc3(%rip),%xmm0
jmp    1401 <oligoTm+0x2a1>
test   %cl,%cl
jne    145b <oligoTm+0x2fb>
pshufd $0x55,%xmm0,%xmm1
movd   %xmm1,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0xe4e(%rip),%xmm1
movsd  %xmm1,(%rsp)
movd   %xmm0,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xe3e(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
mov    %rbx,%rdi
call   1030 <freeMem@plt>
movsd  0x10(%rsp),%xmm0
divsd  0xe2a(%rip),%xmm0
call   1070 <log@plt>
mulsd  0xe25(%rip),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
divsd  %xmm0,%xmm1
addsd  0xe16(%rip),%xmm1
movsd  %xmm1,(%rsp)
movsd  0x18(%rsp),%xmm0
divsd  0xe0b(%rip),%xmm0
call   1080 <log10@plt>
mulsd  0xe06(%rip),%xmm0
addsd  (%rsp),%xmm0
jmp    1473 <oligoTm+0x313>
add    $0x1,%rax
movdqa 0xd80(%rip),%xmm1
movzbl -0x1(%rax),%ecx
cmp    $0x47,%cl
jne    1353 <oligoTm+0x1f3>
paddd  %xmm1,%xmm0
add    $0x1,%rax
jmp    1340 <oligoTm+0x1e0>
lea    -0x41(%rcx),%edx
movzbl %dl,%edx
cmp    $0x13,%dl
ja     1292 <oligoTm+0x132>
lea    0xe9f(%rip),%rcx
movslq (%rcx,%rdx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
paddd  0xce6(%rip),%xmm0
jmp    144a <oligoTm+0x2ea>
paddd  0xd09(%rip),%xmm0
jmp    13a0 <oligoTm+0x240>
paddd  0xcef(%rip),%xmm0
jmp    1401 <oligoTm+0x2a1>
paddd  0xc85(%rip),%xmm0
jmp    1221 <oligoTm+0xc1>
add    $0x1,%rax
movdqa 0xd14(%rip),%xmm1
nopl   0x0(%rax)
movzbl -0x1(%rax),%ecx
cmp    $0x43,%cl
jne    13c3 <oligoTm+0x263>
paddd  %xmm1,%xmm0
add    $0x1,%rax
jmp    13b0 <oligoTm+0x250>
lea    -0x41(%rcx),%edx
movzbl %dl,%edx
cmp    $0x13,%dl
ja     1292 <oligoTm+0x132>
lea    0xe7f(%rip),%rcx
movslq (%rcx,%rdx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
paddd  0xc86(%rip),%xmm0
jmp    144a <oligoTm+0x2ea>
paddd  0xcdc(%rip),%xmm0
jmp    1334 <oligoTm+0x1d4>
paddd  0xc9f(%rip),%xmm0
add    $0x1,%rax
movdqa 0xca3(%rip),%xmm1
nopl   (%rax)
movzbl -0x1(%rax),%ecx
cmp    $0x4e,%cl
jne    1423 <oligoTm+0x2c3>
paddd  %xmm1,%xmm0
add    $0x1,%rax
jmp    1410 <oligoTm+0x2b0>
lea    -0x41(%rcx),%edx
movzbl %dl,%edx
cmp    $0x13,%dl
ja     1292 <oligoTm+0x132>
lea    0xe6f(%rip),%rcx
movslq (%rcx,%rdx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
paddd  0xc06(%rip),%xmm0
add    $0x1,%rax
movdqa 0xc8a(%rip),%xmm1
jmp    11c0 <oligoTm+0x60>
mov    %rbx,%rdi
call   1030 <freeMem@plt>
lea    0xe8e(%rip),%rdi
call   1040 <errAbort@plt>
pxor   %xmm0,%xmm0
add    $0x20,%rsp
pop    %rbx
ret
paddd  0xbaf(%rip),%xmm0
jmp    1221 <oligoTm+0xc1>
paddd  0xbf2(%rip),%xmm0
jmp    13a0 <oligoTm+0x240>
paddd  0xc05(%rip),%xmm0
jmp    1334 <oligoTm+0x1d4>
paddd  0xb68(%rip),%xmm0
jmp    1221 <oligoTm+0xc1>

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

LLVM IR (-O2):
@.str = [30 x i8] c"Not a valid oligo in oligoTm.\00"
define double @oligoTm(i8* %0, double %1, double %2) {
%4 = tail call i8* @cloneString(i8* %0)
%5 = tail call i32 @strUpper(i8* %4)
%6 = load i8, i8* %4
%7 = getelementptr inbounds i8, i8* %4, i64 1
switch i8 %6, label %115 [
i8 65, label %8
i8 71, label %14
i8 84, label %11
i8 67, label %17
i8 78, label %80
]
8: ; preds = %40, %55, %70, %88, %3
%9 = phi i8* [ %7, %3 ], [ %39, %40 ], [ %54, %55 ], [ %69, %70 ], [ %87, %88 ]
%10 = phi <2 x i32> [ <i32 108, i32 0>, %3 ], [ %41, %40 ], [ %56, %55 ], [ %71, %70 ], [ %89, %88 ]
br label %20
11: ; preds = %27, %57, %72, %90, %3
%12 = phi i8* [ %24, %27 ], [ %54, %57 ], [ %69, %72 ], [ %87, %90 ], [ %7, %3 ]
%13 = phi <2 x i32> [ %28, %27 ], [ %58, %57 ], [ %73, %72 ], [ %91, %90 ], [ <i32 108, i32 0>, %3 ]
br label %35
14: ; preds = %29, %44, %74, %92, %3
%15 = phi i8* [ %39, %44 ], [ %69, %74 ], [ %87, %92 ], [ %24, %29 ], [ %7, %3 ]
%16 = phi <2 x i32> [ %45, %44 ], [ %75, %74 ], [ %93, %92 ], [ %30, %29 ], [ <i32 108, i32 0>, %3 ]
br label %50
17: ; preds = %31, %46, %61, %94, %3
%18 = phi i8* [ %54, %61 ], [ %87, %94 ], [ %39, %46 ], [ %24, %31 ], [ %7, %3 ]
%19 = phi <2 x i32> [ %62, %61 ], [ %95, %94 ], [ %47, %46 ], [ %32, %31 ], [ <i32 108, i32 0>, %3 ]
br label %65
20: ; preds = %8, %25
%21 = phi i8* [ %24, %25 ], [ %9, %8 ]
%22 = phi <2 x i32> [ %26, %25 ], [ %10, %8 ]
%23 = load i8, i8* %21
%24 = getelementptr inbounds i8, i8* %21, i64 1
switch i8 %23, label %115 [
i8 65, label %25
i8 84, label %27
i8 71, label %29
i8 67, label %31
i8 78, label %33
i8 0, label %98
]
25: ; preds = %20
%26 = add nsw <2 x i32> %22, <i32 240, i32 91>
br label %20
27: ; preds = %20
%28 = add nsw <2 x i32> %22, <i32 239, i32 86>
br label %11
29: ; preds = %20
%30 = add nsw <2 x i32> %22, <i32 208, i32 78>
br label %14
31: ; preds = %20
%32 = add nsw <2 x i32> %22, <i32 173, i32 65>
br label %17
33: ; preds = %20
%34 = add nsw <2 x i32> %22, <i32 215, i32 80>
br label %80
35: ; preds = %11, %42
%36 = phi i8* [ %39, %42 ], [ %12, %11 ]
%37 = phi <2 x i32> [ %43, %42 ], [ %13, %11 ]
%38 = load i8, i8* %36
%39 = getelementptr inbounds i8, i8* %36, i64 1
switch i8 %38, label %115 [
i8 65, label %40
i8 84, label %42
i8 71, label %44
i8 67, label %46
i8 78, label %48
i8 0, label %98
]
40: ; preds = %35
%41 = add nsw <2 x i32> %37, <i32 169, i32 60>
br label %8
42: ; preds = %35
%43 = add nsw <2 x i32> %37, <i32 240, i32 91>
br label %35
44: ; preds = %35
%45 = add nsw <2 x i32> %37, <i32 129, i32 58>
br label %14
46: ; preds = %35
%47 = add nsw <2 x i32> %37, <i32 135, i32 56>
br label %17
48: ; preds = %35
%49 = add nsw <2 x i32> %37, <i32 168, i32 66>
br label %80
50: ; preds = %14, %59
%51 = phi i8* [ %54, %59 ], [ %15, %14 ]
%52 = phi <2 x i32> [ %60, %59 ], [ %16, %14 ]
%53 = load i8, i8* %51
%54 = getelementptr inbounds i8, i8* %51, i64 1
switch i8 %53, label %115 [
i8 65, label %55
i8 84, label %57
i8 71, label %59
i8 67, label %61
i8 78, label %63
i8 0, label %98
]
55: ; preds = %50
%56 = add nsw <2 x i32> %52, <i32 135, i32 56>
br label %8
57: ; preds = %50
%58 = add nsw <2 x i32> %52, <i32 173, i32 65>
br label %11
59: ; preds = %50
%60 = add nsw <2 x i32> %52, <i32 266, i32 110>
br label %50
61: ; preds = %50
%62 = add nsw <2 x i32> %52, <i32 267, i32 111>
br label %17
63: ; preds = %50
%64 = add nsw <2 x i32> %52, <i32 210, i32 85>
br label %80
65: ; preds = %17, %76
%66 = phi i8* [ %69, %76 ], [ %18, %17 ]
%67 = phi <2 x i32> [ %77, %76 ], [ %19, %17 ]
%68 = load i8, i8* %66
%69 = getelementptr inbounds i8, i8* %66, i64 1
switch i8 %68, label %115 [
i8 65, label %70
i8 84, label %72
i8 71, label %74
i8 67, label %76
i8 78, label %78
i8 0, label %98
]
70: ; preds = %65
%71 = add nsw <2 x i32> %67, <i32 129, i32 58>
br label %8
72: ; preds = %65
%73 = add nsw <2 x i32> %67, <i32 208, i32 78>
br label %11
74: ; preds = %65
%75 = add nsw <2 x i32> %67, <i32 278, i32 119>
br label %14
76: ; preds = %65
%77 = add nsw <2 x i32> %67, <i32 266, i32 110>
br label %65
78: ; preds = %65
%79 = add nsw <2 x i32> %67, <i32 220, i32 91>
br label %80
80: ; preds = %33, %48, %63, %78, %3
%81 = phi i8* [ %69, %78 ], [ %54, %63 ], [ %39, %48 ], [ %24, %33 ], [ %7, %3 ]
%82 = phi <2 x i32> [ %79, %78 ], [ %64, %63 ], [ %49, %48 ], [ %34, %33 ], [ <i32 108, i32 0>, %3 ]
br label %83
83: ; preds = %80, %96
%84 = phi i8* [ %87, %96 ], [ %81, %80 ]
%85 = phi <2 x i32> [ %97, %96 ], [ %82, %80 ]
%86 = load i8, i8* %84
%87 = getelementptr inbounds i8, i8* %84, i64 1
switch i8 %86, label %115 [
i8 65, label %88
i8 84, label %90
i8 71, label %92
i8 67, label %94
i8 78, label %96
i8 0, label %98
]
88: ; preds = %83
%89 = add nsw <2 x i32> %85, <i32 168, i32 66>
br label %8
90: ; preds = %83
%91 = add nsw <2 x i32> %85, <i32 215, i32 80>
br label %11
92: ; preds = %83
%93 = add nsw <2 x i32> %85, <i32 220, i32 91>
br label %14
94: ; preds = %83
%95 = add nsw <2 x i32> %85, <i32 210, i32 85>
br label %17
96: ; preds = %83
%97 = add nsw <2 x i32> %85, <i32 203, i32 80>
br label %83
98: ; preds = %20, %35, %50, %65, %83
%99 = phi <2 x i32> [ %85, %83 ], [ %67, %65 ], [ %52, %50 ], [ %37, %35 ], [ %22, %20 ]
%100 = extractelement <2 x i32> %99, i64 1
%101 = sitofp i32 %100 to double
%102 = fmul double %101, 1.000000e+02
%103 = extractelement <2 x i32> %99, i64 0
%104 = sitofp i32 %103 to double
%105 = fmul double %104, -1.000000e-01
%106 = tail call i32 @freeMem(i8* %4)
%107 = fdiv double %1, 4.000000e+09
%108 = tail call double @log(double %107)
%109 = tail call double @llvm.fmuladd.f64(double %108, double 1.987000e+00, double %105)
%110 = fdiv double %102, %109
%111 = fsub double -2.731500e+02, %110
%112 = fdiv double %2, 1.000000e+03
%113 = tail call double @log10(double %112)
%114 = tail call double @llvm.fmuladd.f64(double %113, double 1.660000e+01, double %111)
br label %118
115: ; preds = %20, %35, %50, %65, %83, %3
%116 = tail call i32 @freeMem(i8* %4)
%117 = tail call i32 @errAbort(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str, i64 0, i64 0))
br label %118
118: ; preds = %115, %98
%119 = phi double [ %114, %98 ], [ 0.000000e+00, %115 ]
ret double %119
}