#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__ dq4bi(unsigned char *, int, int);
float froundup(float);
int c1_look_ahead_test(unsigned char source[], int sourcelen, int position,
                       int current_mode, int gs1) {
  float ascii_count, c40_count, text_count, edi_count, byte_count;
  char reduced_char;
  int done, best_scheme, best_count, sp;
  if (current_mode == 1) {
    ascii_count = 0.0;
    c40_count = 1.0;
    text_count = 1.0;
    edi_count = 1.0;
    byte_count = 2.0;
  } else {
    ascii_count = 1.0;
    c40_count = 2.0;
    text_count = 2.0;
    edi_count = 2.0;
    byte_count = 3.0;
  }
  switch (current_mode) {
  case 2:
    c40_count = 0.0;
    break;
  case 4:
    text_count = 0.0;
    break;
  case 6:
    byte_count = 0.0;
    break;
  case 5:
    edi_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 = froundup(ascii_count);
      if (source[sp] > 127) {
        ascii_count += 2.0;
      } else {
        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);
    }
    done = 0;
    if (source[sp] == 13) {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] == '*') {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] == '>') {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] == ' ') {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if ((source[sp] >= '0') && (source[sp] <= '9')) {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if ((source[sp] >= 'A') && (source[sp] <= 'Z')) {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] > 127) {
      edi_count += (13.0 / 3.0);
    } else {
      if (done == 0) {
        edi_count += (10.0 / 3.0);
      }
    }
    if (gs1 && (source[sp] == '[')) {
      byte_count += 3.0;
    } else {
      byte_count += 1.0;
    }
  }
  ascii_count = froundup(ascii_count);
  c40_count = froundup(c40_count);
  text_count = froundup(text_count);
  edi_count = froundup(edi_count);
  byte_count = froundup(byte_count);
  best_scheme = 1;
  if (sp == sourcelen) {
    best_count = edi_count;
    if (text_count <= best_count) {
      best_count = text_count;
      best_scheme = 4;
    }
    if (c40_count <= best_count) {
      best_count = c40_count;
      best_scheme = 2;
    }
    if (ascii_count <= best_count) {
      best_count = ascii_count;
      best_scheme = 1;
    }
    if (byte_count <= best_count) {
      best_count = byte_count;
      best_scheme = 6;
    }
  } else {
    if (((edi_count + 1.0 <= ascii_count) && (edi_count + 1.0 <= c40_count)) &&
        ((edi_count + 1.0 <= byte_count) && (edi_count + 1.0 <= text_count))) {
      best_scheme = 5;
    }
    if ((c40_count + 1.0 <= ascii_count) && (c40_count + 1.0 <= text_count)) {
      if (c40_count < edi_count) {
        best_scheme = 2;
      } else {
        done = 0;
        if (c40_count == edi_count) {
          if (dq4bi(source, sourcelen, position)) {
            best_scheme = 5;
          } else {
            best_scheme = 2;
          }
        }
      }
    }
    if (((text_count + 1.0 <= ascii_count) &&
         (text_count + 1.0 <= c40_count)) &&
        ((text_count + 1.0 <= byte_count) && (text_count + 1.0 <= edi_count))) {
      best_scheme = 4;
    }
    if (((ascii_count + 1.0 <= byte_count) &&
         (ascii_count + 1.0 <= c40_count)) &&
        ((ascii_count + 1.0 <= text_count) &&
         (ascii_count + 1.0 <= edi_count))) {
      best_scheme = 1;
    }
    if (((byte_count + 1.0 <= ascii_count) &&
         (byte_count + 1.0 <= c40_count)) &&
        ((byte_count + 1.0 <= text_count) && (byte_count + 1.0 <= edi_count))) {
      best_scheme = 6;
    }
  }
  return best_scheme;
}


