#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 */
float ceil(float);
scalar_t__ dq4bi(unsigned char *, int, int);
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, 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 = ceil(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 = ceil(ascii_count);
  c40_count = ceil(c40_count);
  text_count = ceil(text_count);
  edi_count = ceil(edi_count);
  byte_count = ceil(byte_count);
  best_scheme = 1;
  if (sp == sourcelen) {
    int best_count = (int)edi_count;
    if (text_count <= best_count) {
      best_count = (int)text_count;
      best_scheme = 4;
    }
    if (c40_count <= best_count) {
      best_count = (int)c40_count;
      best_scheme = 2;
    }
    if (ascii_count <= best_count) {
      best_count = (int)ascii_count;
      best_scheme = 1;
    }
    if (byte_count <= best_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,-0x3c(%rbp)
mov    -0x3c(%rbp),%ecx
xor    %eax,%eax
cmp    -0xc(%rbp),%ecx
mov    %al,-0x49(%rbp)
jge    1245 <c1_look_ahead_test+0x125>
mov    -0x3c(%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 -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jg     127d <c1_look_ahead_test+0x15d>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x2d(%rbp)
jmp    128f <c1_look_ahead_test+0x16f>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x7f,%eax
mov    %al,-0x2d(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     12dc <c1_look_ahead_test+0x1bc>
mov    -0x8(%rbp),%rax
movslq -0x3c(%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 <ceil@plt>
movss  %xmm0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x3c(%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 -0x3c(%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 -0x3c(%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 -0x3c(%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 -0x3c(%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 -0x3c(%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 -0x3c(%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 -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     16a8 <c1_look_ahead_test+0x588>
mov    -0x8(%rbp),%rax
movslq -0x3c(%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 -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     16f7 <c1_look_ahead_test+0x5d7>
mov    -0x8(%rbp),%rax
movslq -0x3c(%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 -0x3c(%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 -0x3c(%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    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1223 <c1_look_ahead_test+0x103>
movss  -0x1c(%rbp),%xmm0
call   1030 <ceil@plt>
movss  %xmm0,-0x1c(%rbp)
movss  -0x20(%rbp),%xmm0
call   1030 <ceil@plt>
movss  %xmm0,-0x20(%rbp)
movss  -0x24(%rbp),%xmm0
call   1030 <ceil@plt>
movss  %xmm0,-0x24(%rbp)
movss  -0x28(%rbp),%xmm0
call   1030 <ceil@plt>
movss  %xmm0,-0x28(%rbp)
movss  -0x2c(%rbp),%xmm0
call   1030 <ceil@plt>
movss  %xmm0,-0x2c(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    18ba <c1_look_ahead_test+0x79a>
cvttss2si -0x28(%rbp),%eax
mov    %eax,-0x40(%rbp)
movss  -0x24(%rbp),%xmm1
cvtsi2ssl -0x40(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1857 <c1_look_ahead_test+0x737>
cvttss2si -0x24(%rbp),%eax
mov    %eax,-0x40(%rbp)
movl   $0x4,-0x38(%rbp)
movss  -0x20(%rbp),%xmm1
cvtsi2ssl -0x40(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1879 <c1_look_ahead_test+0x759>
cvttss2si -0x20(%rbp),%eax
mov    %eax,-0x40(%rbp)
movl   $0x2,-0x38(%rbp)
movss  -0x1c(%rbp),%xmm1
cvtsi2ssl -0x40(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     189b <c1_look_ahead_test+0x77b>
cvttss2si -0x1c(%rbp),%eax
mov    %eax,-0x40(%rbp)
movl   $0x1,-0x38(%rbp)
movss  -0x2c(%rbp),%xmm1
cvtsi2ssl -0x40(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     18b5 <c1_look_ahead_test+0x795>
movl   $0x6,-0x38(%rbp)
jmp    1c21 <c1_look_ahead_test+0xb01>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x745(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1961 <c1_look_ahead_test+0x841>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x71d(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1961 <c1_look_ahead_test+0x841>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x6f5(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1961 <c1_look_ahead_test+0x841>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x6cd(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1961 <c1_look_ahead_test+0x841>
movl   $0x5,-0x38(%rbp)
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x69e(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1a27 <c1_look_ahead_test+0x907>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x676(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1a27 <c1_look_ahead_test+0x907>
movss  -0x20(%rbp),%xmm1
movss  -0x28(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    19d0 <c1_look_ahead_test+0x8b0>
movl   $0x2,-0x38(%rbp)
jmp    1a22 <c1_look_ahead_test+0x902>
movl   $0x0,-0x34(%rbp)
movss  -0x20(%rbp),%xmm0
ucomiss -0x28(%rbp),%xmm0
jne    1a1d <c1_look_ahead_test+0x8fd>
jp     1a1d <c1_look_ahead_test+0x8fd>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
call   1040 <dq4bi@plt>
cmp    $0x0,%rax
je     1a11 <c1_look_ahead_test+0x8f1>
movl   $0x5,-0x38(%rbp)
jmp    1a18 <c1_look_ahead_test+0x8f8>
movl   $0x2,-0x38(%rbp)
jmp    1a1d <c1_look_ahead_test+0x8fd>
jmp    1a22 <c1_look_ahead_test+0x902>
jmp    1a27 <c1_look_ahead_test+0x907>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x5d8(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1ace <c1_look_ahead_test+0x9ae>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x5b0(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1ace <c1_look_ahead_test+0x9ae>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x588(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1ace <c1_look_ahead_test+0x9ae>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x560(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1ace <c1_look_ahead_test+0x9ae>
movl   $0x4,-0x38(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x531(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1b75 <c1_look_ahead_test+0xa55>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x509(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1b75 <c1_look_ahead_test+0xa55>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x4e1(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1b75 <c1_look_ahead_test+0xa55>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x4b9(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1b75 <c1_look_ahead_test+0xa55>
movl   $0x1,-0x38(%rbp)
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x48a(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1c1c <c1_look_ahead_test+0xafc>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x462(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1c1c <c1_look_ahead_test+0xafc>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x43a(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1c1c <c1_look_ahead_test+0xafc>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x412(%rip),%xmm0
addsd  %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1c1c <c1_look_ahead_test+0xafc>
movl   $0x6,-0x38(%rbp)
jmp    1c21 <c1_look_ahead_test+0xb01>
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,0x30(%rsp)
xor    %eax,%eax
xorps  %xmm0,%xmm0
cmp    $0x1,%ecx
sete   %bl
je     1148 <c1_look_ahead_test+0x28>
movss  0xeb8(%rip),%xmm0
mov    %bl,%al
lea    0xebf(%rip),%rdi
movss  (%rdi,%rax,4),%xmm4
lea    0xebb(%rip),%rdi
movss  (%rdi,%rax,4),%xmm3
add    $0xfffffffe,%ecx
cmp    $0x4,%ecx
ja     119b <c1_look_ahead_test+0x7b>
lea    0xedf(%rip),%rax
movslq (%rax,%rcx,4),%rcx
add    %rax,%rcx
movaps %xmm4,%xmm6
movaps %xmm4,%xmm5
jmp    *%rcx
xorps  %xmm6,%xmm6
jmp    119e <c1_look_ahead_test+0x7e>
xorps  %xmm5,%xmm5
movaps %xmm4,%xmm6
jmp    11a1 <c1_look_ahead_test+0x81>
movaps %xmm4,%xmm6
movaps %xmm4,%xmm5
xorps  %xmm4,%xmm4
jmp    11a1 <c1_look_ahead_test+0x81>
xorps  %xmm3,%xmm3
movaps %xmm4,%xmm6
movaps %xmm4,%xmm5
cmp    %esi,%edx
mov    %rdx,0x40(%rsp)
mov    %esi,0x3c(%rsp)
jge    1539 <c1_look_ahead_test+0x419>
lea    0x8(%rdx),%eax
movslq %edx,%rbx
movslq %esi,%r12
movslq %eax,%rsi
movsd  0xe5a(%rip),%xmm7
movsd  0xe59(%rip),%xmm8
nop
mov    0x30(%rsp),%rax
movzbl (%rax,%rbx,1),%r15d
lea    -0x7f(%r15),%eax
test   %r15b,%r15b
movzbl %al,%r13d
cmovns %r15d,%r13d
lea    -0x30(%r15),%r14d
cmp    $0x9,%r14b
ja     1200 <c1_look_ahead_test+0xe0>
addss  0xe0d(%rip),%xmm0
jmp    1271 <c1_look_ahead_test+0x151>
nopl   (%rax)
mov    %rbx,0x18(%rsp)
mov    %rsi,%rbx
movss  %xmm6,(%rsp)
movss  %xmm5,0x8(%rsp)
movss  %xmm4,0x20(%rsp)
mov    %r8d,%ebp
movss  %xmm3,0x10(%rsp)
call   1030 <ceilf@plt>
test   %r15b,%r15b
js     1236 <c1_look_ahead_test+0x116>
addss  0xdcc(%rip),%xmm0
jmp    123e <c1_look_ahead_test+0x11e>
addss  0xdc6(%rip),%xmm0
movss  0x10(%rsp),%xmm3
mov    %ebp,%r8d
movss  0x20(%rsp),%xmm4
movss  0x8(%rsp),%xmm5
movss  (%rsp),%xmm6
mov    %rbx,%rsi
movsd  0xdbd(%rip),%xmm7
movsd  0xdbc(%rip),%xmm8
mov    0x18(%rsp),%rbx
lea    -0x30(%r13),%ecx
cmp    $0x20,%r13b
sete   %al
jne    1290 <c1_look_ahead_test+0x170>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
jne    12a4 <c1_look_ahead_test+0x184>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
cmp    $0xa,%cl
setb   %dl
jae    12be <c1_look_ahead_test+0x19e>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
jae    12d2 <c1_look_ahead_test+0x1b2>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
lea    -0x41(%r13),%ecx
cmp    $0x1a,%cl
jae    12ed <c1_look_ahead_test+0x1cd>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
add    $0x9f,%r13b
cmp    $0x1a,%r13b
jae    1309 <c1_look_ahead_test+0x1e9>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
or     %dl,%al
test   %r15b,%r15b
jns    1323 <c1_look_ahead_test+0x203>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm8,%xmm1
xorps  %xmm6,%xmm6
cvtsd2ss %xmm1,%xmm6
jns    1338 <c1_look_ahead_test+0x218>
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
addsd  %xmm8,%xmm1
xorps  %xmm5,%xmm5
cvtsd2ss %xmm1,%xmm5
movaps %xmm6,%xmm1
test   %al,%al
jne    1430 <c1_look_ahead_test+0x310>
xorps  %xmm1,%xmm1
cvtss2sd %xmm6,%xmm1
addsd  %xmm8,%xmm1
cvtsd2ss %xmm1,%xmm1
movaps %xmm5,%xmm2
je     1439 <c1_look_ahead_test+0x319>
cmp    $0x1a,%r13b
jb     1453 <c1_look_ahead_test+0x333>
movaps %xmm2,%xmm5
cmp    $0x1a,%cl
jae    145c <c1_look_ahead_test+0x33c>
cmp    $0xd,%r15b
je     1469 <c1_look_ahead_test+0x349>
cmp    $0x2a,%r15b
je     1485 <c1_look_ahead_test+0x365>
cmp    $0x3e,%r15b
je     14a1 <c1_look_ahead_test+0x381>
cmp    $0x20,%r15b
je     14bd <c1_look_ahead_test+0x39d>
cmp    $0xa,%r14b
jae    13b2 <c1_look_ahead_test+0x292>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
lea    -0x41(%r15),%eax
cmp    $0x1a,%al
jae    13cc <c1_look_ahead_test+0x2ac>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
test   %r15b,%r15b
js     14e0 <c1_look_ahead_test+0x3c0>
cmp    $0x1a,%al
jb     14f6 <c1_look_ahead_test+0x3d6>
cmp    $0x20,%r15b
je     14f6 <c1_look_ahead_test+0x3d6>
cmp    $0xa,%r14b
jb     14f6 <c1_look_ahead_test+0x3d6>
cmp    $0x3e,%r15b
je     14f6 <c1_look_ahead_test+0x3d6>
cmp    $0x2a,%r15b
je     14f6 <c1_look_ahead_test+0x3d6>
cmp    $0xd,%r15b
je     14f6 <c1_look_ahead_test+0x3d6>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  0xc12(%rip),%xmm1
jmp    14ef <c1_look_ahead_test+0x3cf>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movaps %xmm5,%xmm2
jne    135c <c1_look_ahead_test+0x23c>
xorps  %xmm2,%xmm2
cvtss2sd %xmm5,%xmm2
addsd  %xmm8,%xmm2
cvtsd2ss %xmm2,%xmm2
cmp    $0x1a,%r13b
jae    1366 <c1_look_ahead_test+0x246>
cmp    $0x1a,%cl
jb     1372 <c1_look_ahead_test+0x252>
movaps %xmm1,%xmm6
cmp    $0xd,%r15b
jne    137c <c1_look_ahead_test+0x25c>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
cmp    $0x2a,%r15b
jne    1386 <c1_look_ahead_test+0x266>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
cmp    $0x3e,%r15b
jne    1390 <c1_look_ahead_test+0x270>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
cmp    $0x20,%r15b
jne    139a <c1_look_ahead_test+0x27a>
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  %xmm7,%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
cmp    $0xa,%r14b
jb     13a0 <c1_look_ahead_test+0x280>
jmp    13b2 <c1_look_ahead_test+0x292>
xchg   %ax,%ax
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
addsd  0xb49(%rip),%xmm1
xorps  %xmm4,%xmm4
cvtsd2ss %xmm1,%xmm4
xor    %eax,%eax
cmp    $0x5b,%r15b
sete   %cl
test   %r8d,%r8d
jne    1510 <c1_look_ahead_test+0x3f0>
movss  0xaf4(%rip),%xmm1
jmp    151e <c1_look_ahead_test+0x3fe>
xchg   %ax,%ax
mov    %cl,%al
lea    0xb27(%rip),%rcx
movss  (%rcx,%rax,4),%xmm1
addss  %xmm1,%xmm3
lea    0x1(%rbx),%rbp
cmp    %r12,%rbp
jge    153c <c1_look_ahead_test+0x41c>
cmp    %rsi,%rbx
mov    %rbp,%rbx
jl     11d0 <c1_look_ahead_test+0xb0>
jmp    153c <c1_look_ahead_test+0x41c>
mov    %rdx,%rbp
movss  %xmm6,(%rsp)
movss  %xmm5,0x8(%rsp)
movss  %xmm4,0x20(%rsp)
movss  %xmm3,0x10(%rsp)
call   1030 <ceilf@plt>
movss  %xmm0,0x18(%rsp)
movss  (%rsp),%xmm0
call   1030 <ceilf@plt>
movss  %xmm0,(%rsp)
movss  0x8(%rsp),%xmm0
call   1030 <ceilf@plt>
movss  %xmm0,0x8(%rsp)
movss  0x20(%rsp),%xmm0
call   1030 <ceilf@plt>
movaps %xmm0,0x20(%rsp)
movss  0x10(%rsp),%xmm0
call   1030 <ceilf@plt>
mov    0x3c(%rsp),%esi
cmp    %esi,%ebp
jne    1620 <c1_look_ahead_test+0x500>
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  0x18(%rsp),%xmm2
ucomiss %xmm2,%xmm1
cvttss2si %xmm2,%eax
cmovb  %ecx,%eax
mov    $0x1,%ecx
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
cmovb  %edx,%ecx
ucomiss %xmm0,%xmm1
mov    $0x6,%eax
cmovb  %ecx,%eax
jmp    17a5 <c1_look_ahead_test+0x685>
movaps 0x20(%rsp),%xmm4
cvtss2sd %xmm4,%xmm8
movsd  0xa16(%rip),%xmm5
movaps %xmm8,%xmm1
addsd  %xmm5,%xmm1
movss  0x18(%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     1726 <c1_look_ahead_test+0x606>
ucomisd %xmm0,%xmm7
jb     1726 <c1_look_ahead_test+0x606>
movaps %xmm3,%xmm1
movaps %xmm4,%xmm3
mov    $0x2,%eax
ucomiss %xmm1,%xmm4
ja     1728 <c1_look_ahead_test+0x608>
ucomiss %xmm3,%xmm1
mov    %ecx,%eax
jne    1728 <c1_look_ahead_test+0x608>
jp     1728 <c1_look_ahead_test+0x608>
mov    0x30(%rsp),%rdi
mov    0x40(%rsp),%rdx
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x20(%rsp)
movsd  %xmm2,0x8(%rsp)
movsd  %xmm6,(%rsp)
movsd  %xmm7,0x30(%rsp)
call   1040 <dq4bi@plt>
movsd  0x30(%rsp),%xmm7
movsd  (%rsp),%xmm6
movsd  0x946(%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    1728 <c1_look_ahead_test+0x608>
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* %19
br label %33
33: ; preds = %359, %31
%34 = load i32, i32* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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 @ceil(float %89)
store float %90, float* %11
%91 = load i8*, i8** %6
%92 = load i32, i32* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%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* %19
%361 = add nsw i32 %360, 1
store i32 %361, i32* %19
br label %33
362: ; preds = %42
%363 = load float, float* %11
%364 = call float @ceil(float %363)
store float %364, float* %11
%365 = load float, float* %12
%366 = call float @ceil(float %365)
store float %366, float* %12
%367 = load float, float* %13
%368 = call float @ceil(float %367)
store float %368, float* %13
%369 = load float, float* %14
%370 = call float @ceil(float %369)
store float %370, float* %14
%371 = load float, float* %15
%372 = call float @ceil(float %371)
store float %372, float* %15
store i32 1, i32* %18
%373 = load i32, i32* %19
%374 = load i32, i32* %7
%375 = icmp eq i32 %373, %374
br i1 %375, label %376, label %409
376: ; preds = %362
%377 = load float, float* %14
%378 = fptosi float %377 to i32
store i32 %378, i32* %20
%379 = load float, float* %13
%380 = load i32, i32* %20
%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* %20
store i32 4, i32* %18
br label %386
386: ; preds = %383, %376
%387 = load float, float* %12
%388 = load i32, i32* %20
%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* %20
store i32 2, i32* %18
br label %394
394: ; preds = %391, %386
%395 = load float, float* %11
%396 = load i32, i32* %20
%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* %20
store i32 1, i32* %18
br label %402
402: ; preds = %399, %394
%403 = load float, float* %15
%404 = load i32, i32* %20
%405 = sitofp i32 %404 to float
%406 = fcmp ole float %403, %405
br i1 %406, label %407, label %408
407: ; preds = %402
store i32 6, i32* %18
br label %408
408: ; preds = %407, %402
br label %560
409: ; preds = %362
%410 = load float, float* %14
%411 = fpext float %410 to double
%412 = fadd double %411, 1.000000e+00
%413 = load float, float* %11
%414 = fpext float %413 to double
%415 = fcmp ole double %412, %414
br i1 %415, label %416, label %438
416: ; preds = %409
%417 = load float, float* %14
%418 = fpext float %417 to double
%419 = fadd double %418, 1.000000e+00
%420 = load float, float* %12
%421 = fpext float %420 to double
%422 = fcmp ole double %419, %421
br i1 %422, label %423, label %438
423: ; preds = %416
%424 = load float, float* %14
%425 = fpext float %424 to double
%426 = fadd double %425, 1.000000e+00
%427 = load float, float* %15
%428 = fpext float %427 to double
%429 = fcmp ole double %426, %428
br i1 %429, label %430, label %438
430: ; preds = %423
%431 = load float, float* %14
%432 = fpext float %431 to double
%433 = fadd double %432, 1.000000e+00
%434 = load float, float* %13
%435 = fpext float %434 to double
%436 = fcmp ole double %433, %435
br i1 %436, label %437, label %438
437: ; preds = %430
store i32 5, i32* %18
br label %438
438: ; preds = %437, %430, %423, %416, %409
%439 = load float, float* %12
%440 = fpext float %439 to double
%441 = fadd double %440, 1.000000e+00
%442 = load float, float* %11
%443 = fpext float %442 to double
%444 = fcmp ole double %441, %443
br i1 %444, label %445, label %472
445: ; preds = %438
%446 = load float, float* %12
%447 = fpext float %446 to double
%448 = fadd double %447, 1.000000e+00
%449 = load float, float* %13
%450 = fpext float %449 to double
%451 = fcmp ole double %448, %450
br i1 %451, label %452, label %472
452: ; preds = %445
%453 = load float, float* %12
%454 = load float, float* %14
%455 = fcmp olt float %453, %454
br i1 %455, label %456, label %457
456: ; preds = %452
store i32 2, i32* %18
br label %471
457: ; preds = %452
store i32 0, i32* %17
%458 = load float, float* %12
%459 = load float, float* %14
%460 = fcmp oeq float %458, %459
br i1 %460, label %461, label %470
461: ; preds = %457
%462 = load i8*, i8** %6
%463 = load i32, i32* %7
%464 = load i32, i32* %8
%465 = call i64 @dq4bi(i8* %462, i32 %463, i32 %464)
%466 = icmp ne i64 %465, 0
br i1 %466, label %467, label %468
467: ; preds = %461
store i32 5, i32* %18
br label %469
468: ; preds = %461
store i32 2, i32* %18
br label %469
469: ; preds = %468, %467
br label %470
470: ; preds = %469, %457
br label %471
471: ; preds = %470, %456
br label %472
472: ; preds = %471, %445, %438
%473 = load float, float* %13
%474 = fpext float %473 to double
%475 = fadd double %474, 1.000000e+00
%476 = load float, float* %11
%477 = fpext float %476 to double
%478 = fcmp ole double %475, %477
br i1 %478, label %479, label %501
479: ; preds = %472
%480 = load float, float* %13
%481 = fpext float %480 to double
%482 = fadd double %481, 1.000000e+00
%483 = load float, float* %12
%484 = fpext float %483 to double
%485 = fcmp ole double %482, %484
br i1 %485, label %486, label %501
486: ; preds = %479
%487 = load float, float* %13
%488 = fpext float %487 to double
%489 = fadd double %488, 1.000000e+00
%490 = load float, float* %15
%491 = fpext float %490 to double
%492 = fcmp ole double %489, %491
br i1 %492, label %493, label %501
493: ; preds = %486
%494 = load float, float* %13
%495 = fpext float %494 to double
%496 = fadd double %495, 1.000000e+00
%497 = load float, float* %14
%498 = fpext float %497 to double
%499 = fcmp ole double %496, %498
br i1 %499, label %500, label %501
500: ; preds = %493
store i32 4, i32* %18
br label %501
501: ; preds = %500, %493, %486, %479, %472
%502 = load float, float* %11
%503 = fpext float %502 to double
%504 = fadd double %503, 1.000000e+00
%505 = load float, float* %15
%506 = fpext float %505 to double
%507 = fcmp ole double %504, %506
br i1 %507, label %508, label %530
508: ; preds = %501
%509 = load float, float* %11
%510 = fpext float %509 to double
%511 = fadd double %510, 1.000000e+00
%512 = load float, float* %12
%513 = fpext float %512 to double
%514 = fcmp ole double %511, %513
br i1 %514, label %515, label %530
515: ; preds = %508
%516 = load float, float* %11
%517 = fpext float %516 to double
%518 = fadd double %517, 1.000000e+00
%519 = load float, float* %13
%520 = fpext float %519 to double
%521 = fcmp ole double %518, %520
br i1 %521, label %522, label %530
522: ; preds = %515
%523 = load float, float* %11
%524 = fpext float %523 to double
%525 = fadd double %524, 1.000000e+00
%526 = load float, float* %14
%527 = fpext float %526 to double
%528 = fcmp ole double %525, %527
br i1 %528, label %529, label %530
529: ; preds = %522
store i32 1, i32* %18
br label %530
530: ; preds = %529, %522, %515, %508, %501
%531 = load float, float* %15
%532 = fpext float %531 to double
%533 = fadd double %532, 1.000000e+00
%534 = load float, float* %11
%535 = fpext float %534 to double
%536 = fcmp ole double %533, %535
br i1 %536, label %537, label %559
537: ; preds = %530
%538 = load float, float* %15
%539 = fpext float %538 to double
%540 = fadd double %539, 1.000000e+00
%541 = load float, float* %12
%542 = fpext float %541 to double
%543 = fcmp ole double %540, %542
br i1 %543, label %544, label %559
544: ; preds = %537
%545 = load float, float* %15
%546 = fpext float %545 to double
%547 = fadd double %546, 1.000000e+00
%548 = load float, float* %13
%549 = fpext float %548 to double
%550 = fcmp ole double %547, %549
br i1 %550, label %551, label %559
551: ; preds = %544
%552 = load float, float* %15
%553 = fpext float %552 to double
%554 = fadd double %553, 1.000000e+00
%555 = load float, float* %14
%556 = fpext float %555 to double
%557 = fcmp ole double %554, %556
br i1 %557, label %558, label %559
558: ; preds = %551
store i32 6, i32* %18
br label %559
559: ; preds = %558, %551, %544, %537, %530
br label %560
560: ; preds = %559, %408
%561 = load i32, i32* %18
ret i32 %561
}

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