#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 */
scalar_t__ isx12(unsigned char);
int look_ahead_test(unsigned char source[], int sourcelen, int position,
                    int current_mode, int gs1) {
  float ascii_count, c40_count, text_count, x12_count, edf_count, b256_count,
      best_count;
  int sp, done, best_scheme;
  char reduced_char;
  if (current_mode == 1) {
    ascii_count = 0.0;
    c40_count = 1.0;
    text_count = 1.0;
    x12_count = 1.0;
    edf_count = 1.0;
    b256_count = 1.25;
  } else {
    ascii_count = 1.0;
    c40_count = 2.0;
    text_count = 2.0;
    x12_count = 2.0;
    edf_count = 2.0;
    b256_count = 2.25;
  }
  switch (current_mode) {
  case 2:
    c40_count = 0.0;
    break;
  case 3:
    text_count = 0.0;
    break;
  case 4:
    x12_count = 0.0;
    break;
  case 5:
    edf_count = 0.0;
    break;
  case 6:
    b256_count = 0.0;
    break;
  }
  for (sp = position; (sp < sourcelen) && (sp <= (position + 8)); sp++) {
    if (source[sp] <= 127) {
      reduced_char = source[sp];
    } else {
      reduced_char = source[sp] - 127;
    }
    if ((source[sp] >= '0') && (source[sp] <= '9')) {
      ascii_count += 0.5;
    } else {
      ascii_count += 1.0;
    }
    if (source[sp] > 127) {
      ascii_count += 1.0;
    }
    done = 0;
    if (reduced_char == ' ') {
      c40_count += (2.0 / 3.0);
      done = 1;
    }
    if ((reduced_char >= '0') && (reduced_char <= '9')) {
      c40_count += (2.0 / 3.0);
      done = 1;
    }
    if ((reduced_char >= 'A') && (reduced_char <= 'Z')) {
      c40_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] > 127) {
      c40_count += (4.0 / 3.0);
    }
    if (done == 0) {
      c40_count += (4.0 / 3.0);
    }
    done = 0;
    if (reduced_char == ' ') {
      text_count += (2.0 / 3.0);
      done = 1;
    }
    if ((reduced_char >= '0') && (reduced_char <= '9')) {
      text_count += (2.0 / 3.0);
      done = 1;
    }
    if ((reduced_char >= 'a') && (reduced_char <= 'z')) {
      text_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] > 127) {
      text_count += (4.0 / 3.0);
    }
    if (done == 0) {
      text_count += (4.0 / 3.0);
    }
    if (isx12(source[sp])) {
      x12_count += (2.0 / 3.0);
    } else {
      x12_count += 4.0;
    }
    done = 0;
    if ((source[sp] >= ' ') && (source[sp] <= '^')) {
      edf_count += (3.0 / 4.0);
    } else {
      edf_count += 6.0;
    }
    if (gs1 && (source[sp] == '[')) {
      edf_count += 6.0;
    }
    if (sp >= (sourcelen - 5)) {
      edf_count += 6.0;
    }
    if (gs1 && (source[sp] == '[')) {
      b256_count += 4.0;
    } else {
      b256_count += 1.0;
    }
  }
  best_count = ascii_count;
  best_scheme = 1;
  if (b256_count <= best_count) {
    best_count = b256_count;
    best_scheme = 6;
  }
  if (edf_count <= best_count) {
    best_count = edf_count;
    best_scheme = 5;
  }
  if (text_count <= best_count) {
    best_count = text_count;
    best_scheme = 3;
  }
  if (x12_count <= best_count) {
    best_count = x12_count;
    best_scheme = 4;
  }
  if (c40_count <= best_count) {
    best_count = c40_count;
    best_scheme = 2;
  }
  return best_scheme;
}