x86 assembly (clang, -O0):
<c1_look_ahead_test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%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    1184 <c1_look_ahead_test+0x64>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xeb5(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  0xea8(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0xe9b(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xe8a(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    11c5 <c1_look_ahead_test+0xa5>
movss  0xe7c(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xe6b(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  0xe5e(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0xe51(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xe40(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x14(%rbp),%eax
add    $0xfffffffe,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x4,%eax
ja     121d <c1_look_ahead_test+0xfd>
mov    -0x48(%rbp),%rax
lea    0xe6b(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
xorps  %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
jmp    121d <c1_look_ahead_test+0xfd>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
jmp    121d <c1_look_ahead_test+0xfd>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    121d <c1_look_ahead_test+0xfd>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%ecx
xor    %eax,%eax
cmp    -0xc(%rbp),%ecx
mov    %al,-0x49(%rbp)
jge    1245 <c1_look_ahead_test+0x125>
mov    -0x40(%rbp),%eax
mov    -0x10(%rbp),%ecx
add    $0x8,%ecx
cmp    %ecx,%eax
setle  %al
mov    %al,-0x49(%rbp)
mov    -0x49(%rbp),%al
test   $0x1,%al
jne    1255 <c1_look_ahead_test+0x135>
jmp    17cf <c1_look_ahead_test+0x6af>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jg     127d <c1_look_ahead_test+0x15d>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x2d(%rbp)
jmp    128f <c1_look_ahead_test+0x16f>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x7f,%eax
mov    %al,-0x2d(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     12dc <c1_look_ahead_test+0x1bc>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     12dc <c1_look_ahead_test+0x1bc>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd56(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
jmp    1346 <c1_look_ahead_test+0x226>
movss  -0x1c(%rbp),%xmm0
call   1030 <froundup@plt>
movss  %xmm0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jle    1323 <c1_look_ahead_test+0x203>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd07(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
jmp    1341 <c1_look_ahead_test+0x221>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcdc(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
jmp    1346 <c1_look_ahead_test+0x226>
movl   $0x0,-0x34(%rbp)
movsbl -0x2d(%rbp),%eax
cmp    $0x20,%eax
jne    137f <c1_look_ahead_test+0x25f>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcbd(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x1,-0x34(%rbp)
movsbl -0x2d(%rbp),%eax
cmp    $0x30,%eax
jl     13be <c1_look_ahead_test+0x29e>
movsbl -0x2d(%rbp),%eax
cmp    $0x39,%eax
jg     13be <c1_look_ahead_test+0x29e>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc7e(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x1,-0x34(%rbp)
movsbl -0x2d(%rbp),%eax
cmp    $0x41,%eax
jl     13fd <c1_look_ahead_test+0x2dd>
movsbl -0x2d(%rbp),%eax
cmp    $0x5a,%eax
jg     13fd <c1_look_ahead_test+0x2dd>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc3f(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jle    1430 <c1_look_ahead_test+0x310>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc0d(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
cmpl   $0x0,-0x34(%rbp)
jne    1458 <c1_look_ahead_test+0x338>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbe5(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x34(%rbp)
movsbl -0x2d(%rbp),%eax
cmp    $0x20,%eax
jne    1491 <c1_look_ahead_test+0x371>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbab(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x1,-0x34(%rbp)
movsbl -0x2d(%rbp),%eax
cmp    $0x30,%eax
jl     14d0 <c1_look_ahead_test+0x3b0>
movsbl -0x2d(%rbp),%eax
cmp    $0x39,%eax
jg     14d0 <c1_look_ahead_test+0x3b0>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb6c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x1,-0x34(%rbp)
movsbl -0x2d(%rbp),%eax
cmp    $0x61,%eax
jl     150f <c1_look_ahead_test+0x3ef>
movsbl -0x2d(%rbp),%eax
cmp    $0x7a,%eax
jg     150f <c1_look_ahead_test+0x3ef>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb2d(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jle    1542 <c1_look_ahead_test+0x422>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xafb(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
cmpl   $0x0,-0x34(%rbp)
jne    156a <c1_look_ahead_test+0x44a>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xad3(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
jne    15ab <c1_look_ahead_test+0x48b>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa91(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    15e5 <c1_look_ahead_test+0x4c5>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa57(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x3e,%eax
jne    161f <c1_look_ahead_test+0x4ff>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa1d(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1659 <c1_look_ahead_test+0x539>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x9e3(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     16a8 <c1_look_ahead_test+0x588>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     16a8 <c1_look_ahead_test+0x588>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x994(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     16f7 <c1_look_ahead_test+0x5d7>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jg     16f7 <c1_look_ahead_test+0x5d7>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x945(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jle    172f <c1_look_ahead_test+0x60f>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x923(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    175c <c1_look_ahead_test+0x63c>
cmpl   $0x0,-0x34(%rbp)
jne    1757 <c1_look_ahead_test+0x637>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x8ee(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    175c <c1_look_ahead_test+0x63c>
cmpl   $0x0,-0x18(%rbp)
je     179e <c1_look_ahead_test+0x67e>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
jne    179e <c1_look_ahead_test+0x67e>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x8bc(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    17bc <c1_look_ahead_test+0x69c>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x861(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    17c1 <c1_look_ahead_test+0x6a1>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1223 <c1_look_ahead_test+0x103>
movss  -0x1c(%rbp),%xmm0
call   1030 <froundup@plt>
movss  %xmm0,-0x1c(%rbp)
movss  -0x20(%rbp),%xmm0
call   1030 <froundup@plt>
movss  %xmm0,-0x20(%rbp)
movss  -0x24(%rbp),%xmm0
call   1030 <froundup@plt>
movss  %xmm0,-0x24(%rbp)
movss  -0x28(%rbp),%xmm0
call   1030 <froundup@plt>
movss  %xmm0,-0x28(%rbp)
movss  -0x2c(%rbp),%xmm0
call   1030 <froundup@plt>
movss  %xmm0,-0x2c(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    18c2 <c1_look_ahead_test+0x7a2>
cvttss2si -0x28(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movss  -0x24(%rbp),%xmm1
cvtsi2ssl -0x3c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1857 <c1_look_ahead_test+0x737>
cvttss2si -0x24(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x4,-0x38(%rbp)
movss  -0x20(%rbp),%xmm1
cvtsi2ssl -0x3c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1879 <c1_look_ahead_test+0x759>
cvttss2si -0x20(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x2,-0x38(%rbp)
movss  -0x1c(%rbp),%xmm1
cvtsi2ssl -0x3c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     189b <c1_look_ahead_test+0x77b>
cvttss2si -0x1c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x38(%rbp)
movss  -0x2c(%rbp),%xmm1
cvtsi2ssl -0x3c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     18bd <c1_look_ahead_test+0x79d>
cvttss2si -0x2c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x6,-0x38(%rbp)
jmp    1c29 <c1_look_ahead_test+0xb09>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x73d(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1969 <c1_look_ahead_test+0x849>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x715(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1969 <c1_look_ahead_test+0x849>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x6ed(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1969 <c1_look_ahead_test+0x849>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x6c5(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1969 <c1_look_ahead_test+0x849>
movl   $0x5,-0x38(%rbp)
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x696(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1a2f <c1_look_ahead_test+0x90f>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x66e(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1a2f <c1_look_ahead_test+0x90f>
movss  -0x20(%rbp),%xmm1
movss  -0x28(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    19d8 <c1_look_ahead_test+0x8b8>
movl   $0x2,-0x38(%rbp)
jmp    1a2a <c1_look_ahead_test+0x90a>
movl   $0x0,-0x34(%rbp)
movss  -0x20(%rbp),%xmm0
ucomiss -0x28(%rbp),%xmm0
jne    1a25 <c1_look_ahead_test+0x905>
jp     1a25 <c1_look_ahead_test+0x905>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
call   1040 <dq4bi@plt>
cmp    $0x0,%rax
je     1a19 <c1_look_ahead_test+0x8f9>
movl   $0x5,-0x38(%rbp)
jmp    1a20 <c1_look_ahead_test+0x900>
movl   $0x2,-0x38(%rbp)
jmp    1a25 <c1_look_ahead_test+0x905>
jmp    1a2a <c1_look_ahead_test+0x90a>
jmp    1a2f <c1_look_ahead_test+0x90f>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x5d0(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1ad6 <c1_look_ahead_test+0x9b6>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x5a8(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1ad6 <c1_look_ahead_test+0x9b6>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x580(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1ad6 <c1_look_ahead_test+0x9b6>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x558(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1ad6 <c1_look_ahead_test+0x9b6>
movl   $0x4,-0x38(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x529(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1b7d <c1_look_ahead_test+0xa5d>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x501(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1b7d <c1_look_ahead_test+0xa5d>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x4d9(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1b7d <c1_look_ahead_test+0xa5d>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x4b1(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1b7d <c1_look_ahead_test+0xa5d>
movl   $0x1,-0x38(%rbp)
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x482(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1c24 <c1_look_ahead_test+0xb04>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x45a(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1c24 <c1_look_ahead_test+0xb04>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x432(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1c24 <c1_look_ahead_test+0xb04>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x40a(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1c24 <c1_look_ahead_test+0xb04>
movl   $0x6,-0x38(%rbp)
jmp    1c29 <c1_look_ahead_test+0xb09>
mov    -0x38(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<c1_look_ahead_test>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rdi,%r14
xor    %eax,%eax
xorps  %xmm0,%xmm0
cmp    $0x1,%ecx
sete   %bl
je     1146 <c1_look_ahead_test+0x26>
movss  0xeba(%rip),%xmm0
mov    %bl,%al
lea    0xec1(%rip),%rdi
movss  (%rdi,%rax,4),%xmm4
lea    0xebd(%rip),%rdi
movss  (%rdi,%rax,4),%xmm3
add    $0xfffffffe,%ecx
cmp    $0x4,%ecx
ja     1199 <c1_look_ahead_test+0x79>
lea    0xee1(%rip),%rax
movslq (%rax,%rcx,4),%rcx
add    %rax,%rcx
movaps %xmm4,%xmm6
movaps %xmm4,%xmm5
jmp    *%rcx
xorps  %xmm6,%xmm6
jmp    119c <c1_look_ahead_test+0x7c>
xorps  %xmm5,%xmm5
movaps %xmm4,%xmm6
jmp    119f <c1_look_ahead_test+0x7f>
movaps %xmm4,%xmm6
movaps %xmm4,%xmm5
xorps  %xmm4,%xmm4
jmp    119f <c1_look_ahead_test+0x7f>
xorps  %xmm3,%xmm3
movaps %xmm4,%xmm6
movaps %xmm4,%xmm5
cmp    %esi,%edx
mov    %rdx,0x40(%rsp)
mov    %esi,0x38(%rsp)
jge    150a <c1_look_ahead_test+0x3ea>
lea    0x8(%rdx),%eax
movslq %edx,%r12
movslq %esi,%r13
movslq %eax,%rsi
movsd  0xe5c(%rip),%xmm7
movsd  0xe5b(%rip),%xmm8
nopl   (%rax)
movzbl (%r14,%r12,1),%eax
lea    -0x7f(%rax),%ecx
test   %al,%al
movzbl %cl,%r15d
cmovns %eax,%r15d
lea    -0x30(%rax),%ecx
cmp    $0x9,%cl
ja     1200 <c1_look_ahead_test+0xe0>
addss  0xe16(%rip),%xmm0
jmp    126b <c1_look_ahead_test+0x14b>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %rsi,%rbp
movss  %xmm6,(%rsp)
movss  %xmm5,0x8(%rsp)
movss  %xmm4,0x20(%rsp)
mov    %r8d,%ebx
movss  %xmm3,0x10(%rsp)
call   1030 <froundup@plt>
movzbl (%r14,%r12,1),%eax
test   %al,%al
js     1235 <c1_look_ahead_test+0x115>
addss  0xdcd(%rip),%xmm0
jmp    123d <c1_look_ahead_test+0x11d>
addss  0xdc7(%rip),%xmm0
movss  0x10(%rsp),%xmm3
mov    %ebx,%r8d
movss  0x20(%rsp),%xmm4
movss  0x8(%rsp),%xmm5
movss  (%rsp),%xmm6
mov    %rbp,%rsi
movsd  0xdbe(%rip),%xmm7
movsd  0xdbd(%rip),%xmm8
lea    -0x30(%r15),%edx
cmp    $0x20,%r15b
sete   %cl
jne    128a <c1_look_ahead_test+0x16a>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
jne    129e <c1_look_ahead_test+0x17e>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
cmp    $0xa,%dl
setb   %bl
jae    12b8 <c1_look_ahead_test+0x198>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
jae    12cc <c1_look_ahead_test+0x1ac>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
lea    -0x41(%r15),%edx
cmp    $0x1a,%dl
jae    12e7 <c1_look_ahead_test+0x1c7>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
add    $0x9f,%r15b
cmp    $0x1a,%r15b
jae    1303 <c1_look_ahead_test+0x1e3>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
or     %bl,%cl
test   %al,%al
jns    131c <c1_look_ahead_test+0x1fc>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm8,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
jns    1331 <c1_look_ahead_test+0x211>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm8,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
movaps %xmm6,%xmm1
test   %cl,%cl
jne    1420 <c1_look_ahead_test+0x300>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm8,%xmm1
cvtsd2ss %xmm1,%xmm1
movaps %xmm5,%xmm2
je     1429 <c1_look_ahead_test+0x309>
cmp    $0x1a,%r15b
jb     1443 <c1_look_ahead_test+0x323>
movaps %xmm2,%xmm5
cmp    $0x1a,%dl
jae    144c <c1_look_ahead_test+0x32c>
cmp    $0xd,%al
je     1457 <c1_look_ahead_test+0x337>
cmp    $0x2a,%al
je     1471 <c1_look_ahead_test+0x351>
cmp    $0x3e,%al
je     148b <c1_look_ahead_test+0x36b>
cmp    $0x20,%al
jne    1399 <c1_look_ahead_test+0x279>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
lea    -0x30(%rax),%ecx
cmp    $0xa,%cl
jae    13b3 <c1_look_ahead_test+0x293>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
lea    -0x41(%rax),%edx
cmp    $0x1a,%dl
jae    13cd <c1_look_ahead_test+0x2ad>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
test   %al,%al
js     14b0 <c1_look_ahead_test+0x390>
cmp    $0x1a,%dl
jb     14c6 <c1_look_ahead_test+0x3a6>
cmp    $0x20,%al
je     14c6 <c1_look_ahead_test+0x3a6>
cmp    $0xa,%cl
jb     14c6 <c1_look_ahead_test+0x3a6>
cmp    $0x3e,%al
je     14c6 <c1_look_ahead_test+0x3a6>
cmp    $0x2a,%al
je     14c6 <c1_look_ahead_test+0x3a6>
cmp    $0xd,%al
je     14c6 <c1_look_ahead_test+0x3a6>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  0xc1a(%rip),%xmm1
jmp    14bf <c1_look_ahead_test+0x39f>
nopl   0x0(%rax,%rax,1)
movaps %xmm5,%xmm2
jne    1355 <c1_look_ahead_test+0x235>
xorps  %xmm2,%xmm2
cvtss2sd %xmm5,%xmm2
addsd  %xmm8,%xmm2
cvtsd2ss %xmm2,%xmm2
cmp    $0x1a,%r15b
jae    135f <c1_look_ahead_test+0x23f>
cmp    $0x1a,%dl
jb     136b <c1_look_ahead_test+0x24b>
movaps %xmm1,%xmm6
cmp    $0xd,%al
jne    1373 <c1_look_ahead_test+0x253>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
cmp    $0x2a,%al
jne    137b <c1_look_ahead_test+0x25b>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
cmp    $0x3e,%al
jne    1383 <c1_look_ahead_test+0x263>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
cmp    $0x20,%al
je     1387 <c1_look_ahead_test+0x267>
jmp    1399 <c1_look_ahead_test+0x279>
nopw   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  0xb79(%rip),%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
xor    %ecx,%ecx
cmp    $0x5b,%al
sete   %al
test   %r8d,%r8d
jne    14e0 <c1_look_ahead_test+0x3c0>
movss  0xb26(%rip),%xmm1
jmp    14ee <c1_look_ahead_test+0x3ce>
nopl   0x0(%rax)
mov    %al,%cl
lea    0xb57(%rip),%rax
movss  (%rax,%rcx,4),%xmm1
addss  %xmm1,%xmm3
lea    0x1(%r12),%rbp
cmp    %r13,%rbp
jge    150d <c1_look_ahead_test+0x3ed>
cmp    %rsi,%r12
mov    %rbp,%r12
jl     11d0 <c1_look_ahead_test+0xb0>
jmp    150d <c1_look_ahead_test+0x3ed>
mov    %rdx,%rbp
movss  %xmm6,(%rsp)
movss  %xmm5,0x8(%rsp)
movss  %xmm4,0x20(%rsp)
movss  %xmm3,0x10(%rsp)
call   1030 <froundup@plt>
movss  %xmm0,0x1c(%rsp)
movss  (%rsp),%xmm0
call   1030 <froundup@plt>
movss  %xmm0,(%rsp)
movss  0x8(%rsp),%xmm0
call   1030 <froundup@plt>
movss  %xmm0,0x8(%rsp)
movss  0x20(%rsp),%xmm0
call   1030 <froundup@plt>
movaps %xmm0,0x20(%rsp)
movss  0x10(%rsp),%xmm0
call   1030 <froundup@plt>
mov    0x38(%rsp),%esi
cmp    %esi,%ebp
jne    15f8 <c1_look_ahead_test+0x4d8>
movaps 0x20(%rsp),%xmm1
cvttss2si %xmm1,%eax
cvttps2dq %xmm1,%xmm1
cvtdq2ps %xmm1,%xmm1
xor    %ecx,%ecx
movss  0x8(%rsp),%xmm2
ucomiss %xmm2,%xmm1
cvttss2si %xmm2,%edx
cmovb  %eax,%edx
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
setae  %cl
lea    (%rcx,%rcx,2),%eax
add    $0x1,%eax
movss  (%rsp),%xmm2
ucomiss %xmm2,%xmm1
cvttss2si %xmm2,%ecx
cmovb  %edx,%ecx
mov    $0x2,%edx
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
cmovb  %eax,%edx
movss  0x1c(%rsp),%xmm2
ucomiss %xmm2,%xmm1
cvttss2si %xmm2,%esi
cmovb  %ecx,%esi
mov    $0x1,%eax
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
cmovb  %edx,%eax
ucomiss %xmm0,%xmm1
jb     177b <c1_look_ahead_test+0x65b>
mov    $0x6,%eax
jmp    177b <c1_look_ahead_test+0x65b>
movaps 0x20(%rsp),%xmm4
cvtss2sd %xmm4,%xmm8
movsd  0xa3e(%rip),%xmm5
movaps %xmm8,%xmm1
addsd  %xmm5,%xmm1
movss  0x1c(%rsp),%xmm2
cvtss2sd %xmm2,%xmm9
ucomisd %xmm1,%xmm9
setae  %al
movss  (%rsp),%xmm3
xorps  %xmm2,%xmm2
cvtss2sd %xmm3,%xmm2
ucomisd %xmm1,%xmm2
setae  %cl
and    %al,%cl
xorps  %xmm6,%xmm6
cvtss2sd %xmm0,%xmm6
ucomisd %xmm1,%xmm6
setae  %al
movss  0x8(%rsp),%xmm0
cvtss2sd %xmm0,%xmm7
ucomisd %xmm1,%xmm7
setae  %dl
and    %al,%dl
and    %cl,%dl
movzbl %dl,%eax
lea    0x1(,%rax,4),%ecx
movapd %xmm2,%xmm0
addsd  %xmm5,%xmm0
ucomisd %xmm0,%xmm9
jb     16fc <c1_look_ahead_test+0x5dc>
ucomisd %xmm0,%xmm7
jb     16fc <c1_look_ahead_test+0x5dc>
movaps %xmm3,%xmm1
movaps %xmm4,%xmm3
mov    $0x2,%eax
ucomiss %xmm1,%xmm4
ja     16fe <c1_look_ahead_test+0x5de>
ucomiss %xmm3,%xmm1
mov    %ecx,%eax
jne    16fe <c1_look_ahead_test+0x5de>
jp     16fe <c1_look_ahead_test+0x5de>
mov    %r14,%rdi
mov    0x40(%rsp),%rdx
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x20(%rsp)
movsd  %xmm2,0x8(%rsp)
movsd  %xmm6,(%rsp)
movsd  %xmm7,0x38(%rsp)
call   1040 <dq4bi@plt>
movsd  0x38(%rsp),%xmm7
movsd  (%rsp),%xmm6
movsd  0x970(%rip),%xmm5
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm8
movsd  0x10(%rsp),%xmm9
xor    %ecx,%ecx
test   %rax,%rax
setne  %cl
lea    (%rcx,%rcx,2),%eax
add    $0x2,%eax
jmp    16fe <c1_look_ahead_test+0x5de>
mov    %ecx,%eax
movapd %xmm7,%xmm0
addsd  %xmm5,%xmm0
ucomisd %xmm0,%xmm8
mov    $0x4,%ecx
cmovb  %eax,%ecx
ucomisd %xmm0,%xmm6
cmovb  %eax,%ecx
ucomisd %xmm0,%xmm2
cmovb  %eax,%ecx
ucomisd %xmm0,%xmm9
cmovb  %eax,%ecx
movapd %xmm9,%xmm0
addsd  %xmm5,%xmm0
ucomisd %xmm0,%xmm8
mov    $0x1,%edx
cmovb  %ecx,%edx
ucomisd %xmm0,%xmm7
cmovb  %ecx,%edx
ucomisd %xmm0,%xmm2
cmovb  %ecx,%edx
ucomisd %xmm0,%xmm6
cmovb  %ecx,%edx
addsd  %xmm5,%xmm6
ucomisd %xmm6,%xmm8
mov    $0x6,%eax
cmovb  %edx,%eax
ucomisd %xmm6,%xmm7
cmovb  %edx,%eax
ucomisd %xmm6,%xmm2
cmovb  %edx,%eax
ucomisd %xmm6,%xmm9
cmovb  %edx,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @c1_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 i8
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
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
%21 = load i32, i32* %9
%22 = icmp eq i32 %21, 1
br i1 %22, label %23, label %24
23: ; 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 2.000000e+00, float* %15
br label %25
24: ; 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 3.000000e+00, float* %15
br label %25
25: ; preds = %24, %23
%26 = load i32, i32* %9
switch i32 %26, label %31 [
i32 2, label %27
i32 4, label %28
i32 6, label %29
i32 5, label %30
]
27: ; preds = %25
store float 0.000000e+00, float* %12
br label %31
28: ; preds = %25
store float 0.000000e+00, float* %13
br label %31
29: ; preds = %25
store float 0.000000e+00, float* %15
br label %31
30: ; preds = %25
store float 0.000000e+00, float* %14
br label %31
31: ; preds = %25, %30, %29, %28, %27
%32 = load i32, i32* %8
store i32 %32, i32* %20
br label %33
33: ; preds = %359, %31
%34 = load i32, i32* %20
%35 = load i32, i32* %7
%36 = icmp slt i32 %34, %35
br i1 %36, label %37, label %42
37: ; preds = %33
%38 = load i32, i32* %20
%39 = load i32, i32* %8
%40 = add nsw i32 %39, 8
%41 = icmp sle i32 %38, %40
br label %42
42: ; preds = %37, %33
%43 = phi i1 [ false, %33 ], [ %41, %37 ]
br i1 %43, label %44, label %362
44: ; preds = %42
%45 = load i8*, i8** %6
%46 = load i32, i32* %20
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %45, i64 %47
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = icmp sle i32 %50, 127
br i1 %51, label %52, label %58
52: ; preds = %44
%53 = load i8*, i8** %6
%54 = load i32, i32* %20
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8, i8* %53, i64 %55
%57 = load i8, i8* %56
store i8 %57, i8* %16
br label %67
58: ; preds = %44
%59 = load i8*, i8** %6
%60 = load i32, i32* %20
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %59, i64 %61
%63 = load i8, i8* %62
%64 = zext i8 %63 to i32
%65 = sub nsw i32 %64, 127
%66 = trunc i32 %65 to i8
store i8 %66, i8* %16
br label %67
67: ; preds = %58, %52
%68 = load i8*, i8** %6
%69 = load i32, i32* %20
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i8, i8* %68, i64 %70
%72 = load i8, i8* %71
%73 = zext i8 %72 to i32
%74 = icmp sge i32 %73, 48
br i1 %74, label %75, label %88
75: ; preds = %67
%76 = load i8*, i8** %6
%77 = load i32, i32* %20
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i8, i8* %76, i64 %78
%80 = load i8, i8* %79
%81 = zext i8 %80 to i32
%82 = icmp sle i32 %81, 57
br i1 %82, label %83, label %88
83: ; preds = %75
%84 = load float, float* %11
%85 = fpext float %84 to double
%86 = fadd double %85, 5.000000e-01
%87 = fptrunc double %86 to float
store float %87, float* %11
br label %109
88: ; preds = %75, %67
%89 = load float, float* %11
%90 = call float @froundup(float %89)
store float %90, float* %11
%91 = load i8*, i8** %6
%92 = load i32, i32* %20
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i8, i8* %91, i64 %93
%95 = load i8, i8* %94
%96 = zext i8 %95 to i32
%97 = icmp sgt i32 %96, 127
br i1 %97, label %98, label %103
98: ; preds = %88
%99 = load float, float* %11
%100 = fpext float %99 to double
%101 = fadd double %100, 2.000000e+00
%102 = fptrunc double %101 to float
store float %102, float* %11
br label %108
103: ; preds = %88
%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, %98
br label %109
109: ; preds = %108, %83
store i32 0, i32* %17
%110 = load i8, i8* %16
%111 = sext i8 %110 to i32
%112 = icmp eq i32 %111, 32
br i1 %112, label %113, label %118
113: ; preds = %109
%114 = load float, float* %12
%115 = fpext float %114 to double
%116 = fadd double %115, 0x3FE5555555555555
%117 = fptrunc double %116 to float
store float %117, float* %12
store i32 1, i32* %17
br label %118
118: ; preds = %113, %109
%119 = load i8, i8* %16
%120 = sext i8 %119 to i32
%121 = icmp sge i32 %120, 48
br i1 %121, label %122, label %131
122: ; preds = %118
%123 = load i8, i8* %16
%124 = sext i8 %123 to i32
%125 = icmp sle i32 %124, 57
br i1 %125, label %126, label %131
126: ; preds = %122
%127 = load float, float* %12
%128 = fpext float %127 to double
%129 = fadd double %128, 0x3FE5555555555555
%130 = fptrunc double %129 to float
store float %130, float* %12
store i32 1, i32* %17
br label %131
131: ; preds = %126, %122, %118
%132 = load i8, i8* %16
%133 = sext i8 %132 to i32
%134 = icmp sge i32 %133, 65
br i1 %134, label %135, label %144
135: ; preds = %131
%136 = load i8, i8* %16
%137 = sext i8 %136 to i32
%138 = icmp sle i32 %137, 90
br i1 %138, label %139, label %144
139: ; preds = %135
%140 = load float, float* %12
%141 = fpext float %140 to double
%142 = fadd double %141, 0x3FE5555555555555
%143 = fptrunc double %142 to float
store float %143, float* %12
store i32 1, i32* %17
br label %144
144: ; preds = %139, %135, %131
%145 = load i8*, i8** %6
%146 = load i32, i32* %20
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds i8, i8* %145, i64 %147
%149 = load i8, i8* %148
%150 = zext i8 %149 to i32
%151 = icmp sgt i32 %150, 127
br i1 %151, label %152, label %157
152: ; preds = %144
%153 = load float, float* %12
%154 = fpext float %153 to double
%155 = fadd double %154, 0x3FF5555555555555
%156 = fptrunc double %155 to float
store float %156, float* %12
br label %157
157: ; preds = %152, %144
%158 = load i32, i32* %17
%159 = icmp eq i32 %158, 0
br i1 %159, label %160, label %165
160: ; preds = %157
%161 = load float, float* %12
%162 = fpext float %161 to double
%163 = fadd double %162, 0x3FF5555555555555
%164 = fptrunc double %163 to float
store float %164, float* %12
br label %165
165: ; preds = %160, %157
store i32 0, i32* %17
%166 = load i8, i8* %16
%167 = sext i8 %166 to i32
%168 = icmp eq i32 %167, 32
br i1 %168, label %169, label %174
169: ; preds = %165
%170 = load float, float* %13
%171 = fpext float %170 to double
%172 = fadd double %171, 0x3FE5555555555555
%173 = fptrunc double %172 to float
store float %173, float* %13
store i32 1, i32* %17
br label %174
174: ; preds = %169, %165
%175 = load i8, i8* %16
%176 = sext i8 %175 to i32
%177 = icmp sge i32 %176, 48
br i1 %177, label %178, label %187
178: ; preds = %174
%179 = load i8, i8* %16
%180 = sext i8 %179 to i32
%181 = icmp sle i32 %180, 57
br i1 %181, label %182, label %187
182: ; preds = %178
%183 = load float, float* %13
%184 = fpext float %183 to double
%185 = fadd double %184, 0x3FE5555555555555
%186 = fptrunc double %185 to float
store float %186, float* %13
store i32 1, i32* %17
br label %187
187: ; preds = %182, %178, %174
%188 = load i8, i8* %16
%189 = sext i8 %188 to i32
%190 = icmp sge i32 %189, 97
br i1 %190, label %191, label %200
191: ; preds = %187
%192 = load i8, i8* %16
%193 = sext i8 %192 to i32
%194 = icmp sle i32 %193, 122
br i1 %194, label %195, label %200
195: ; preds = %191
%196 = load float, float* %13
%197 = fpext float %196 to double
%198 = fadd double %197, 0x3FE5555555555555
%199 = fptrunc double %198 to float
store float %199, float* %13
store i32 1, i32* %17
br label %200
200: ; preds = %195, %191, %187
%201 = load i8*, i8** %6
%202 = load i32, i32* %20
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds i8, i8* %201, i64 %203
%205 = load i8, i8* %204
%206 = zext i8 %205 to i32
%207 = icmp sgt i32 %206, 127
br i1 %207, label %208, label %213
208: ; preds = %200
%209 = load float, float* %13
%210 = fpext float %209 to double
%211 = fadd double %210, 0x3FF5555555555555
%212 = fptrunc double %211 to float
store float %212, float* %13
br label %213
213: ; preds = %208, %200
%214 = load i32, i32* %17
%215 = icmp eq i32 %214, 0
br i1 %215, label %216, label %221
216: ; preds = %213
%217 = load float, float* %13
%218 = fpext float %217 to double
%219 = fadd double %218, 0x3FF5555555555555
%220 = fptrunc double %219 to float
store float %220, float* %13
br label %221
221: ; preds = %216, %213
store i32 0, i32* %17
%222 = load i8*, i8** %6
%223 = load i32, i32* %20
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds i8, i8* %222, i64 %224
%226 = load i8, i8* %225
%227 = zext i8 %226 to i32
%228 = icmp eq i32 %227, 13
br i1 %228, label %229, label %234
229: ; preds = %221
%230 = load float, float* %14
%231 = fpext float %230 to double
%232 = fadd double %231, 0x3FE5555555555555
%233 = fptrunc double %232 to float
store float %233, float* %14
store i32 1, i32* %17
br label %234
234: ; preds = %229, %221
%235 = load i8*, i8** %6
%236 = load i32, i32* %20
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds i8, i8* %235, i64 %237
%239 = load i8, i8* %238
%240 = zext i8 %239 to i32
%241 = icmp eq i32 %240, 42
br i1 %241, label %242, label %247
242: ; preds = %234
%243 = load float, float* %14
%244 = fpext float %243 to double
%245 = fadd double %244, 0x3FE5555555555555
%246 = fptrunc double %245 to float
store float %246, float* %14
store i32 1, i32* %17
br label %247
247: ; preds = %242, %234
%248 = load i8*, i8** %6
%249 = load i32, i32* %20
%250 = sext i32 %249 to i64
%251 = getelementptr inbounds i8, i8* %248, i64 %250
%252 = load i8, i8* %251
%253 = zext i8 %252 to i32
%254 = icmp eq i32 %253, 62
br i1 %254, label %255, label %260
255: ; preds = %247
%256 = load float, float* %14
%257 = fpext float %256 to double
%258 = fadd double %257, 0x3FE5555555555555
%259 = fptrunc double %258 to float
store float %259, float* %14
store i32 1, i32* %17
br label %260
260: ; preds = %255, %247
%261 = load i8*, i8** %6
%262 = load i32, i32* %20
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds i8, i8* %261, i64 %263
%265 = load i8, i8* %264
%266 = zext i8 %265 to i32
%267 = icmp eq i32 %266, 32
br i1 %267, label %268, label %273
268: ; preds = %260
%269 = load float, float* %14
%270 = fpext float %269 to double
%271 = fadd double %270, 0x3FE5555555555555
%272 = fptrunc double %271 to float
store float %272, float* %14
store i32 1, i32* %17
br label %273
273: ; preds = %268, %260
%274 = load i8*, i8** %6
%275 = load i32, i32* %20
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds i8, i8* %274, i64 %276
%278 = load i8, i8* %277
%279 = zext i8 %278 to i32
%280 = icmp sge i32 %279, 48
br i1 %280, label %281, label %294
281: ; preds = %273
%282 = load i8*, i8** %6
%283 = load i32, i32* %20
%284 = sext i32 %283 to i64
%285 = getelementptr inbounds i8, i8* %282, i64 %284
%286 = load i8, i8* %285
%287 = zext i8 %286 to i32
%288 = icmp sle i32 %287, 57
br i1 %288, label %289, label %294
289: ; preds = %281
%290 = load float, float* %14
%291 = fpext float %290 to double
%292 = fadd double %291, 0x3FE5555555555555
%293 = fptrunc double %292 to float
store float %293, float* %14
store i32 1, i32* %17
br label %294
294: ; preds = %289, %281, %273
%295 = load i8*, i8** %6
%296 = load i32, i32* %20
%297 = sext i32 %296 to i64
%298 = getelementptr inbounds i8, i8* %295, i64 %297
%299 = load i8, i8* %298
%300 = zext i8 %299 to i32
%301 = icmp sge i32 %300, 65
br i1 %301, label %302, label %315
302: ; preds = %294
%303 = load i8*, i8** %6
%304 = load i32, i32* %20
%305 = sext i32 %304 to i64
%306 = getelementptr inbounds i8, i8* %303, i64 %305
%307 = load i8, i8* %306
%308 = zext i8 %307 to i32
%309 = icmp sle i32 %308, 90
br i1 %309, label %310, label %315
310: ; preds = %302
%311 = load float, float* %14
%312 = fpext float %311 to double
%313 = fadd double %312, 0x3FE5555555555555
%314 = fptrunc double %313 to float
store float %314, float* %14
store i32 1, i32* %17
br label %315
315: ; preds = %310, %302, %294
%316 = load i8*, i8** %6
%317 = load i32, i32* %20
%318 = sext i32 %317 to i64
%319 = getelementptr inbounds i8, i8* %316, i64 %318
%320 = load i8, i8* %319
%321 = zext i8 %320 to i32
%322 = icmp sgt i32 %321, 127
br i1 %322, label %323, label %328
323: ; preds = %315
%324 = load float, float* %14
%325 = fpext float %324 to double
%326 = fadd double %325, 0x4011555555555555
%327 = fptrunc double %326 to float
store float %327, float* %14
br label %337
328: ; preds = %315
%329 = load i32, i32* %17
%330 = icmp eq i32 %329, 0
br i1 %330, label %331, label %336
331: ; preds = %328
%332 = load float, float* %14
%333 = fpext float %332 to double
%334 = fadd double %333, 0x400AAAAAAAAAAAAB
%335 = fptrunc double %334 to float
store float %335, float* %14
br label %336
336: ; preds = %331, %328
br label %337
337: ; preds = %336, %323
%338 = load i32, i32* %10
%339 = icmp ne i32 %338, 0
br i1 %339, label %340, label %353
340: ; preds = %337
%341 = load i8*, i8** %6
%342 = load i32, i32* %20
%343 = sext i32 %342 to i64
%344 = getelementptr inbounds i8, i8* %341, i64 %343
%345 = load i8, i8* %344
%346 = zext i8 %345 to i32
%347 = icmp eq i32 %346, 91
br i1 %347, label %348, label %353
348: ; preds = %340
%349 = load float, float* %15
%350 = fpext float %349 to double
%351 = fadd double %350, 3.000000e+00
%352 = fptrunc double %351 to float
store float %352, float* %15
br label %358
353: ; preds = %340, %337
%354 = load float, float* %15
%355 = fpext float %354 to double
%356 = fadd double %355, 1.000000e+00
%357 = fptrunc double %356 to float
store float %357, float* %15
br label %358
358: ; preds = %353, %348
br label %359
359: ; preds = %358
%360 = load i32, i32* %20
%361 = add nsw i32 %360, 1
store i32 %361, i32* %20
br label %33
362: ; preds = %42
%363 = load float, float* %11
%364 = call float @froundup(float %363)
store float %364, float* %11
%365 = load float, float* %12
%366 = call float @froundup(float %365)
store float %366, float* %12
%367 = load float, float* %13
%368 = call float @froundup(float %367)
store float %368, float* %13
%369 = load float, float* %14
%370 = call float @froundup(float %369)
store float %370, float* %14
%371 = load float, float* %15
%372 = call float @froundup(float %371)
store float %372, float* %15
store i32 1, i32* %18
%373 = load i32, i32* %20
%374 = load i32, i32* %7
%375 = icmp eq i32 %373, %374
br i1 %375, label %376, label %411
376: ; preds = %362
%377 = load float, float* %14
%378 = fptosi float %377 to i32
store i32 %378, i32* %19
%379 = load float, float* %13
%380 = load i32, i32* %19
%381 = sitofp i32 %380 to float
%382 = fcmp ole float %379, %381
br i1 %382, label %383, label %386
383: ; preds = %376
%384 = load float, float* %13
%385 = fptosi float %384 to i32
store i32 %385, i32* %19
store i32 4, i32* %18
br label %386
386: ; preds = %383, %376
%387 = load float, float* %12
%388 = load i32, i32* %19
%389 = sitofp i32 %388 to float
%390 = fcmp ole float %387, %389
br i1 %390, label %391, label %394
391: ; preds = %386
%392 = load float, float* %12
%393 = fptosi float %392 to i32
store i32 %393, i32* %19
store i32 2, i32* %18
br label %394
394: ; preds = %391, %386
%395 = load float, float* %11
%396 = load i32, i32* %19
%397 = sitofp i32 %396 to float
%398 = fcmp ole float %395, %397
br i1 %398, label %399, label %402
399: ; preds = %394
%400 = load float, float* %11
%401 = fptosi float %400 to i32
store i32 %401, i32* %19
store i32 1, i32* %18
br label %402
402: ; preds = %399, %394
%403 = load float, float* %15
%404 = load i32, i32* %19
%405 = sitofp i32 %404 to float
%406 = fcmp ole float %403, %405
br i1 %406, label %407, label %410
407: ; preds = %402
%408 = load float, float* %15
%409 = fptosi float %408 to i32
store i32 %409, i32* %19
store i32 6, i32* %18
br label %410
410: ; preds = %407, %402
br label %562
411: ; preds = %362
%412 = load float, float* %14
%413 = fpext float %412 to double
%414 = fadd double %413, 1.000000e+00
%415 = load float, float* %11
%416 = fpext float %415 to double
%417 = fcmp ole double %414, %416
br i1 %417, label %418, label %440
418: ; preds = %411
%419 = load float, float* %14
%420 = fpext float %419 to double
%421 = fadd double %420, 1.000000e+00
%422 = load float, float* %12
%423 = fpext float %422 to double
%424 = fcmp ole double %421, %423
br i1 %424, label %425, label %440
425: ; preds = %418
%426 = load float, float* %14
%427 = fpext float %426 to double
%428 = fadd double %427, 1.000000e+00
%429 = load float, float* %15
%430 = fpext float %429 to double
%431 = fcmp ole double %428, %430
br i1 %431, label %432, label %440
432: ; preds = %425
%433 = load float, float* %14
%434 = fpext float %433 to double
%435 = fadd double %434, 1.000000e+00
%436 = load float, float* %13
%437 = fpext float %436 to double
%438 = fcmp ole double %435, %437
br i1 %438, label %439, label %440
439: ; preds = %432
store i32 5, i32* %18
br label %440
440: ; preds = %439, %432, %425, %418, %411
%441 = load float, float* %12
%442 = fpext float %441 to double
%443 = fadd double %442, 1.000000e+00
%444 = load float, float* %11
%445 = fpext float %444 to double
%446 = fcmp ole double %443, %445
br i1 %446, label %447, label %474
447: ; preds = %440
%448 = load float, float* %12
%449 = fpext float %448 to double
%450 = fadd double %449, 1.000000e+00
%451 = load float, float* %13
%452 = fpext float %451 to double
%453 = fcmp ole double %450, %452
br i1 %453, label %454, label %474
454: ; preds = %447
%455 = load float, float* %12
%456 = load float, float* %14
%457 = fcmp olt float %455, %456
br i1 %457, label %458, label %459
458: ; preds = %454
store i32 2, i32* %18
br label %473
459: ; preds = %454
store i32 0, i32* %17
%460 = load float, float* %12
%461 = load float, float* %14
%462 = fcmp oeq float %460, %461
br i1 %462, label %463, label %472
463: ; preds = %459
%464 = load i8*, i8** %6
%465 = load i32, i32* %7
%466 = load i32, i32* %8
%467 = call i64 @dq4bi(i8* %464, i32 %465, i32 %466)
%468 = icmp ne i64 %467, 0
br i1 %468, label %469, label %470
469: ; preds = %463
store i32 5, i32* %18
br label %471
470: ; preds = %463
store i32 2, i32* %18
br label %471
471: ; preds = %470, %469
br label %472
472: ; preds = %471, %459
br label %473
473: ; preds = %472, %458
br label %474
474: ; preds = %473, %447, %440
%475 = load float, float* %13
%476 = fpext float %475 to double
%477 = fadd double %476, 1.000000e+00
%478 = load float, float* %11
%479 = fpext float %478 to double
%480 = fcmp ole double %477, %479
br i1 %480, label %481, label %503
481: ; preds = %474
%482 = load float, float* %13
%483 = fpext float %482 to double
%484 = fadd double %483, 1.000000e+00
%485 = load float, float* %12
%486 = fpext float %485 to double
%487 = fcmp ole double %484, %486
br i1 %487, label %488, label %503
488: ; preds = %481
%489 = load float, float* %13
%490 = fpext float %489 to double
%491 = fadd double %490, 1.000000e+00
%492 = load float, float* %15
%493 = fpext float %492 to double
%494 = fcmp ole double %491, %493
br i1 %494, label %495, label %503
495: ; preds = %488
%496 = load float, float* %13
%497 = fpext float %496 to double
%498 = fadd double %497, 1.000000e+00
%499 = load float, float* %14
%500 = fpext float %499 to double
%501 = fcmp ole double %498, %500
br i1 %501, label %502, label %503
502: ; preds = %495
store i32 4, i32* %18
br label %503
503: ; preds = %502, %495, %488, %481, %474
%504 = load float, float* %11
%505 = fpext float %504 to double
%506 = fadd double %505, 1.000000e+00
%507 = load float, float* %15
%508 = fpext float %507 to double
%509 = fcmp ole double %506, %508
br i1 %509, label %510, label %532
510: ; preds = %503
%511 = load float, float* %11
%512 = fpext float %511 to double
%513 = fadd double %512, 1.000000e+00
%514 = load float, float* %12
%515 = fpext float %514 to double
%516 = fcmp ole double %513, %515
br i1 %516, label %517, label %532
517: ; preds = %510
%518 = load float, float* %11
%519 = fpext float %518 to double
%520 = fadd double %519, 1.000000e+00
%521 = load float, float* %13
%522 = fpext float %521 to double
%523 = fcmp ole double %520, %522
br i1 %523, label %524, label %532
524: ; preds = %517
%525 = load float, float* %11
%526 = fpext float %525 to double
%527 = fadd double %526, 1.000000e+00
%528 = load float, float* %14
%529 = fpext float %528 to double
%530 = fcmp ole double %527, %529
br i1 %530, label %531, label %532
531: ; preds = %524
store i32 1, i32* %18
br label %532
532: ; preds = %531, %524, %517, %510, %503
%533 = load float, float* %15
%534 = fpext float %533 to double
%535 = fadd double %534, 1.000000e+00
%536 = load float, float* %11
%537 = fpext float %536 to double
%538 = fcmp ole double %535, %537
br i1 %538, label %539, label %561
539: ; preds = %532
%540 = load float, float* %15
%541 = fpext float %540 to double
%542 = fadd double %541, 1.000000e+00
%543 = load float, float* %12
%544 = fpext float %543 to double
%545 = fcmp ole double %542, %544
br i1 %545, label %546, label %561
546: ; preds = %539
%547 = load float, float* %15
%548 = fpext float %547 to double
%549 = fadd double %548, 1.000000e+00
%550 = load float, float* %13
%551 = fpext float %550 to double
%552 = fcmp ole double %549, %551
br i1 %552, label %553, label %561
553: ; preds = %546
%554 = load float, float* %15
%555 = fpext float %554 to double
%556 = fadd double %555, 1.000000e+00
%557 = load float, float* %14
%558 = fpext float %557 to double
%559 = fcmp ole double %556, %558
br i1 %559, label %560, label %561
560: ; preds = %553
store i32 6, i32* %18
br label %561
561: ; preds = %560, %553, %546, %539, %532
br label %562
562: ; preds = %561, %410
%563 = load i32, i32* %18
ret i32 %563
}

LLVM IR (-O2):
define i32 @c1_look_ahead_test(i8* %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 2.000000e+00, float 3.000000e+00
switch i32 %3, label %14 [
i32 2, label %10
i32 4, label %11
i32 6, label %12
i32 5, label %13
]
10: ; preds = %5
br label %14
11: ; preds = %5
br label %14
12: ; preds = %5
br label %14
13: ; preds = %5
br label %14
14: ; preds = %5, %13, %12, %11, %10
%15 = phi float [ %8, %5 ], [ %8, %13 ], [ %8, %12 ], [ %8, %11 ], [ 0.000000e+00, %10 ]
%16 = phi float [ %8, %5 ], [ %8, %13 ], [ %8, %12 ], [ 0.000000e+00, %11 ], [ %8, %10 ]
%17 = phi float [ %8, %5 ], [ 0.000000e+00, %13 ], [ %8, %12 ], [ %8, %11 ], [ %8, %10 ]
%18 = phi float [ %9, %5 ], [ %9, %13 ], [ 0.000000e+00, %12 ], [ %9, %11 ], [ %9, %10 ]
%19 = icmp slt i32 %2, %1
br i1 %19, label %20, label %162
20: ; preds = %14
%21 = add nsw i32 %2, 8
%22 = icmp ne i32 %4, 0
%23 = sext i32 %2 to i64
%24 = sext i32 %1 to i64
%25 = sext i32 %21 to i64
br label %26
26: ; preds = %20, %150
%27 = phi i64 [ %23, %20 ], [ %156, %150 ]
%28 = phi float [ %18, %20 ], [ %155, %150 ]
%29 = phi float [ %17, %20 ], [ %151, %150 ]
%30 = phi float [ %16, %20 ], [ %103, %150 ]
%31 = phi float [ %15, %20 ], [ %80, %150 ]
%32 = phi float [ %7, %20 ], [ %52, %150 ]
%33 = getelementptr inbounds i8, i8* %0, i64 %27
%34 = load i8, i8* %33
%35 = icmp sgt i8 %34, -1
%36 = add i8 %34, -127
%37 = select i1 %35, i8 %34, i8 %36
%38 = add i8 %34, -48
%39 = icmp ult i8 %38, 10
br i1 %39, label %40, label %42
40: ; preds = %26
%41 = fadd float %32, 5.000000e-01
br label %50
42: ; preds = %26
%43 = tail call float @froundup(float %32)
%44 = load i8, i8* %33
%45 = icmp slt i8 %44, 0
br i1 %45, label %46, label %48
46: ; preds = %42
%47 = fadd float %43, 2.000000e+00
br label %50
48: ; preds = %42
%49 = fadd float %43, 1.000000e+00
br label %50
50: ; preds = %46, %48, %40
%51 = phi i8 [ %34, %40 ], [ %44, %46 ], [ %44, %48 ]
%52 = phi float [ %41, %40 ], [ %47, %46 ], [ %49, %48 ]
%53 = icmp eq i8 %37, 32
%54 = fpext float %31 to double
%55 = fadd double %54, 0x3FE5555555555555
%56 = fptrunc double %55 to float
%57 = select i1 %53, float %56, float %31
%58 = add i8 %37, -48
%59 = icmp ult i8 %58, 10
%60 = fpext float %57 to double
%61 = fadd double %60, 0x3FE5555555555555
%62 = fptrunc double %61 to float
%63 = select i1 %59, float %62, float %57
%64 = or i1 %53, %59
%65 = add i8 %37, -65
%66 = icmp ult i8 %65, 26
%67 = fpext float %63 to double
%68 = fadd double %67, 0x3FE5555555555555
%69 = fptrunc double %68 to float
%70 = select i1 %66, float %69, float %63
%71 = icmp slt i8 %51, 0
%72 = fpext float %70 to double
%73 = fadd double %72, 0x3FF5555555555555
%74 = fptrunc double %73 to float
%75 = select i1 %71, float %74, float %70
%76 = select i1 %66, i1 true, i1 %64
%77 = fpext float %75 to double
%78 = fadd double %77, 0x3FF5555555555555
%79 = fptrunc double %78 to float
%80 = select i1 %76, float %75, float %79
%81 = fpext float %30 to double
%82 = fadd double %81, 0x3FE5555555555555
%83 = fptrunc double %82 to float
%84 = select i1 %53, float %83, float %30
%85 = fpext float %84 to double
%86 = fadd double %85, 0x3FE5555555555555
%87 = fptrunc double %86 to float
%88 = select i1 %59, float %87, float %84
%89 = add i8 %37, -97
%90 = icmp ult i8 %89, 26
%91 = fpext float %88 to double
%92 = fadd double %91, 0x3FE5555555555555
%93 = fptrunc double %92 to float
%94 = select i1 %90, float %93, float %88
%95 = select i1 %90, i1 true, i1 %64
%96 = fpext float %94 to double
%97 = fadd double %96, 0x3FF5555555555555
%98 = fptrunc double %97 to float
%99 = select i1 %71, float %98, float %94
%100 = fpext float %99 to double
%101 = fadd double %100, 0x3FF5555555555555
%102 = fptrunc double %101 to float
%103 = select i1 %95, float %99, float %102
%104 = icmp eq i8 %51, 13
%105 = fpext float %29 to double
%106 = fadd double %105, 0x3FE5555555555555
%107 = fptrunc double %106 to float
%108 = select i1 %104, float %107, float %29
%109 = icmp eq i8 %51, 42
%110 = fpext float %108 to double
%111 = fadd double %110, 0x3FE5555555555555
%112 = fptrunc double %111 to float
%113 = select i1 %109, float %112, float %108
%114 = icmp eq i8 %51, 62
%115 = fpext float %113 to double
%116 = fadd double %115, 0x3FE5555555555555
%117 = fptrunc double %116 to float
%118 = select i1 %114, float %117, float %113
%119 = icmp eq i8 %51, 32
%120 = fpext float %118 to double
%121 = fadd double %120, 0x3FE5555555555555
%122 = fptrunc double %121 to float
%123 = select i1 %119, float %122, float %118
%124 = add i8 %51, -48
%125 = icmp ult i8 %124, 10
%126 = fpext float %123 to double
%127 = fadd double %126, 0x3FE5555555555555
%128 = fptrunc double %127 to float
%129 = select i1 %125, float %128, float %123
%130 = add i8 %51, -65
%131 = icmp ult i8 %130, 26
%132 = fpext float %129 to double
%133 = fadd double %132, 0x3FE5555555555555
%134 = fptrunc double %133 to float
%135 = select i1 %131, float %134, float %129
br i1 %71, label %136, label %140
136: ; preds = %50
%137 = fpext float %135 to double
%138 = fadd double %137, 0x4011555555555555
%139 = fptrunc double %138 to float
br label %150
140: ; preds = %50
%141 = or i1 %109, %104
%142 = or i1 %114, %141
%143 = or i1 %119, %125
%144 = select i1 %131, i1 true, i1 %143
%145 = select i1 %144, i1 true, i1 %142
br i1 %145, label %150, label %146
146: ; preds = %140
%147 = fpext float %135 to double
%148 = fadd double %147, 0x400AAAAAAAAAAAAB
%149 = fptrunc double %148 to float
br label %150
150: ; preds = %140, %146, %136
%151 = phi float [ %139, %136 ], [ %149, %146 ], [ %135, %140 ]
%152 = icmp eq i8 %51, 91
%153 = select i1 %22, i1 %152, i1 false
%154 = select i1 %153, float 3.000000e+00, float 1.000000e+00
%155 = fadd float %28, %154
%156 = add nsw i64 %27, 1
%157 = icmp slt i64 %156, %24
%158 = icmp slt i64 %27, %25
%159 = select i1 %157, i1 %158, i1 false
br i1 %159, label %26, label %160
160: ; preds = %150
%161 = trunc i64 %156 to i32
br label %162
162: ; preds = %160, %14
%163 = phi float [ %7, %14 ], [ %52, %160 ]
%164 = phi float [ %15, %14 ], [ %80, %160 ]
%165 = phi float [ %16, %14 ], [ %103, %160 ]
%166 = phi float [ %17, %14 ], [ %151, %160 ]
%167 = phi float [ %18, %14 ], [ %155, %160 ]
%168 = phi i32 [ %2, %14 ], [ %161, %160 ]
%169 = tail call float @froundup(float %163)
%170 = tail call float @froundup(float %164)
%171 = tail call float @froundup(float %165)
%172 = tail call float @froundup(float %166)
%173 = tail call float @froundup(float %167)
%174 = icmp eq i32 %168, %1
br i1 %174, label %175, label %195
175: ; preds = %162
%176 = fptosi float %172 to i32
%177 = sitofp i32 %176 to float
%178 = fcmp ugt float %171, %177
%179 = fptosi float %171 to i32
%180 = select i1 %178, i32 1, i32 4
%181 = select i1 %178, i32 %176, i32 %179
%182 = sitofp i32 %181 to float
%183 = fcmp ugt float %170, %182
%184 = fptosi float %170 to i32
%185 = select i1 %183, i32 %180, i32 2
%186 = select i1 %183, i32 %181, i32 %184
%187 = sitofp i32 %186 to float
%188 = fcmp ugt float %169, %187
%189 = fptosi float %169 to i32
%190 = select i1 %188, i32 %185, i32 1
%191 = select i1 %188, i32 %186, i32 %189
%192 = sitofp i32 %191 to float
%193 = fcmp ugt float %173, %192
br i1 %193, label %251, label %194
194: ; preds = %175
br label %251
195: ; preds = %162
%196 = fpext float %172 to double
%197 = fadd double %196, 1.000000e+00
%198 = fpext float %169 to double
%199 = fcmp ugt double %197, %198
%200 = fpext float %170 to double
%201 = fcmp ugt double %197, %200
%202 = select i1 %199, i1 true, i1 %201
%203 = fpext float %173 to double
%204 = fcmp ugt double %197, %203
%205 = select i1 %202, i1 true, i1 %204
%206 = fpext float %171 to double
%207 = fcmp ugt double %197, %206
%208 = select i1 %205, i1 true, i1 %207
%209 = select i1 %208, i32 1, i32 5
%210 = fadd double %200, 1.000000e+00
%211 = fcmp ugt double %210, %198
%212 = fcmp ugt double %210, %206
%213 = select i1 %211, i1 true, i1 %212
br i1 %213, label %222, label %214
214: ; preds = %195
%215 = fcmp olt float %170, %172
br i1 %215, label %222, label %216
216: ; preds = %214
%217 = fcmp oeq float %170, %172
br i1 %217, label %218, label %222
218: ; preds = %216
%219 = tail call i64 @dq4bi(i8* %0, i32 %1, i32 %2)
%220 = icmp eq i64 %219, 0
%221 = select i1 %220, i32 2, i32 5
br label %222
222: ; preds = %218, %214, %216, %195
%223 = phi i32 [ %209, %216 ], [ %209, %195 ], [ 2, %214 ], [ %221, %218 ]
%224 = fadd double %206, 1.000000e+00
%225 = fcmp ugt double %224, %198
%226 = fcmp ugt double %224, %200
%227 = select i1 %225, i1 true, i1 %226
%228 = fcmp ugt double %224, %203
%229 = select i1 %227, i1 true, i1 %228
%230 = fcmp ugt double %224, %196
%231 = select i1 %229, i1 true, i1 %230
%232 = select i1 %231, i32 %223, i32 4
%233 = fadd double %198, 1.000000e+00
%234 = fcmp ugt double %233, %203
%235 = fcmp ugt double %233, %200
%236 = select i1 %234, i1 true, i1 %235
%237 = fcmp ugt double %233, %206
%238 = select i1 %236, i1 true, i1 %237
%239 = fcmp ugt double %233, %196
%240 = select i1 %238, i1 true, i1 %239
%241 = select i1 %240, i32 %232, i32 1
%242 = fadd double %203, 1.000000e+00
%243 = fcmp ugt double %242, %198
%244 = fcmp ugt double %242, %200
%245 = select i1 %243, i1 true, i1 %244
%246 = fcmp ugt double %242, %206
%247 = select i1 %245, i1 true, i1 %246
%248 = fcmp ugt double %242, %196
%249 = select i1 %247, i1 true, i1 %248
%250 = select i1 %249, i32 %241, i32 6
br label %251
251: ; preds = %222, %175, %194
%252 = phi i32 [ 6, %194 ], [ %190, %175 ], [ %250, %222 ]
ret i32 %252
}