#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 oligoDg(char *dna) {
  register int dg = 0;
  register char c;
  char *dupe = cloneString(dna);
  char *s = dupe;
  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) {
    dg += 1900;
    goto A_STATE;
  } else if ('T' == c) {
    dg += 1500;
    goto T_STATE;
  } else if ('G' == c) {
    dg += 1600;
    goto G_STATE;
  } else if ('C' == c) {
    dg += 1300;
    goto C_STATE;
  } else if ('N' == c) {
    dg += 1575;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
T_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dg += 900;
    goto A_STATE;
  } else if ('T' == c) {
    dg += 1900;
    goto T_STATE;
  } else if ('G' == c) {
    dg += 1900;
    goto G_STATE;
  } else if ('C' == c) {
    dg += 1600;
    goto C_STATE;
  } else if ('N' == c) {
    dg += 1575;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
G_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dg += 1600;
    goto A_STATE;
  } else if ('T' == c) {
    dg += 1300;
    goto T_STATE;
  } else if ('G' == c) {
    dg += 3100;
    goto G_STATE;
  } else if ('C' == c) {
    dg += 3100;
    goto C_STATE;
  } else if ('N' == c) {
    dg += 2275;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
C_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dg += 1900;
    goto A_STATE;
  } else if ('T' == c) {
    dg += 1600;
    goto T_STATE;
  } else if ('G' == c) {
    dg += 3600;
    goto G_STATE;
  } else if ('C' == c) {
    dg += 3100;
    goto C_STATE;
  } else if ('N' == c) {
    dg += 2550;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
N_STATE:
  c = *s;
  s++;
  if ('A' == c) {
    dg += 1575;
    goto A_STATE;
  } else if ('T' == c) {
    dg += 1575;
    goto T_STATE;
  } else if ('G' == c) {
    dg += 2550;
    goto G_STATE;
  } else if ('C' == c) {
    dg += 2275;
    goto C_STATE;
  } else if ('N' == c) {
    dg += 1994;
    goto N_STATE;
  } else if ('\0' == c)
    goto DONE;
  else
    goto ERROR;
DONE:
  freeMem(dupe);
  return dg / 1000.0;
ERROR:
  freeMem(dupe);
  errAbort("Not a valid oligo in oligoDg.");
  return 0;
}