x86 assembly (clang, -O0):
<look_ahead_test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
cmpl   $0x1,-0x14(%rbp)
jne    1181 <look_ahead_test+0x71>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xec5(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  0xeb8(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0xeab(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xe9e(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  0xe95(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    11cf <look_ahead_test+0xbf>
movss  0xe7f(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xe6e(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  0xe61(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0xe54(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xe47(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  0xe36(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x14(%rbp),%eax
add    $0xfffffffe,%eax
mov    %eax,%ecx
mov    %rcx,-0x50(%rbp)
sub    $0x4,%eax
ja     1234 <look_ahead_test+0x124>
mov    -0x50(%rbp),%rax
lea    0xe59(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
xorps  %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
jmp    1234 <look_ahead_test+0x124>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
jmp    1234 <look_ahead_test+0x124>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    1234 <look_ahead_test+0x124>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    1234 <look_ahead_test+0x124>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%ecx
xor    %eax,%eax
cmp    -0xc(%rbp),%ecx
mov    %al,-0x51(%rbp)
jge    125c <look_ahead_test+0x14c>
mov    -0x38(%rbp),%eax
mov    -0x10(%rbp),%ecx
add    $0x8,%ecx
cmp    %ecx,%eax
setle  %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    126c <look_ahead_test+0x15c>
jmp    1715 <look_ahead_test+0x605>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jg     1294 <look_ahead_test+0x184>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x41(%rbp)
jmp    12a6 <look_ahead_test+0x196>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x7f,%eax
mov    %al,-0x41(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     12f3 <look_ahead_test+0x1e3>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     12f3 <look_ahead_test+0x1e3>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd37(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
jmp    1311 <look_ahead_test+0x201>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd0c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jle    1344 <look_ahead_test+0x234>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcd9(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
movl   $0x0,-0x3c(%rbp)
movsbl -0x41(%rbp),%eax
cmp    $0x20,%eax
jne    137d <look_ahead_test+0x26d>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcb7(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x1,-0x3c(%rbp)
movsbl -0x41(%rbp),%eax
cmp    $0x30,%eax
jl     13bc <look_ahead_test+0x2ac>
movsbl -0x41(%rbp),%eax
cmp    $0x39,%eax
jg     13bc <look_ahead_test+0x2ac>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc78(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x1,-0x3c(%rbp)
movsbl -0x41(%rbp),%eax
cmp    $0x41,%eax
jl     13fb <look_ahead_test+0x2eb>
movsbl -0x41(%rbp),%eax
cmp    $0x5a,%eax
jg     13fb <look_ahead_test+0x2eb>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc39(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x1,-0x3c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jle    142e <look_ahead_test+0x31e>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc07(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
cmpl   $0x0,-0x3c(%rbp)
jne    1456 <look_ahead_test+0x346>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbdf(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x3c(%rbp)
movsbl -0x41(%rbp),%eax
cmp    $0x20,%eax
jne    148f <look_ahead_test+0x37f>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xba5(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x1,-0x3c(%rbp)
movsbl -0x41(%rbp),%eax
cmp    $0x30,%eax
jl     14ce <look_ahead_test+0x3be>
movsbl -0x41(%rbp),%eax
cmp    $0x39,%eax
jg     14ce <look_ahead_test+0x3be>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb66(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x1,-0x3c(%rbp)
movsbl -0x41(%rbp),%eax
cmp    $0x61,%eax
jl     150d <look_ahead_test+0x3fd>
movsbl -0x41(%rbp),%eax
cmp    $0x7a,%eax
jg     150d <look_ahead_test+0x3fd>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb27(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x1,-0x3c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jle    1540 <look_ahead_test+0x430>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xaf5(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
cmpl   $0x0,-0x3c(%rbp)
jne    1568 <look_ahead_test+0x458>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xacd(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%edi
call   1030 <isx12@plt>
cmp    $0x0,%rax
je     15a6 <look_ahead_test+0x496>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa8c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    15c4 <look_ahead_test+0x4b4>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa79(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jl     1618 <look_ahead_test+0x508>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x5e,%eax
jg     1618 <look_ahead_test+0x508>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa3a(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    1636 <look_ahead_test+0x526>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa0f(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     1673 <look_ahead_test+0x563>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
jne    1673 <look_ahead_test+0x563>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x9d2(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x38(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x5,%ecx
cmp    %ecx,%eax
jl     16a2 <look_ahead_test+0x592>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x9a3(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     16e4 <look_ahead_test+0x5d4>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
jne    16e4 <look_ahead_test+0x5d4>
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x95e(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    1702 <look_ahead_test+0x5f2>
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x91b(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    1707 <look_ahead_test+0x5f7>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    123a <look_ahead_test+0x12a>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x1,-0x40(%rbp)
movss  -0x30(%rbp),%xmm1
movss  -0x34(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     174a <look_ahead_test+0x63a>
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x6,-0x40(%rbp)
movss  -0x2c(%rbp),%xmm1
movss  -0x34(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     176e <look_ahead_test+0x65e>
movss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x5,-0x40(%rbp)
movss  -0x24(%rbp),%xmm1
movss  -0x34(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1792 <look_ahead_test+0x682>
movss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x3,-0x40(%rbp)
movss  -0x28(%rbp),%xmm1
movss  -0x34(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     17b6 <look_ahead_test+0x6a6>
movss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x4,-0x40(%rbp)
movss  -0x20(%rbp),%xmm1
movss  -0x34(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     17da <look_ahead_test+0x6ca>
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x2,-0x40(%rbp)
mov    -0x40(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<look_ahead_test>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r8d,0x8(%rsp)
mov    %rdi,%r14
xor    %eax,%eax
xorps  %xmm0,%xmm0
cmp    $0x1,%ecx
sete   %dil
je     113c <look_ahead_test+0x2c>
movss  0xec4(%rip),%xmm0
mov    %dil,%al
lea    0xeca(%rip),%rdi
movss  (%rdi,%rax,4),%xmm9
lea    0xec5(%rip),%rdi
movss  (%rdi,%rax,4),%xmm2
add    $0xfffffffe,%ecx
cmp    $0x4,%ecx
ja     11b1 <look_ahead_test+0xa1>
lea    0xed9(%rip),%rax
movslq (%rax,%rcx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
xorps  %xmm5,%xmm5
jmp    11b5 <look_ahead_test+0xa5>
xorps  %xmm6,%xmm6
movaps %xmm9,%xmm5
jmp    11b9 <look_ahead_test+0xa9>
xorps  %xmm7,%xmm7
movaps %xmm9,%xmm5
movaps %xmm9,%xmm6
cmp    %esi,%edx
jge    11a3 <look_ahead_test+0x93>
jmp    11c1 <look_ahead_test+0xb1>
movaps %xmm9,%xmm5
movaps %xmm9,%xmm6
movaps %xmm9,%xmm7
xorps  %xmm9,%xmm9
cmp    %esi,%edx
jl     11c1 <look_ahead_test+0xb1>
movaps %xmm0,%xmm4
movaps %xmm7,%xmm1
jmp    14c0 <look_ahead_test+0x3b0>
xorps  %xmm2,%xmm2
movaps %xmm9,%xmm5
movaps %xmm9,%xmm6
movaps %xmm9,%xmm7
cmp    %esi,%edx
jge    11a3 <look_ahead_test+0x93>
lea    -0x5(%rsi),%eax
movslq %edx,%rbp
add    $0x8,%edx
movslq %eax,%r15
movslq %esi,%r12
movslq %edx,%r13
movsd  0xe45(%rip),%xmm3
movsd  0xe44(%rip),%xmm8
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl (%r14,%rbp,1),%edi
lea    -0x7f(%rdi),%eax
movzbl %al,%eax
test   %dil,%dil
cmovns %edi,%eax
lea    -0x30(%rax),%r8d
cmp    $0x20,%al
je     13d0 <look_ahead_test+0x2c0>
je     13e8 <look_ahead_test+0x2d8>
cmp    $0xa,%r8b
jb     1404 <look_ahead_test+0x2f4>
jae    1231 <look_ahead_test+0x121>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm3,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
lea    -0x61(%rax),%edx
cmp    $0x1a,%dl
jae    124b <look_ahead_test+0x13b>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm3,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
test   %dil,%dil
jns    1263 <look_ahead_test+0x153>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm8,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
lea    -0x41(%rax),%esi
cmp    $0x1a,%sil
jae    127e <look_ahead_test+0x16e>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm3,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
test   %dil,%dil
jns    1296 <look_ahead_test+0x186>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm8,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
lea    -0x30(%rdi),%ebx
xor    %ecx,%ecx
cmp    $0xa,%bl
setb   %cl
lea    0xd88(%rip),%rbx
addss  (%rbx,%rcx,4),%xmm0
movaps %xmm0,%xmm3
addss  0xd48(%rip),%xmm3
test   %dil,%dil
js     12c0 <look_ahead_test+0x1b0>
movaps %xmm0,%xmm3
cmp    $0xa,%r8b
setb   %cl
cmp    $0x20,%al
sete   %al
or     %cl,%al
movaps %xmm5,%xmm0
test   %al,%al
je     1430 <look_ahead_test+0x320>
movaps %xmm6,%xmm1
je     1449 <look_ahead_test+0x339>
cmp    $0x1a,%dl
jb     12ea <look_ahead_test+0x1da>
movaps %xmm1,%xmm6
movaps %xmm3,0x20(%rsp)
movss  %xmm7,0xc(%rsp)
movaps %xmm6,0x10(%rsp)
movaps %xmm2,0x30(%rsp)
movaps %xmm9,0x40(%rsp)
cmp    $0x1a,%sil
jb     130e <look_ahead_test+0x1fe>
movaps %xmm0,%xmm5
movss  %xmm5,0x4(%rsp)
call   1030 <isx12@plt>
movss  0xc(%rsp),%xmm0
movaps %xmm0,%xmm1
addss  0xcda(%rip),%xmm1
test   %rax,%rax
movsd  0xceb(%rip),%xmm3
je     1346 <look_ahead_test+0x236>
cvtss2sd %xmm0,%xmm0
addsd  %xmm3,%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movzbl (%r14,%rbp,1),%eax
lea    -0x20(%rax),%ecx
xor    %edx,%edx
cmp    $0x3f,%cl
setb   %dl
movaps 0x40(%rsp),%xmm9
lea    0xcd5(%rip),%rcx
addss  (%rcx,%rdx,4),%xmm9
cmpl   $0x0,0x8(%rsp)
movaps 0x30(%rsp),%xmm2
movaps 0x20(%rsp),%xmm4
je     1470 <look_ahead_test+0x360>
cmp    $0x5b,%al
movss  0x4(%rsp),%xmm5
movaps 0x10(%rsp),%xmm6
movsd  0xc94(%rip),%xmm8
jne    139f <look_ahead_test+0x28f>
addss  0xc69(%rip),%xmm9
cmp    %r15,%rbp
jl     13ad <look_ahead_test+0x29d>
addss  0xc5b(%rip),%xmm9
movss  0xc4f(%rip),%xmm0
cmp    $0x5b,%al
jne    1499 <look_ahead_test+0x389>
jmp    14a1 <look_ahead_test+0x391>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm3,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
jne    1213 <look_ahead_test+0x103>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm3,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
cmp    $0xa,%r8b
jae    121d <look_ahead_test+0x10d>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm3,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
jb     121f <look_ahead_test+0x10f>
jmp    1231 <look_ahead_test+0x121>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtss2sd %xmm5,%xmm0
addsd  %xmm8,%xmm0
cvtsd2ss %xmm0,%xmm0
movaps %xmm6,%xmm1
jne    12e2 <look_ahead_test+0x1d2>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm8,%xmm1
cvtsd2ss %xmm1,%xmm1
cmp    $0x1a,%dl
jae    12e7 <look_ahead_test+0x1d7>
jmp    12ea <look_ahead_test+0x1da>
nopw   0x0(%rax,%rax,1)
movaps %xmm9,%xmm0
addss  0xb8c(%rip),%xmm0
cmp    %r15,%rbp
movss  0x4(%rsp),%xmm5
movaps 0x10(%rsp),%xmm6
movsd  0xb95(%rip),%xmm8
jl     1499 <look_ahead_test+0x389>
movaps %xmm0,%xmm9
movss  0xb5f(%rip),%xmm0
addss  %xmm0,%xmm2
lea    0x1(%rbp),%rax
cmp    %r12,%rax
jge    14c0 <look_ahead_test+0x3b0>
movaps %xmm1,%xmm7
movaps %xmm4,%xmm0
cmp    %r13,%rbp
mov    %rax,%rbp
jl     11f0 <look_ahead_test+0xe0>
xor    %eax,%eax
ucomiss %xmm2,%xmm4
setae  %al
movaps %xmm2,%xmm0
cmpnless %xmm4,%xmm0
andps  %xmm0,%xmm4
andnps %xmm2,%xmm0
orps   %xmm4,%xmm0
ucomiss %xmm9,%xmm0
lea    0x1(%rax,%rax,4),%eax
movaps %xmm9,%xmm2
cmpnless %xmm0,%xmm2
movaps %xmm2,%xmm3
andps  %xmm0,%xmm3
andnps %xmm9,%xmm2
orps   %xmm3,%xmm2
mov    $0x5,%ecx
cmovb  %eax,%ecx
ucomiss %xmm6,%xmm2
movaps %xmm6,%xmm0
cmpnless %xmm2,%xmm0
movaps %xmm0,%xmm3
andps  %xmm2,%xmm3
andnps %xmm6,%xmm0
mov    $0x3,%eax
cmovb  %ecx,%eax
orps   %xmm3,%xmm0
ucomiss %xmm1,%xmm0
movaps %xmm1,%xmm2
cmpnless %xmm0,%xmm2
movaps %xmm2,%xmm3
andps  %xmm0,%xmm3
andnps %xmm1,%xmm2
orps   %xmm3,%xmm2
mov    $0x4,%ecx
cmovb  %eax,%ecx
ucomiss %xmm5,%xmm2
mov    $0x2,%eax
cmovb  %ecx,%eax
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @look_ahead_test(i8* nocapture %0, i32 %1, i32 %2, i32 %3, i32 %4) {
%6 = icmp eq i32 %3, 1
%7 = select i1 %6, float 0.000000e+00, float 1.000000e+00
%8 = select i1 %6, float 1.000000e+00, float 2.000000e+00
%9 = select i1 %6, float 1.250000e+00, float 2.250000e+00
switch i32 %3, label %15 [
i32 2, label %10
i32 3, label %11
i32 4, label %12
i32 5, label %13
i32 6, label %14
]
10: ; preds = %5
br label %15
11: ; preds = %5
br label %15
12: ; preds = %5
br label %15
13: ; preds = %5
br label %15
14: ; preds = %5
br label %15
15: ; preds = %5, %14, %13, %12, %11, %10
%16 = phi float [ %8, %5 ], [ %8, %14 ], [ %8, %13 ], [ %8, %12 ], [ %8, %11 ], [ 0.000000e+00, %10 ]
%17 = phi float [ %8, %5 ], [ %8, %14 ], [ %8, %13 ], [ %8, %12 ], [ 0.000000e+00, %11 ], [ %8, %10 ]
%18 = phi float [ %8, %5 ], [ %8, %14 ], [ %8, %13 ], [ 0.000000e+00, %12 ], [ %8, %11 ], [ %8, %10 ]
%19 = phi float [ %8, %5 ], [ %8, %14 ], [ 0.000000e+00, %13 ], [ %8, %12 ], [ %8, %11 ], [ %8, %10 ]
%20 = phi float [ %9, %5 ], [ 0.000000e+00, %14 ], [ %9, %13 ], [ %9, %12 ], [ %9, %11 ], [ %9, %10 ]
%21 = icmp slt i32 %2, %1
br i1 %21, label %22, label %133
22: ; preds = %15
%23 = add nsw i32 %2, 8
%24 = icmp eq i32 %4, 0
%25 = add nsw i32 %1, -5
%26 = sext i32 %2 to i64
%27 = sext i32 %25 to i64
%28 = sext i32 %1 to i64
%29 = sext i32 %23 to i64
br label %30
30: ; preds = %22, %125
%31 = phi i64 [ %26, %22 ], [ %129, %125 ]
%32 = phi float [ %20, %22 ], [ %128, %125 ]
%33 = phi float [ %19, %22 ], [ %127, %125 ]
%34 = phi float [ %18, %22 ], [ %106, %125 ]
%35 = phi float [ %17, %22 ], [ %99, %125 ]
%36 = phi float [ %16, %22 ], [ %76, %125 ]
%37 = phi float [ %7, %22 ], [ %49, %125 ]
%38 = getelementptr inbounds i8, i8* %0, i64 %31
%39 = load i8, i8* %38
%40 = icmp sgt i8 %39, -1
%41 = add i8 %39, -127
%42 = select i1 %40, i8 %39, i8 %41
%43 = add i8 %39, -48
%44 = icmp ult i8 %43, 10
%45 = select i1 %44, float 5.000000e-01, float 1.000000e+00
%46 = fadd float %37, %45
%47 = icmp slt i8 %39, 0
%48 = fadd float %46, 1.000000e+00
%49 = select i1 %47, float %48, float %46
%50 = icmp eq i8 %42, 32
%51 = fpext float %36 to double
%52 = fadd double %51, 0x3FE5555555555555
%53 = fptrunc double %52 to float
%54 = select i1 %50, float %53, float %36
%55 = add i8 %42, -48
%56 = icmp ult i8 %55, 10
%57 = fpext float %54 to double
%58 = fadd double %57, 0x3FE5555555555555
%59 = fptrunc double %58 to float
%60 = select i1 %56, float %59, float %54
%61 = or i1 %50, %56
%62 = add i8 %42, -65
%63 = icmp ult i8 %62, 26
%64 = fpext float %60 to double
%65 = fadd double %64, 0x3FE5555555555555
%66 = fptrunc double %65 to float
%67 = select i1 %63, float %66, float %60
%68 = fpext float %67 to double
%69 = fadd double %68, 0x3FF5555555555555
%70 = fptrunc double %69 to float
%71 = select i1 %47, float %70, float %67
%72 = select i1 %63, i1 true, i1 %61
%73 = fpext float %71 to double
%74 = fadd double %73, 0x3FF5555555555555
%75 = fptrunc double %74 to float
%76 = select i1 %72, float %71, float %75
%77 = fpext float %35 to double
%78 = fadd double %77, 0x3FE5555555555555
%79 = fptrunc double %78 to float
%80 = select i1 %50, float %79, float %35
%81 = fpext float %80 to double
%82 = fadd double %81, 0x3FE5555555555555
%83 = fptrunc double %82 to float
%84 = select i1 %56, float %83, float %80
%85 = add i8 %42, -97
%86 = icmp ult i8 %85, 26
%87 = fpext float %84 to double
%88 = fadd double %87, 0x3FE5555555555555
%89 = fptrunc double %88 to float
%90 = select i1 %86, float %89, float %84
%91 = select i1 %86, i1 true, i1 %61
%92 = fpext float %90 to double
%93 = fadd double %92, 0x3FF5555555555555
%94 = fptrunc double %93 to float
%95 = select i1 %47, float %94, float %90
%96 = fpext float %95 to double
%97 = fadd double %96, 0x3FF5555555555555
%98 = fptrunc double %97 to float
%99 = select i1 %91, float %95, float %98
%100 = tail call i64 @isx12(i8 zeroext %39)
%101 = icmp eq i64 %100, 0
%102 = fpext float %34 to double
%103 = fadd double %102, 0x3FE5555555555555
%104 = fptrunc double %103 to float
%105 = fadd float %34, 4.000000e+00
%106 = select i1 %101, float %105, float %104
%107 = load i8, i8* %38
%108 = add i8 %107, -32
%109 = icmp ult i8 %108, 63
%110 = select i1 %109, float 7.500000e-01, float 6.000000e+00
%111 = fadd float %33, %110
br i1 %24, label %112, label %116
112: ; preds = %30
%113 = icmp slt i64 %31, %27
%114 = fadd float %111, 6.000000e+00
%115 = select i1 %113, float %111, float %114
br label %123
116: ; preds = %30
%117 = icmp eq i8 %107, 91
%118 = fadd float %111, 6.000000e+00
%119 = select i1 %117, float %118, float %111
%120 = icmp slt i64 %31, %27
%121 = fadd float %119, 6.000000e+00
%122 = select i1 %120, float %119, float %121
br i1 %117, label %125, label %123
123: ; preds = %112, %116
%124 = phi float [ %115, %112 ], [ %122, %116 ]
br label %125
125: ; preds = %116, %123
%126 = phi float [ 1.000000e+00, %123 ], [ 4.000000e+00, %116 ]
%127 = phi float [ %124, %123 ], [ %122, %116 ]
%128 = fadd float %32, %126
%129 = add nsw i64 %31, 1
%130 = icmp slt i64 %129, %28
%131 = icmp slt i64 %31, %29
%132 = select i1 %130, i1 %131, i1 false
br i1 %132, label %30, label %133
133: ; preds = %125, %15
%134 = phi float [ %7, %15 ], [ %49, %125 ]
%135 = phi float [ %16, %15 ], [ %76, %125 ]
%136 = phi float [ %17, %15 ], [ %99, %125 ]
%137 = phi float [ %18, %15 ], [ %106, %125 ]
%138 = phi float [ %19, %15 ], [ %127, %125 ]
%139 = phi float [ %20, %15 ], [ %128, %125 ]
%140 = fcmp ugt float %139, %134
%141 = select i1 %140, float %134, float %139
%142 = select i1 %140, i32 1, i32 6
%143 = fcmp ugt float %138, %141
%144 = select i1 %143, float %141, float %138
%145 = select i1 %143, i32 %142, i32 5
%146 = fcmp ugt float %136, %144
%147 = select i1 %146, float %144, float %136
%148 = select i1 %146, i32 %145, i32 3
%149 = fcmp ugt float %137, %147
%150 = select i1 %149, float %147, float %137
%151 = select i1 %149, i32 %148, i32 4
%152 = fcmp ugt float %135, %150
%153 = select i1 %152, i32 %151, i32 2
ret i32 %153
}