x86 assembly (clang, -O0):
<oligoDg>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <cloneString@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x15(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
movsbl -0x15(%rbp),%eax
cmp    $0x41,%eax
jne    117f <oligoDg+0x4f>
jmp    11cc <oligoDg+0x9c>
movsbl -0x15(%rbp),%eax
cmp    $0x47,%eax
jne    1191 <oligoDg+0x61>
jmp    1370 <oligoDg+0x240>
movsbl -0x15(%rbp),%eax
cmp    $0x54,%eax
jne    11a3 <oligoDg+0x73>
jmp    129e <oligoDg+0x16e>
movsbl -0x15(%rbp),%eax
cmp    $0x43,%eax
jne    11b5 <oligoDg+0x85>
jmp    1442 <oligoDg+0x312>
movsbl -0x15(%rbp),%eax
cmp    $0x4e,%eax
jne    11c7 <oligoDg+0x97>
jmp    1514 <oligoDg+0x3e4>
jmp    160a <oligoDg+0x4da>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x15(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
movsbl -0x15(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    1202 <oligoDg+0xd2>
mov    -0x14(%rbp),%eax
add    $0x76c,%eax
mov    %eax,-0x14(%rbp)
jmp    11cc <oligoDg+0x9c>
movsbl -0x15(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    1223 <oligoDg+0xf3>
mov    -0x14(%rbp),%eax
add    $0x5dc,%eax
mov    %eax,-0x14(%rbp)
jmp    129e <oligoDg+0x16e>
movsbl -0x15(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    1244 <oligoDg+0x114>
mov    -0x14(%rbp),%eax
add    $0x640,%eax
mov    %eax,-0x14(%rbp)
jmp    1370 <oligoDg+0x240>
movsbl -0x15(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    1265 <oligoDg+0x135>
mov    -0x14(%rbp),%eax
add    $0x514,%eax
mov    %eax,-0x14(%rbp)
jmp    1442 <oligoDg+0x312>
movsbl -0x15(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    1286 <oligoDg+0x156>
mov    -0x14(%rbp),%eax
add    $0x627,%eax
mov    %eax,-0x14(%rbp)
jmp    1514 <oligoDg+0x3e4>
movsbl -0x15(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    1299 <oligoDg+0x169>
jmp    15e6 <oligoDg+0x4b6>
jmp    160a <oligoDg+0x4da>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x15(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
movsbl -0x15(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    12d4 <oligoDg+0x1a4>
mov    -0x14(%rbp),%eax
add    $0x384,%eax
mov    %eax,-0x14(%rbp)
jmp    11cc <oligoDg+0x9c>
movsbl -0x15(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    12f5 <oligoDg+0x1c5>
mov    -0x14(%rbp),%eax
add    $0x76c,%eax
mov    %eax,-0x14(%rbp)
jmp    129e <oligoDg+0x16e>
movsbl -0x15(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    1316 <oligoDg+0x1e6>
mov    -0x14(%rbp),%eax
add    $0x76c,%eax
mov    %eax,-0x14(%rbp)
jmp    1370 <oligoDg+0x240>
movsbl -0x15(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    1337 <oligoDg+0x207>
mov    -0x14(%rbp),%eax
add    $0x640,%eax
mov    %eax,-0x14(%rbp)
jmp    1442 <oligoDg+0x312>
movsbl -0x15(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    1358 <oligoDg+0x228>
mov    -0x14(%rbp),%eax
add    $0x627,%eax
mov    %eax,-0x14(%rbp)
jmp    1514 <oligoDg+0x3e4>
movsbl -0x15(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    136b <oligoDg+0x23b>
jmp    15e6 <oligoDg+0x4b6>
jmp    160a <oligoDg+0x4da>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x15(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
movsbl -0x15(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    13a6 <oligoDg+0x276>
mov    -0x14(%rbp),%eax
add    $0x640,%eax
mov    %eax,-0x14(%rbp)
jmp    11cc <oligoDg+0x9c>
movsbl -0x15(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    13c7 <oligoDg+0x297>
mov    -0x14(%rbp),%eax
add    $0x514,%eax
mov    %eax,-0x14(%rbp)
jmp    129e <oligoDg+0x16e>
movsbl -0x15(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    13e8 <oligoDg+0x2b8>
mov    -0x14(%rbp),%eax
add    $0xc1c,%eax
mov    %eax,-0x14(%rbp)
jmp    1370 <oligoDg+0x240>
movsbl -0x15(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    1409 <oligoDg+0x2d9>
mov    -0x14(%rbp),%eax
add    $0xc1c,%eax
mov    %eax,-0x14(%rbp)
jmp    1442 <oligoDg+0x312>
movsbl -0x15(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    142a <oligoDg+0x2fa>
mov    -0x14(%rbp),%eax
add    $0x8e3,%eax
mov    %eax,-0x14(%rbp)
jmp    1514 <oligoDg+0x3e4>
movsbl -0x15(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    143d <oligoDg+0x30d>
jmp    15e6 <oligoDg+0x4b6>
jmp    160a <oligoDg+0x4da>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x15(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
movsbl -0x15(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    1478 <oligoDg+0x348>
mov    -0x14(%rbp),%eax
add    $0x76c,%eax
mov    %eax,-0x14(%rbp)
jmp    11cc <oligoDg+0x9c>
movsbl -0x15(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    1499 <oligoDg+0x369>
mov    -0x14(%rbp),%eax
add    $0x640,%eax
mov    %eax,-0x14(%rbp)
jmp    129e <oligoDg+0x16e>
movsbl -0x15(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    14ba <oligoDg+0x38a>
mov    -0x14(%rbp),%eax
add    $0xe10,%eax
mov    %eax,-0x14(%rbp)
jmp    1370 <oligoDg+0x240>
movsbl -0x15(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    14db <oligoDg+0x3ab>
mov    -0x14(%rbp),%eax
add    $0xc1c,%eax
mov    %eax,-0x14(%rbp)
jmp    1442 <oligoDg+0x312>
movsbl -0x15(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    14fc <oligoDg+0x3cc>
mov    -0x14(%rbp),%eax
add    $0x9f6,%eax
mov    %eax,-0x14(%rbp)
jmp    1514 <oligoDg+0x3e4>
movsbl -0x15(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    150f <oligoDg+0x3df>
jmp    15e6 <oligoDg+0x4b6>
jmp    160a <oligoDg+0x4da>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x15(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
movsbl -0x15(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jne    154a <oligoDg+0x41a>
mov    -0x14(%rbp),%eax
add    $0x627,%eax
mov    %eax,-0x14(%rbp)
jmp    11cc <oligoDg+0x9c>
movsbl -0x15(%rbp),%ecx
mov    $0x54,%eax
cmp    %ecx,%eax
jne    156b <oligoDg+0x43b>
mov    -0x14(%rbp),%eax
add    $0x627,%eax
mov    %eax,-0x14(%rbp)
jmp    129e <oligoDg+0x16e>
movsbl -0x15(%rbp),%ecx
mov    $0x47,%eax
cmp    %ecx,%eax
jne    158c <oligoDg+0x45c>
mov    -0x14(%rbp),%eax
add    $0x9f6,%eax
mov    %eax,-0x14(%rbp)
jmp    1370 <oligoDg+0x240>
movsbl -0x15(%rbp),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    15ad <oligoDg+0x47d>
mov    -0x14(%rbp),%eax
add    $0x8e3,%eax
mov    %eax,-0x14(%rbp)
jmp    1442 <oligoDg+0x312>
movsbl -0x15(%rbp),%ecx
mov    $0x4e,%eax
cmp    %ecx,%eax
jne    15ce <oligoDg+0x49e>
mov    -0x14(%rbp),%eax
add    $0x7ca,%eax
mov    %eax,-0x14(%rbp)
jmp    1514 <oligoDg+0x3e4>
movsbl -0x15(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    15e1 <oligoDg+0x4b1>
jmp    15e6 <oligoDg+0x4b6>
jmp    160a <oligoDg+0x4da>
mov    -0x20(%rbp),%rdi
call   1030 <freeMem@plt>
cvtsi2sdl -0x14(%rbp),%xmm0
movsd  0xa04(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1627 <oligoDg+0x4f7>
mov    -0x20(%rbp),%rdi
call   1030 <freeMem@plt>
lea    0x9ee(%rip),%rdi
call   1040 <errAbort@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<oligoDg>:
push   %rbx
call   1050 <cloneString@plt>
mov    (%rax),%dl
mov    %rax,%rcx
add    $0x1,%rcx
xor    %ebx,%ebx
add    $0xbf,%dl
movzbl %dl,%edx
cmp    $0x13,%dl
ja     133f <oligoDg+0x20f>
lea    0xeb1(%rip),%rsi
movslq (%rsi,%rdx,4),%rdx
add    %rsi,%rdx
jmp    *%rdx
add    $0x76c,%ebx
add    $0x1,%rcx
movzbl -0x1(%rcx),%edx
cmp    $0x41,%dl
je     1160 <oligoDg+0x30>
lea    -0x43(%rdx),%esi
movzbl %sil,%esi
cmp    $0x11,%sil
ja     1219 <oligoDg+0xe9>
lea    0xecd(%rip),%rdx
movslq (%rdx,%rsi,4),%rsi
add    %rdx,%rsi
jmp    *%rsi
add    $0x514,%ebx
jmp    12a6 <oligoDg+0x176>
add    $0x640,%ebx
jmp    1246 <oligoDg+0x116>
add    $0x627,%ebx
jmp    1306 <oligoDg+0x1d6>
add    $0x5dc,%ebx
jmp    11c6 <oligoDg+0x96>
nopl   (%rax)
add    $0x76c,%ebx
add    $0x1,%rcx
movzbl -0x1(%rcx),%edx
cmp    $0x54,%dl
je     11c0 <oligoDg+0x90>
lea    -0x41(%rdx),%esi
movzbl %sil,%esi
cmp    $0xd,%sil
ja     1219 <oligoDg+0xe9>
lea    0xeb9(%rip),%rdx
movslq (%rdx,%rsi,4),%rsi
add    %rdx,%rsi
jmp    *%rsi
add    $0x384,%ebx
jmp    1166 <oligoDg+0x36>
add    $0x640,%ebx
jmp    12a6 <oligoDg+0x176>
add    $0x76c,%ebx
jmp    1246 <oligoDg+0x116>
add    $0x627,%ebx
jmp    1306 <oligoDg+0x1d6>
test   %dl,%dl
jne    133f <oligoDg+0x20f>
mov    %rax,%rdi
call   1030 <freeMem@plt>
cvtsi2sd %ebx,%xmm0
divsd  0xdcb(%rip),%xmm0
pop    %rbx
ret
nopw   0x0(%rax,%rax,1)
add    $0xc1c,%ebx
add    $0x1,%rcx
movzbl -0x1(%rcx),%edx
cmp    $0x47,%dl
je     1240 <oligoDg+0x110>
lea    -0x41(%rdx),%esi
movzbl %sil,%esi
cmp    $0x13,%sil
ja     1219 <oligoDg+0xe9>
lea    0xe71(%rip),%rdx
movslq (%rdx,%rsi,4),%rsi
add    %rdx,%rsi
jmp    *%rsi
add    $0x640,%ebx
jmp    1166 <oligoDg+0x36>
add    $0xc1c,%ebx
jmp    12a6 <oligoDg+0x176>
add    $0x8e3,%ebx
jmp    1306 <oligoDg+0x1d6>
add    $0x514,%ebx
jmp    11c6 <oligoDg+0x96>
cs nopw 0x0(%rax,%rax,1)
add    $0xc1c,%ebx
add    $0x1,%rcx
movzbl -0x1(%rcx),%edx
cmp    $0x43,%dl
je     12a0 <oligoDg+0x170>
lea    -0x41(%rdx),%esi
movzbl %sil,%esi
cmp    $0x13,%sil
ja     1219 <oligoDg+0xe9>
lea    0xe5d(%rip),%rdx
movslq (%rdx,%rsi,4),%rsi
add    %rdx,%rsi
jmp    *%rsi
add    $0x76c,%ebx
jmp    1166 <oligoDg+0x36>
add    $0xe10,%ebx
jmp    1246 <oligoDg+0x116>
add    $0x9f6,%ebx
jmp    1306 <oligoDg+0x1d6>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x7ca,%ebx
add    $0x1,%rcx
movzbl -0x1(%rcx),%edx
cmp    $0x4e,%dl
je     1300 <oligoDg+0x1d0>
lea    -0x41(%rdx),%esi
movzbl %sil,%esi
cmp    $0x13,%sil
ja     1219 <oligoDg+0xe9>
lea    0xe4d(%rip),%rdx
movslq (%rdx,%rsi,4),%rsi
add    %rdx,%rsi
jmp    *%rsi
add    $0x627,%ebx
jmp    1166 <oligoDg+0x36>
mov    %rax,%rdi
call   1030 <freeMem@plt>
lea    0xe7a(%rip),%rdi
call   1040 <errAbort@plt>
xorps  %xmm0,%xmm0
pop    %rbx
ret
add    $0x640,%ebx
jmp    11c6 <oligoDg+0x96>
add    $0x8e3,%ebx
jmp    12a6 <oligoDg+0x176>
add    $0x9f6,%ebx
jmp    1246 <oligoDg+0x116>
add    $0x627,%ebx
jmp    11c6 <oligoDg+0x96>

LLVM IR (-O0):
@.str = [30 x i8] c"Not a valid oligo in oligoDg.\00"
define double @oligoDg(i8* %0) {
%2 = alloca double
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i8
%6 = alloca i8*
%7 = alloca i8*
store i8* %0, i8** %3
store i32 0, i32* %4
%8 = load i8*, i8** %3
%9 = call i8* @cloneString(i8* %8)
store i8* %9, i8** %6
%10 = load i8*, i8** %6
store i8* %10, i8** %7
%11 = load i8*, i8** %7
%12 = load i8, i8* %11
store i8 %12, i8* %5
%13 = load i8*, i8** %7
%14 = getelementptr inbounds i8, i8* %13, i32 1
store i8* %14, i8** %7
%15 = load i8, i8* %5
%16 = sext i8 %15 to i32
%17 = icmp eq i32 %16, 65
br i1 %17, label %18, label %19
18: ; preds = %1
br label %40
19: ; preds = %1
%20 = load i8, i8* %5
%21 = sext i8 %20 to i32
%22 = icmp eq i32 %21, 71
br i1 %22, label %23, label %24
23: ; preds = %19
br label %130
24: ; preds = %19
%25 = load i8, i8* %5
%26 = sext i8 %25 to i32
%27 = icmp eq i32 %26, 84
br i1 %27, label %28, label %29
28: ; preds = %24
br label %85
29: ; preds = %24
%30 = load i8, i8* %5
%31 = sext i8 %30 to i32
%32 = icmp eq i32 %31, 67
br i1 %32, label %33, label %34
33: ; preds = %29
br label %175
34: ; preds = %29
%35 = load i8, i8* %5
%36 = sext i8 %35 to i32
%37 = icmp eq i32 %36, 78
br i1 %37, label %38, label %39
38: ; preds = %34
br label %220
39: ; preds = %34
br label %271
40: ; preds = %228, %183, %138, %93, %48, %18
%41 = load i8*, i8** %7
%42 = load i8, i8* %41
store i8 %42, i8* %5
%43 = load i8*, i8** %7
%44 = getelementptr inbounds i8, i8* %43, i32 1
store i8* %44, i8** %7
%45 = load i8, i8* %5
%46 = sext i8 %45 to i32
%47 = icmp eq i32 65, %46
br i1 %47, label %48, label %51
48: ; preds = %40
%49 = load i32, i32* %4
%50 = add nsw i32 %49, 1900
store i32 %50, i32* %4
br label %40
51: ; preds = %40
%52 = load i8, i8* %5
%53 = sext i8 %52 to i32
%54 = icmp eq i32 84, %53
br i1 %54, label %55, label %58
55: ; preds = %51
%56 = load i32, i32* %4
%57 = add nsw i32 %56, 1500
store i32 %57, i32* %4
br label %85
58: ; preds = %51
%59 = load i8, i8* %5
%60 = sext i8 %59 to i32
%61 = icmp eq i32 71, %60
br i1 %61, label %62, label %65
62: ; preds = %58
%63 = load i32, i32* %4
%64 = add nsw i32 %63, 1600
store i32 %64, i32* %4
br label %130
65: ; preds = %58
%66 = load i8, i8* %5
%67 = sext i8 %66 to i32
%68 = icmp eq i32 67, %67
br i1 %68, label %69, label %72
69: ; preds = %65
%70 = load i32, i32* %4
%71 = add nsw i32 %70, 1300
store i32 %71, i32* %4
br label %175
72: ; preds = %65
%73 = load i8, i8* %5
%74 = sext i8 %73 to i32
%75 = icmp eq i32 78, %74
br i1 %75, label %76, label %79
76: ; preds = %72
%77 = load i32, i32* %4
%78 = add nsw i32 %77, 1575
store i32 %78, i32* %4
br label %220
79: ; preds = %72
%80 = load i8, i8* %5
%81 = sext i8 %80 to i32
%82 = icmp eq i32 0, %81
br i1 %82, label %83, label %84
83: ; preds = %79
br label %265
84: ; preds = %79
br label %271
85: ; preds = %235, %190, %145, %100, %55, %28
%86 = load i8*, i8** %7
%87 = load i8, i8* %86
store i8 %87, i8* %5
%88 = load i8*, i8** %7
%89 = getelementptr inbounds i8, i8* %88, i32 1
store i8* %89, i8** %7
%90 = load i8, i8* %5
%91 = sext i8 %90 to i32
%92 = icmp eq i32 65, %91
br i1 %92, label %93, label %96
93: ; preds = %85
%94 = load i32, i32* %4
%95 = add nsw i32 %94, 900
store i32 %95, i32* %4
br label %40
96: ; preds = %85
%97 = load i8, i8* %5
%98 = sext i8 %97 to i32
%99 = icmp eq i32 84, %98
br i1 %99, label %100, label %103
100: ; preds = %96
%101 = load i32, i32* %4
%102 = add nsw i32 %101, 1900
store i32 %102, i32* %4
br label %85
103: ; preds = %96
%104 = load i8, i8* %5
%105 = sext i8 %104 to i32
%106 = icmp eq i32 71, %105
br i1 %106, label %107, label %110
107: ; preds = %103
%108 = load i32, i32* %4
%109 = add nsw i32 %108, 1900
store i32 %109, i32* %4
br label %130
110: ; preds = %103
%111 = load i8, i8* %5
%112 = sext i8 %111 to i32
%113 = icmp eq i32 67, %112
br i1 %113, label %114, label %117
114: ; preds = %110
%115 = load i32, i32* %4
%116 = add nsw i32 %115, 1600
store i32 %116, i32* %4
br label %175
117: ; preds = %110
%118 = load i8, i8* %5
%119 = sext i8 %118 to i32
%120 = icmp eq i32 78, %119
br i1 %120, label %121, label %124
121: ; preds = %117
%122 = load i32, i32* %4
%123 = add nsw i32 %122, 1575
store i32 %123, i32* %4
br label %220
124: ; preds = %117
%125 = load i8, i8* %5
%126 = sext i8 %125 to i32
%127 = icmp eq i32 0, %126
br i1 %127, label %128, label %129
128: ; preds = %124
br label %265
129: ; preds = %124
br label %271
130: ; preds = %242, %197, %152, %107, %62, %23
%131 = load i8*, i8** %7
%132 = load i8, i8* %131
store i8 %132, i8* %5
%133 = load i8*, i8** %7
%134 = getelementptr inbounds i8, i8* %133, i32 1
store i8* %134, i8** %7
%135 = load i8, i8* %5
%136 = sext i8 %135 to i32
%137 = icmp eq i32 65, %136
br i1 %137, label %138, label %141
138: ; preds = %130
%139 = load i32, i32* %4
%140 = add nsw i32 %139, 1600
store i32 %140, i32* %4
br label %40
141: ; preds = %130
%142 = load i8, i8* %5
%143 = sext i8 %142 to i32
%144 = icmp eq i32 84, %143
br i1 %144, label %145, label %148
145: ; preds = %141
%146 = load i32, i32* %4
%147 = add nsw i32 %146, 1300
store i32 %147, i32* %4
br label %85
148: ; preds = %141
%149 = load i8, i8* %5
%150 = sext i8 %149 to i32
%151 = icmp eq i32 71, %150
br i1 %151, label %152, label %155
152: ; preds = %148
%153 = load i32, i32* %4
%154 = add nsw i32 %153, 3100
store i32 %154, i32* %4
br label %130
155: ; preds = %148
%156 = load i8, i8* %5
%157 = sext i8 %156 to i32
%158 = icmp eq i32 67, %157
br i1 %158, label %159, label %162
159: ; preds = %155
%160 = load i32, i32* %4
%161 = add nsw i32 %160, 3100
store i32 %161, i32* %4
br label %175
162: ; preds = %155
%163 = load i8, i8* %5
%164 = sext i8 %163 to i32
%165 = icmp eq i32 78, %164
br i1 %165, label %166, label %169
166: ; preds = %162
%167 = load i32, i32* %4
%168 = add nsw i32 %167, 2275
store i32 %168, i32* %4
br label %220
169: ; preds = %162
%170 = load i8, i8* %5
%171 = sext i8 %170 to i32
%172 = icmp eq i32 0, %171
br i1 %172, label %173, label %174
173: ; preds = %169
br label %265
174: ; preds = %169
br label %271
175: ; preds = %249, %204, %159, %114, %69, %33
%176 = load i8*, i8** %7
%177 = load i8, i8* %176
store i8 %177, i8* %5
%178 = load i8*, i8** %7
%179 = getelementptr inbounds i8, i8* %178, i32 1
store i8* %179, i8** %7
%180 = load i8, i8* %5
%181 = sext i8 %180 to i32
%182 = icmp eq i32 65, %181
br i1 %182, label %183, label %186
183: ; preds = %175
%184 = load i32, i32* %4
%185 = add nsw i32 %184, 1900
store i32 %185, i32* %4
br label %40
186: ; preds = %175
%187 = load i8, i8* %5
%188 = sext i8 %187 to i32
%189 = icmp eq i32 84, %188
br i1 %189, label %190, label %193
190: ; preds = %186
%191 = load i32, i32* %4
%192 = add nsw i32 %191, 1600
store i32 %192, i32* %4
br label %85
193: ; preds = %186
%194 = load i8, i8* %5
%195 = sext i8 %194 to i32
%196 = icmp eq i32 71, %195
br i1 %196, label %197, label %200
197: ; preds = %193
%198 = load i32, i32* %4
%199 = add nsw i32 %198, 3600
store i32 %199, i32* %4
br label %130
200: ; preds = %193
%201 = load i8, i8* %5
%202 = sext i8 %201 to i32
%203 = icmp eq i32 67, %202
br i1 %203, label %204, label %207
204: ; preds = %200
%205 = load i32, i32* %4
%206 = add nsw i32 %205, 3100
store i32 %206, i32* %4
br label %175
207: ; preds = %200
%208 = load i8, i8* %5
%209 = sext i8 %208 to i32
%210 = icmp eq i32 78, %209
br i1 %210, label %211, label %214
211: ; preds = %207
%212 = load i32, i32* %4
%213 = add nsw i32 %212, 2550
store i32 %213, i32* %4
br label %220
214: ; preds = %207
%215 = load i8, i8* %5
%216 = sext i8 %215 to i32
%217 = icmp eq i32 0, %216
br i1 %217, label %218, label %219
218: ; preds = %214
br label %265
219: ; preds = %214
br label %271
220: ; preds = %256, %211, %166, %121, %76, %38
%221 = load i8*, i8** %7
%222 = load i8, i8* %221
store i8 %222, i8* %5
%223 = load i8*, i8** %7
%224 = getelementptr inbounds i8, i8* %223, i32 1
store i8* %224, i8** %7
%225 = load i8, i8* %5
%226 = sext i8 %225 to i32
%227 = icmp eq i32 65, %226
br i1 %227, label %228, label %231
228: ; preds = %220
%229 = load i32, i32* %4
%230 = add nsw i32 %229, 1575
store i32 %230, i32* %4
br label %40
231: ; preds = %220
%232 = load i8, i8* %5
%233 = sext i8 %232 to i32
%234 = icmp eq i32 84, %233
br i1 %234, label %235, label %238
235: ; preds = %231
%236 = load i32, i32* %4
%237 = add nsw i32 %236, 1575
store i32 %237, i32* %4
br label %85
238: ; preds = %231
%239 = load i8, i8* %5
%240 = sext i8 %239 to i32
%241 = icmp eq i32 71, %240
br i1 %241, label %242, label %245
242: ; preds = %238
%243 = load i32, i32* %4
%244 = add nsw i32 %243, 2550
store i32 %244, i32* %4
br label %130
245: ; preds = %238
%246 = load i8, i8* %5
%247 = sext i8 %246 to i32
%248 = icmp eq i32 67, %247
br i1 %248, label %249, label %252
249: ; preds = %245
%250 = load i32, i32* %4
%251 = add nsw i32 %250, 2275
store i32 %251, i32* %4
br label %175
252: ; preds = %245
%253 = load i8, i8* %5
%254 = sext i8 %253 to i32
%255 = icmp eq i32 78, %254
br i1 %255, label %256, label %259
256: ; preds = %252
%257 = load i32, i32* %4
%258 = add nsw i32 %257, 1994
store i32 %258, i32* %4
br label %220
259: ; preds = %252
%260 = load i8, i8* %5
%261 = sext i8 %260 to i32
%262 = icmp eq i32 0, %261
br i1 %262, label %263, label %264
263: ; preds = %259
br label %265
264: ; preds = %259
br label %271
265: ; preds = %263, %218, %173, %128, %83
%266 = load i8*, i8** %6
%267 = call i32 @freeMem(i8* %266)
%268 = load i32, i32* %4
%269 = sitofp i32 %268 to double
%270 = fdiv double %269, 1.000000e+03
store double %270, double* %2
br label %275
271: ; preds = %264, %219, %174, %129, %84, %39
%272 = load i8*, i8** %6
%273 = call i32 @freeMem(i8* %272)
%274 = call i32 @errAbort(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str, i64 0, i64 0))
store double 0.000000e+00, double* %2
br label %275
275: ; preds = %271, %265
%276 = load double, double* %2
ret double %276
}

LLVM IR (-O2):
@.str = [30 x i8] c"Not a valid oligo in oligoDg.\00"
define double @oligoDg(i8* %0) {
%2 = tail call i8* @cloneString(i8* %0)
%3 = load i8, i8* %2
%4 = getelementptr inbounds i8, i8* %2, i64 1
switch i8 %3, label %100 [
i8 65, label %5
i8 71, label %11
i8 84, label %8
i8 67, label %14
i8 78, label %77
]
5: ; preds = %37, %52, %67, %85, %1
%6 = phi i32 [ 0, %1 ], [ %38, %37 ], [ %53, %52 ], [ %68, %67 ], [ %86, %85 ]
%7 = phi i8* [ %4, %1 ], [ %36, %37 ], [ %51, %52 ], [ %66, %67 ], [ %84, %85 ]
br label %17
8: ; preds = %24, %54, %69, %87, %1
%9 = phi i32 [ %25, %24 ], [ %55, %54 ], [ %70, %69 ], [ %88, %87 ], [ 0, %1 ]
%10 = phi i8* [ %21, %24 ], [ %51, %54 ], [ %66, %69 ], [ %84, %87 ], [ %4, %1 ]
br label %32
11: ; preds = %26, %41, %71, %89, %1
%12 = phi i32 [ %42, %41 ], [ %72, %71 ], [ %90, %89 ], [ %27, %26 ], [ 0, %1 ]
%13 = phi i8* [ %36, %41 ], [ %66, %71 ], [ %84, %89 ], [ %21, %26 ], [ %4, %1 ]
br label %47
14: ; preds = %28, %43, %58, %91, %1
%15 = phi i32 [ %59, %58 ], [ %92, %91 ], [ %44, %43 ], [ %29, %28 ], [ 0, %1 ]
%16 = phi i8* [ %51, %58 ], [ %84, %91 ], [ %36, %43 ], [ %21, %28 ], [ %4, %1 ]
br label %62
17: ; preds = %5, %22
%18 = phi i32 [ %23, %22 ], [ %6, %5 ]
%19 = phi i8* [ %21, %22 ], [ %7, %5 ]
%20 = load i8, i8* %19
%21 = getelementptr inbounds i8, i8* %19, i64 1
switch i8 %20, label %100 [
i8 65, label %22
i8 84, label %24
i8 71, label %26
i8 67, label %28
i8 78, label %30
i8 0, label %95
]
22: ; preds = %17
%23 = add nsw i32 %18, 1900
br label %17
24: ; preds = %17
%25 = add nsw i32 %18, 1500
br label %8
26: ; preds = %17
%27 = add nsw i32 %18, 1600
br label %11
28: ; preds = %17
%29 = add nsw i32 %18, 1300
br label %14
30: ; preds = %17
%31 = add nsw i32 %18, 1575
br label %77
32: ; preds = %8, %39
%33 = phi i32 [ %40, %39 ], [ %9, %8 ]
%34 = phi i8* [ %36, %39 ], [ %10, %8 ]
%35 = load i8, i8* %34
%36 = getelementptr inbounds i8, i8* %34, i64 1
switch i8 %35, label %100 [
i8 65, label %37
i8 84, label %39
i8 71, label %41
i8 67, label %43
i8 78, label %45
i8 0, label %95
]
37: ; preds = %32
%38 = add nsw i32 %33, 900
br label %5
39: ; preds = %32
%40 = add nsw i32 %33, 1900
br label %32
41: ; preds = %32
%42 = add nsw i32 %33, 1900
br label %11
43: ; preds = %32
%44 = add nsw i32 %33, 1600
br label %14
45: ; preds = %32
%46 = add nsw i32 %33, 1575
br label %77
47: ; preds = %11, %56
%48 = phi i32 [ %57, %56 ], [ %12, %11 ]
%49 = phi i8* [ %51, %56 ], [ %13, %11 ]
%50 = load i8, i8* %49
%51 = getelementptr inbounds i8, i8* %49, i64 1
switch i8 %50, label %100 [
i8 65, label %52
i8 84, label %54
i8 71, label %56
i8 67, label %58
i8 78, label %60
i8 0, label %95
]
52: ; preds = %47
%53 = add nsw i32 %48, 1600
br label %5
54: ; preds = %47
%55 = add nsw i32 %48, 1300
br label %8
56: ; preds = %47
%57 = add nsw i32 %48, 3100
br label %47
58: ; preds = %47
%59 = add nsw i32 %48, 3100
br label %14
60: ; preds = %47
%61 = add nsw i32 %48, 2275
br label %77
62: ; preds = %14, %73
%63 = phi i32 [ %74, %73 ], [ %15, %14 ]
%64 = phi i8* [ %66, %73 ], [ %16, %14 ]
%65 = load i8, i8* %64
%66 = getelementptr inbounds i8, i8* %64, i64 1
switch i8 %65, label %100 [
i8 65, label %67
i8 84, label %69
i8 71, label %71
i8 67, label %73
i8 78, label %75
i8 0, label %95
]
67: ; preds = %62
%68 = add nsw i32 %63, 1900
br label %5
69: ; preds = %62
%70 = add nsw i32 %63, 1600
br label %8
71: ; preds = %62
%72 = add nsw i32 %63, 3600
br label %11
73: ; preds = %62
%74 = add nsw i32 %63, 3100
br label %62
75: ; preds = %62
%76 = add nsw i32 %63, 2550
br label %77
77: ; preds = %30, %45, %60, %75, %1
%78 = phi i32 [ %76, %75 ], [ %61, %60 ], [ %46, %45 ], [ %31, %30 ], [ 0, %1 ]
%79 = phi i8* [ %66, %75 ], [ %51, %60 ], [ %36, %45 ], [ %21, %30 ], [ %4, %1 ]
br label %80
80: ; preds = %77, %93
%81 = phi i32 [ %94, %93 ], [ %78, %77 ]
%82 = phi i8* [ %84, %93 ], [ %79, %77 ]
%83 = load i8, i8* %82
%84 = getelementptr inbounds i8, i8* %82, i64 1
switch i8 %83, label %100 [
i8 65, label %85
i8 84, label %87
i8 71, label %89
i8 67, label %91
i8 78, label %93
i8 0, label %95
]
85: ; preds = %80
%86 = add nsw i32 %81, 1575
br label %5
87: ; preds = %80
%88 = add nsw i32 %81, 1575
br label %8
89: ; preds = %80
%90 = add nsw i32 %81, 2550
br label %11
91: ; preds = %80
%92 = add nsw i32 %81, 2275
br label %14
93: ; preds = %80
%94 = add nsw i32 %81, 1994
br label %80
95: ; preds = %17, %32, %47, %62, %80
%96 = phi i32 [ %81, %80 ], [ %63, %62 ], [ %48, %47 ], [ %33, %32 ], [ %18, %17 ]
%97 = tail call i32 @freeMem(i8* %2)
%98 = sitofp i32 %96 to double
%99 = fdiv double %98, 1.000000e+03
br label %103
100: ; preds = %17, %32, %47, %62, %80, %1
%101 = tail call i32 @freeMem(i8* %2)
%102 = tail call i32 @errAbort(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str, i64 0, i64 0))
br label %103
103: ; preds = %100, %95
%104 = phi double [ %99, %95 ], [ 0.000000e+00, %100 ]
ret double %104
}