int parse_line(char *line, int *id, int *cyl_type, double *d_tab,
               unsigned char *b_tab) {
  typedef struct tS {
    char label[10];
    char data_type;
    unsigned char index;
    unsigned char ok;
  } S;
  typedef struct tCOL {
    char name[10], alt_name[10];
    int id;
  } COL;
  COL col_tab[8] = {{"white", "c1", 0},     {"red", "c2", 32},
                    {"green", "c3", 64},    {"blue", "c4", 96},
                    {"yellow", "c5", 128},  {"cyan", "c6", 160},
                    {"magenta", "c7", 192}, {"blue2", "c8", 224}};
  S s_sph[5] = {{"x0", 'd', 0, 0},
                {"y0", 'd', 1, 0},
                {"z0", 'd', 2, 0},
                {"r", 'd', 3, 0},
                {"color", 's', 0, 0}};
  S s_pln[9] = {
      {"x0", 'd', 0, 0},     {"y0", 'd', 1, 0},     {"z0", 'd', 2, 0},
      {"a", 'd', 3, 0},      {"b", 'd', 4, 0},      {"c", 'd', 5, 0},
      {"color1", 's', 0, 0}, {"color2", 's', 1, 0}, {"texscale", 'd', 6, 0}};
  S s_cxy[4] = {{"x0", 'd', 0, 0},
                {"y0", 'd', 1, 0},
                {"r", 'd', 2, 0},
                {"color", 's', 0, 0}};
  S s_cxz[4] = {{"x0", 'd', 0, 0},
                {"z0", 'd', 1, 0},
                {"r", 'd', 2, 0},
                {"color", 's', 0, 0}};
  S s_cyz[4] = {{"y0", 'd', 0, 0},
                {"z0", 'd', 1, 0},
                {"r", 'd', 2, 0},
                {"color", 's', 0, 0}};
  S s_lig[3] = {{"x", 'd', 0, 0}, {"y", 'd', 1, 0}, {"z", 'd', 2, 0}};
  S s_cam[7] = {{"x", 'd', 0, 0},  {"y", 'd', 1, 0},  {"z", 'd', 2, 0},
                {"lx", 'd', 3, 0}, {"ly", 'd', 4, 0}, {"lz", 'd', 5, 0},
                {"rot", 'd', 6, 0}};
  int ln = strlen(line);
  int i, j, k;
  char name[16], c;
  S *s_tab;
  S *s;
  char str[10 + 64 + 1];
  int str_i = 0;
  char label[10];
  char val[64];
  int mode;
  int found_label;
  unsigned char col;
  int num_of_s;
  int ci, col_found = 0;
  if (line[ln - 1] != ')')
    return -13;
  for (i = 0;; i++) {
    if (i == 16)
      return -8;
    c = line[i];
    if (c == '(')
      break;
    if (c < 'a' || c > 'z')
      return -7;
    name[i] = c;
  }
  name[i++] = 0;
  if (strcmp(name, "sphere") == 0) {
    *id = 3;
    s_tab = s_sph;
    num_of_s = 5;
  } else if (strcmp(name, "plane") == 0) {
    *id = 4;
    s_tab = s_pln;
    num_of_s = 9;
  } else if (strcmp(name, "camera") == 0) {
    *id = 1;
    s_tab = s_cam;
    num_of_s = 7;
  } else if (strcmp(name, "light") == 0) {
    *id = 2;
    s_tab = s_lig;
    num_of_s = 3;
  } else if (strncmp(name, "cylinder", 8) == 0) {
    if (strcmp(name, "cylinderxy") == 0) {
      *cyl_type = 1;
      s_tab = s_cxy;
    } else if (strcmp(name, "cylinderxz") == 0) {
      *cyl_type = 2;
      s_tab = s_cxz;
    } else if (strcmp(name, "cylinderyz") == 0) {
      *cyl_type = 3;
      s_tab = s_cyz;
    } else
      return -10;
    *id = 5;
    num_of_s = 4;
  } else
    return -10;
  for (; i < ln; i++) {
    c = line[i];
    if (c == ';' || ((c == ')') && (i == (ln - 1)))) {
      str[str_i] = 0;
      str_i = 0;
      if (!strlen(str) || (str[0] == '='))
        return -34;
      mode = 0;
      for (j = 0; j < strlen(str); j++) {
        c = str[j];
        if (mode == 0) {
          if (j == 10)
            return -30;
          if (c == '=') {
            mode++;
            k = 0;
            label[j] = 0;
          } else
            label[j] = c;
        } else {
          val[k++] = c;
          if (k == 64)
            return -31;
        }
      }
      val[k] = 0;
      s = s_tab;
      found_label = 0;
      for (j = 0; j < num_of_s; j++, s++) {
        if (strcmp(label, s->label) == 0) {
          found_label = 1;
          break;
        }
      }
      if (!found_label)
        return -32;
      if (s->ok)
        return -33;
      if (s->data_type == 'd') {
        if (!is_double(val))
          return -12;
        d_tab[s->index] = atof(val);
      } else {
        for (ci = 0; ci < 8; ci++) {
          if (strcmp(val, col_tab[ci].name) == 0 ||
              strcmp(val, col_tab[ci].alt_name) == 0) {
            col = col_tab[ci].id;
            col_found = 1;
            break;
          }
        }
        if (!col_found)
          return -24;
        b_tab[s->index] = col;
      }
      s->ok = 1;
    } else {
      str[str_i++] = c;
      if (str_i == (10 + 64 + 1))
        return -4;
    }
  }
  s = s_tab;
  for (i = 0; i < num_of_s; i++, s++) {
    if (!s->ok)
      return -14;
  }
  return 0;
}


x86 assembly (clang, -O0):
<parse_line>:
push   %rbp
mov    %rsp,%rbp
sub    $0x410,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
lea    -0xf0(%rbp),%rdi
lea    0xe73(%rip),%rsi
mov    $0xc0,%edx
call   1080 <memcpy@plt>
lea    -0x140(%rbp),%rdi
lea    0xf1b(%rip),%rsi
mov    $0x41,%edx
call   1080 <memcpy@plt>
lea    -0x1c0(%rbp),%rdi
lea    0xf53(%rip),%rsi
mov    $0x75,%edx
call   1080 <memcpy@plt>
lea    -0x200(%rbp),%rdi
lea    0xfbb(%rip),%rsi
mov    $0x34,%edx
call   1080 <memcpy@plt>
lea    -0x240(%rbp),%rdi
lea    0xfe3(%rip),%rsi
mov    $0x34,%edx
call   1080 <memcpy@plt>
lea    -0x280(%rbp),%rdi
lea    0x100b(%rip),%rsi
mov    $0x34,%edx
call   1080 <memcpy@plt>
lea    -0x2b0(%rbp),%rdi
lea    0x1033(%rip),%rsi
mov    $0x27,%edx
call   1080 <memcpy@plt>
lea    -0x310(%rbp),%rdi
lea    0x104b(%rip),%rsi
mov    $0x5b,%edx
call   1080 <memcpy@plt>
mov    -0x10(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x314(%rbp)
movl   $0x0,-0x3a4(%rbp)
movl   $0x0,-0x408(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x314(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x29,%eax
je     128b <parse_line+0x12b>
movl   $0xfffffff3,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
movl   $0x0,-0x318(%rbp)
cmpl   $0x10,-0x318(%rbp)
jne    12ae <parse_line+0x14e>
movl   $0xfffffff8,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
mov    -0x10(%rbp),%rax
movslq -0x318(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x331(%rbp)
movsbl -0x331(%rbp),%eax
cmp    $0x28,%eax
jne    12d7 <parse_line+0x177>
jmp    132b <parse_line+0x1cb>
movsbl -0x331(%rbp),%eax
cmp    $0x61,%eax
jl     12f7 <parse_line+0x197>
movsbl -0x331(%rbp),%eax
cmp    $0x7a,%eax
jle    1303 <parse_line+0x1a3>
movl   $0xfffffff9,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
mov    -0x331(%rbp),%cl
movslq -0x318(%rbp),%rax
mov    %cl,-0x330(%rbp,%rax,1)
mov    -0x318(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x318(%rbp)
jmp    1295 <parse_line+0x135>
mov    -0x318(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x318(%rbp)
cltq
movb   $0x0,-0x330(%rbp,%rax,1)
lea    -0x330(%rbp),%rdi
lea    0xf87(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    1389 <parse_line+0x229>
mov    -0x18(%rbp),%rax
movl   $0x3,(%rax)
lea    -0x140(%rbp),%rax
mov    %rax,-0x340(%rbp)
movl   $0x5,-0x400(%rbp)
jmp    156d <parse_line+0x40d>
lea    -0x330(%rbp),%rdi
lea    0xf4b(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    13cc <parse_line+0x26c>
mov    -0x18(%rbp),%rax
movl   $0x4,(%rax)
lea    -0x1c0(%rbp),%rax
mov    %rax,-0x340(%rbp)
movl   $0x9,-0x400(%rbp)
jmp    1568 <parse_line+0x408>
lea    -0x330(%rbp),%rdi
lea    0xf0e(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    140f <parse_line+0x2af>
mov    -0x18(%rbp),%rax
movl   $0x1,(%rax)
lea    -0x310(%rbp),%rax
mov    %rax,-0x340(%rbp)
movl   $0x7,-0x400(%rbp)
jmp    1563 <parse_line+0x403>
lea    -0x330(%rbp),%rdi
lea    0xed2(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    1452 <parse_line+0x2f2>
mov    -0x18(%rbp),%rax
movl   $0x2,(%rax)
lea    -0x2b0(%rbp),%rax
mov    %rax,-0x340(%rbp)
movl   $0x3,-0x400(%rbp)
jmp    155e <parse_line+0x3fe>
lea    -0x330(%rbp),%rdi
lea    0xe95(%rip),%rsi
mov    $0x8,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    154d <parse_line+0x3ed>
lea    -0x330(%rbp),%rdi
lea    0xe7d(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    14ac <parse_line+0x34c>
mov    -0x20(%rbp),%rax
movl   $0x1,(%rax)
lea    -0x200(%rbp),%rax
mov    %rax,-0x340(%rbp)
jmp    1534 <parse_line+0x3d4>
lea    -0x330(%rbp),%rdi
lea    0xe4f(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    14e5 <parse_line+0x385>
mov    -0x20(%rbp),%rax
movl   $0x2,(%rax)
lea    -0x240(%rbp),%rax
mov    %rax,-0x340(%rbp)
jmp    152f <parse_line+0x3cf>
lea    -0x330(%rbp),%rdi
lea    0xe21(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    151e <parse_line+0x3be>
mov    -0x20(%rbp),%rax
movl   $0x3,(%rax)
lea    -0x280(%rbp),%rax
mov    %rax,-0x340(%rbp)
jmp    152a <parse_line+0x3ca>
movl   $0xfffffff6,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
jmp    152f <parse_line+0x3cf>
jmp    1534 <parse_line+0x3d4>
mov    -0x18(%rbp),%rax
movl   $0x5,(%rax)
movl   $0x4,-0x400(%rbp)
jmp    1559 <parse_line+0x3f9>
movl   $0xfffffff6,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
jmp    155e <parse_line+0x3fe>
jmp    1563 <parse_line+0x403>
jmp    1568 <parse_line+0x408>
jmp    156d <parse_line+0x40d>
jmp    1572 <parse_line+0x412>
mov    -0x318(%rbp),%eax
cmp    -0x314(%rbp),%eax
jge    19c0 <parse_line+0x860>
mov    -0x10(%rbp),%rax
movslq -0x318(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x331(%rbp)
movsbl -0x331(%rbp),%eax
cmp    $0x3b,%eax
je     15cf <parse_line+0x46f>
movsbl -0x331(%rbp),%eax
cmp    $0x29,%eax
jne    1969 <parse_line+0x809>
mov    -0x318(%rbp),%eax
mov    -0x314(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1969 <parse_line+0x809>
movslq -0x3a4(%rbp),%rax
movb   $0x0,-0x3a0(%rbp,%rax,1)
movl   $0x0,-0x3a4(%rbp)
lea    -0x3a0(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%rax
je     160e <parse_line+0x4ae>
movsbl -0x3a0(%rbp),%eax
cmp    $0x3d,%eax
jne    161a <parse_line+0x4ba>
movl   $0xffffffde,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
movl   $0x0,-0x3f4(%rbp)
movl   $0x0,-0x31c(%rbp)
movslq -0x31c(%rbp),%rax
mov    %rax,-0x410(%rbp)
lea    -0x3a0(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,%rcx
mov    -0x410(%rbp),%rax
cmp    %rcx,%rax
jae    1742 <parse_line+0x5e2>
movslq -0x31c(%rbp),%rax
mov    -0x3a0(%rbp,%rax,1),%al
mov    %al,-0x331(%rbp)
cmpl   $0x0,-0x3f4(%rbp)
jne    16eb <parse_line+0x58b>
cmpl   $0xa,-0x31c(%rbp)
jne    1695 <parse_line+0x535>
movl   $0xffffffe2,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
movsbl -0x331(%rbp),%eax
cmp    $0x3d,%eax
jne    16d2 <parse_line+0x572>
mov    -0x3f4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3f4(%rbp)
movl   $0x0,-0x320(%rbp)
movslq -0x31c(%rbp),%rax
movb   $0x0,-0x3ae(%rbp,%rax,1)
jmp    16e6 <parse_line+0x586>
mov    -0x331(%rbp),%cl
movslq -0x31c(%rbp),%rax
mov    %cl,-0x3ae(%rbp,%rax,1)
jmp    1729 <parse_line+0x5c9>
mov    -0x331(%rbp),%cl
mov    -0x320(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x320(%rbp)
cltq
mov    %cl,-0x3f0(%rbp,%rax,1)
cmpl   $0x40,-0x320(%rbp)
jne    1724 <parse_line+0x5c4>
movl   $0xffffffe1,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
jmp    1729 <parse_line+0x5c9>
jmp    172e <parse_line+0x5ce>
mov    -0x31c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x31c(%rbp)
jmp    162e <parse_line+0x4ce>
movslq -0x320(%rbp),%rax
movb   $0x0,-0x3f0(%rbp,%rax,1)
mov    -0x340(%rbp),%rax
mov    %rax,-0x348(%rbp)
movl   $0x0,-0x3f8(%rbp)
movl   $0x0,-0x31c(%rbp)
mov    -0x31c(%rbp),%eax
cmp    -0x400(%rbp),%eax
jge    17db <parse_line+0x67b>
lea    -0x3ae(%rbp),%rdi
mov    -0x348(%rbp),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    17b0 <parse_line+0x650>
movl   $0x1,-0x3f8(%rbp)
jmp    17db <parse_line+0x67b>
jmp    17b5 <parse_line+0x655>
mov    -0x31c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x31c(%rbp)
mov    -0x348(%rbp),%rax
add    $0xd,%rax
mov    %rax,-0x348(%rbp)
jmp    1773 <parse_line+0x613>
cmpl   $0x0,-0x3f8(%rbp)
jne    17f4 <parse_line+0x694>
movl   $0xffffffe0,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
mov    -0x348(%rbp),%rax
cmpb   $0x0,0xc(%rax)
je     1811 <parse_line+0x6b1>
movl   $0xffffffdf,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
mov    -0x348(%rbp),%rax
movsbl 0xa(%rax),%eax
cmp    $0x64,%eax
jne    1873 <parse_line+0x713>
lea    -0x3f0(%rbp),%rdi
mov    $0x0,%al
call   1060 <is_double@plt>
cmp    $0x0,%eax
jne    1848 <parse_line+0x6e8>
movl   $0xfffffff4,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
lea    -0x3f0(%rbp),%rdi
mov    $0x0,%al
call   1040 <atof@plt>
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x348(%rbp),%rcx
movzbl 0xb(%rcx),%ecx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1959 <parse_line+0x7f9>
movl   $0x0,-0x404(%rbp)
cmpl   $0x8,-0x404(%rbp)
jge    1928 <parse_line+0x7c8>
lea    -0x3f0(%rbp),%rdi
movslq -0x404(%rbp),%rax
lea    -0xf0(%rbp),%rsi
imul   $0x18,%rax,%rax
add    %rax,%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
je     18e2 <parse_line+0x782>
lea    -0x3f0(%rbp),%rdi
movslq -0x404(%rbp),%rax
lea    -0xf0(%rbp),%rsi
imul   $0x18,%rax,%rax
add    %rax,%rsi
add    $0xa,%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    190f <parse_line+0x7af>
movslq -0x404(%rbp),%rcx
lea    -0xf0(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
mov    0x14(%rax),%eax
mov    %al,-0x3f9(%rbp)
movl   $0x1,-0x408(%rbp)
jmp    1928 <parse_line+0x7c8>
jmp    1914 <parse_line+0x7b4>
mov    -0x404(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x404(%rbp)
jmp    187d <parse_line+0x71d>
cmpl   $0x0,-0x408(%rbp)
jne    1941 <parse_line+0x7e1>
movl   $0xffffffe8,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
mov    -0x3f9(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x348(%rbp),%rcx
movzbl 0xb(%rcx),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x348(%rbp),%rax
movb   $0x1,0xc(%rax)
jmp    19a7 <parse_line+0x847>
mov    -0x331(%rbp),%cl
mov    -0x3a4(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x3a4(%rbp)
cltq
mov    %cl,-0x3a0(%rbp,%rax,1)
cmpl   $0x4b,-0x3a4(%rbp)
jne    19a2 <parse_line+0x842>
movl   $0xfffffffc,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
jmp    19a7 <parse_line+0x847>
jmp    19ac <parse_line+0x84c>
mov    -0x318(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x318(%rbp)
jmp    1572 <parse_line+0x412>
mov    -0x340(%rbp),%rax
mov    %rax,-0x348(%rbp)
movl   $0x0,-0x318(%rbp)
mov    -0x318(%rbp),%eax
cmp    -0x400(%rbp),%eax
jge    1a32 <parse_line+0x8d2>
mov    -0x348(%rbp),%rax
cmpb   $0x0,0xc(%rax)
jne    1a07 <parse_line+0x8a7>
movl   $0xfffffff2,-0x4(%rbp)
jmp    1a39 <parse_line+0x8d9>
jmp    1a0c <parse_line+0x8ac>
mov    -0x318(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x318(%rbp)
mov    -0x348(%rbp),%rax
add    $0xd,%rax
mov    %rax,-0x348(%rbp)
jmp    19d8 <parse_line+0x878>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x410,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parse_line>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x2f8,%rsp
mov    %r8,0x38(%rsp)
mov    %rcx,0x30(%rsp)
mov    %rdx,%r12
mov    %rsi,%rbp
mov    %rdi,%r13
mov    0xf96(%rip),%al
mov    %al,0x1d0(%rsp)
movaps 0xf78(%rip),%xmm0
movaps %xmm0,0x1c0(%rsp)
movaps 0xf59(%rip),%xmm0
movaps %xmm0,0x1b0(%rsp)
movaps 0xf3a(%rip),%xmm0
movaps %xmm0,0x1a0(%rsp)
movaps 0xf1b(%rip),%xmm0
movaps %xmm0,0x190(%rsp)
mov    0xfc9(%rip),%rax
mov    %rax,0x2ed(%rsp)
movaps 0xfad(%rip),%xmm0
movaps %xmm0,0x2e0(%rsp)
movaps 0xf8e(%rip),%xmm0
movaps %xmm0,0x2d0(%rsp)
movaps 0xf6f(%rip),%xmm0
movaps %xmm0,0x2c0(%rsp)
movaps 0xf50(%rip),%xmm0
movaps %xmm0,0x2b0(%rsp)
movaps 0xf31(%rip),%xmm0
movaps %xmm0,0x2a0(%rsp)
movaps 0xf12(%rip),%xmm0
movaps %xmm0,0x290(%rsp)
movaps 0xef3(%rip),%xmm0
movaps %xmm0,0x280(%rsp)
mov    0xf95(%rip),%eax
mov    %eax,0x130(%rsp)
movaps 0xf77(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps 0xf58(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movaps 0xf39(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
mov    0xf9b(%rip),%eax
mov    %eax,0xf0(%rsp)
movaps 0xf7d(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xf5e(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0xf3f(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
mov    0xfa1(%rip),%eax
mov    %eax,0xb0(%rsp)
movaps 0xf83(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
movaps 0xf64(%rip),%xmm0
movaps %xmm0,0x90(%rsp)
movaps 0xf45(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
mov    0xf95(%rip),%rax
mov    %rax,0x6f(%rsp)
movaps 0xf7a(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0xf5e(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movups 0xfcd(%rip),%xmm0
movups %xmm0,0x26b(%rsp)
movaps 0xfb3(%rip),%xmm0
movaps %xmm0,0x260(%rsp)
movaps 0xf94(%rip),%xmm0
movaps %xmm0,0x250(%rsp)
movaps 0xf75(%rip),%xmm0
movaps %xmm0,0x240(%rsp)
movaps 0xf56(%rip),%xmm0
movaps %xmm0,0x230(%rsp)
movapd 0xf36(%rip),%xmm0
movapd %xmm0,0x220(%rsp)
call   1040 <strlen@plt>
movslq %eax,%rdx
mov    $0xfffffff3,%ecx
cmpb   $0x29,-0x1(%r13,%rdx,1)
jne    1b63 <parse_line+0xa23>
mov    0x0(%r13),%sil
cmp    $0x28,%sil
jne    1469 <parse_line+0x329>
xor    %r14d,%r14d
movb   $0x0,(%rsp,%r14,1)
mov    $0x65687073,%ecx
xor    (%rsp),%ecx
mov    $0x657265,%esi
xor    0x3(%rsp),%esi
or     %ecx,%esi
je     16c1 <parse_line+0x581>
mov    $0x6e616c70,%ecx
xor    (%rsp),%ecx
movzwl 0x4(%rsp),%esi
xor    $0x65,%esi
or     %ecx,%esi
je     16d7 <parse_line+0x597>
mov    $0x656d6163,%ecx
xor    (%rsp),%ecx
mov    $0x617265,%esi
xor    0x3(%rsp),%esi
or     %ecx,%esi
je     16ed <parse_line+0x5ad>
mov    $0x6867696c,%ecx
xor    (%rsp),%ecx
movzwl 0x4(%rsp),%esi
xor    $0x74,%esi
or     %ecx,%esi
je     1703 <parse_line+0x5c3>
movabs $0x7265646e696c7963,%rsi
64 65 72
mov    $0xfffffff6,%ecx
cmp    %rsi,(%rsp)
jne    1b63 <parse_line+0xa23>
mov    (%rsp),%rdi
xor    %rsi,%rdi
movabs $0x79787265646e69,%rbx
xor    0x3(%rsp),%rbx
or     %rdi,%rbx
je     1716 <parse_line+0x5d6>
mov    (%rsp),%rdi
xor    %rsi,%rdi
movabs $0x7a787265646e69,%rbx
xor    0x3(%rsp),%rbx
or     %rdi,%rbx
je     1725 <parse_line+0x5e5>
xor    (%rsp),%rsi
movabs $0x7a797265646e69,%rdi
xor    0x3(%rsp),%rdi
or     %rsi,%rdi
jne    1b63 <parse_line+0xa23>
lea    0x80(%rsp),%r15
mov    $0x3,%ecx
jmp    1732 <parse_line+0x5f2>
lea    -0x7b(%rsi),%edi
mov    $0xfffffff9,%ecx
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,(%rsp)
mov    0x1(%r13),%sil
mov    $0x1,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x1(%rsp)
mov    0x2(%r13),%sil
mov    $0x2,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x2(%rsp)
mov    0x3(%r13),%sil
mov    $0x3,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x3(%rsp)
mov    0x4(%r13),%sil
mov    $0x4,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x4(%rsp)
mov    0x5(%r13),%sil
mov    $0x5,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x5(%rsp)
mov    0x6(%r13),%sil
mov    $0x6,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x6(%rsp)
mov    0x7(%r13),%sil
mov    $0x7,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x7(%rsp)
mov    0x8(%r13),%sil
mov    $0x8,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x8(%rsp)
mov    0x9(%r13),%sil
mov    $0x9,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0x9(%rsp)
mov    0xa(%r13),%sil
mov    $0xa,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0xa(%rsp)
mov    0xb(%r13),%sil
mov    $0xb,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0xb(%rsp)
mov    0xc(%r13),%sil
mov    $0xc,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0xc(%rsp)
mov    0xd(%r13),%sil
mov    $0xd,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0xd(%rsp)
mov    0xe(%r13),%sil
mov    $0xe,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%edi
cmp    $0xe6,%dil
jb     1b63 <parse_line+0xa23>
mov    %sil,0xe(%rsp)
mov    0xf(%r13),%sil
mov    $0xf,%r14d
cmp    $0x28,%sil
je     137d <parse_line+0x23d>
lea    -0x7b(%rsi),%eax
cmp    $0xe6,%al
jb     1b63 <parse_line+0xa23>
mov    %sil,0xf(%rsp)
mov    $0xfffffff8,%ecx
jmp    1b63 <parse_line+0xa23>
movl   $0x3,0x0(%rbp)
mov    $0x5,%ebp
lea    0x190(%rsp),%r15
jmp    1742 <parse_line+0x602>
movl   $0x4,0x0(%rbp)
mov    $0x9,%ebp
lea    0x280(%rsp),%r15
jmp    1742 <parse_line+0x602>
movl   $0x1,0x0(%rbp)
mov    $0x7,%ebp
lea    0x220(%rsp),%r15
jmp    1742 <parse_line+0x602>
movl   $0x2,0x0(%rbp)
mov    $0x3,%ebp
lea    0x50(%rsp),%r15
jmp    1742 <parse_line+0x602>
lea    0x100(%rsp),%r15
mov    $0x1,%ecx
jmp    1732 <parse_line+0x5f2>
lea    0xc0(%rsp),%r15
mov    $0x2,%ecx
mov    %ecx,(%r12)
movl   $0x5,0x0(%rbp)
mov    $0x4,%ebp
lea    0x1(%r14),%ecx
cmp    %eax,%ecx
jge    1b0c <parse_line+0x9cc>
add    $0xffffffffffffffff,%rdx
add    $0x1,%r14
mov    %edx,%r8d
mov    %eax,%esi
lea    0x140(%rsp),%rdi
movl   $0x0,0x18(%rsp)
xor    %eax,%eax
mov    %r8,0x28(%rsp)
mov    %rsi,0x20(%rsp)
mov    0x0(%r13,%r14,1),%cl
movslq %eax,%rdx
cmp    $0x3b,%cl
je     1796 <parse_line+0x656>
cmp    $0x29,%cl
jne    1847 <parse_line+0x707>
cmp    %r8,%r14
jne    1847 <parse_line+0x707>
movb   $0x0,0x140(%rsp,%rdx,1)
mov    $0xffffffde,%ecx
mov    0x140(%rsp),%bl
test   %bl,%bl
je     1b63 <parse_line+0xa23>
cmp    $0x3d,%bl
je     1b63 <parse_line+0xa23>
call   1040 <strlen@plt>
test   %rax,%rax
je     185f <parse_line+0x71f>
add    $0xffffffffffffffff,%rax
xor    %ecx,%ecx
xor    %edx,%edx
xor    %edi,%edi
test   %edx,%edx
je     1810 <parse_line+0x6d0>
nopw   0x0(%rax,%rax,1)
movslq %r12d,%rdx
add    $0x1,%r12d
mov    %bl,0x1e0(%rsp,%rdx,1)
mov    $0x1,%edx
cmp    $0x40,%r12d
je     1b42 <parse_line+0xa02>
cmp    %rcx,%rax
jne    1836 <parse_line+0x6f6>
jmp    185f <parse_line+0x71f>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0xa,%rcx
je     1b49 <parse_line+0xa09>
xor    %edx,%edx
cmp    $0x3d,%bl
movzbl %bl,%esi
cmove  %edi,%esi
sete   %dl
cmove  %edi,%r12d
mov    %sil,0x46(%rsp,%rcx,1)
cmp    %rcx,%rax
je     185f <parse_line+0x71f>
mov    0x141(%rsp,%rcx,1),%bl
add    $0x1,%rcx
test   %edx,%edx
jne    17e0 <parse_line+0x6a0>
jmp    1810 <parse_line+0x6d0>
lea    0x1(%rdx),%eax
mov    %cl,0x140(%rsp,%rdx,1)
cmp    $0x4b,%eax
jne    1aef <parse_line+0x9af>
jmp    1b50 <parse_line+0xa10>
movslq %r12d,%rax
movb   $0x0,0x1e0(%rsp,%rax,1)
mov    %ebp,0x1c(%rsp)
mov    %ebp,%ebx
mov    %r15,%rbp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x46(%rsp),%rdi
mov    %rbp,%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
je     189f <parse_line+0x75f>
add    $0xd,%rbp
add    $0xffffffff,%ebx
jne    1880 <parse_line+0x740>
jmp    1b3b <parse_line+0x9fb>
cmpb   $0x0,0xc(%rbp)
jne    1b57 <parse_line+0xa17>
cmpb   $0x64,0xa(%rbp)
jne    18ed <parse_line+0x7ad>
lea    0x1e0(%rsp),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <is_double@plt>
test   %eax,%eax
je     1b5e <parse_line+0xa1e>
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <atof@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movzbl 0xb(%rbp),%eax
mov    0x30(%rsp),%rcx
movsd  %xmm0,(%rcx,%rax,8)
jmp    1ad3 <parse_line+0x993>
lea    0x1e0(%rsp),%rbx
mov    %rbx,%rdi
lea    0x701(%rip),%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
je     1aaa <parse_line+0x96a>
mov    %rbx,%rdi
lea    0x6f4(%rip),%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
je     1aaa <parse_line+0x96a>
mov    %rbx,%rdi
lea    0x6eb(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x1,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x6d9(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x1,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x6cb(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x2,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x6b9(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x2,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x6ab(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x3,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x699(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x3,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x68b(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x4,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x679(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x4,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x66b(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x5,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x659(%rip),%rsi
call   1060 <strcmp@plt>
mov    $0x5,%ecx
test   %eax,%eax
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x64f(%rip),%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
je     1afe <parse_line+0x9be>
mov    %rbx,%rdi
lea    0x642(%rip),%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
mov    $0x6,%ecx
je     1aac <parse_line+0x96c>
mov    %rbx,%rdi
lea    0x638(%rip),%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
je     1b05 <parse_line+0x9c5>
lea    0x1e0(%rsp),%rdi
lea    0x626(%rip),%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
mov    $0x7,%ecx
je     1aac <parse_line+0x96c>
cmpl   $0x0,0x18(%rsp)
mov    0x17(%rsp),%dl
jne    1abb <parse_line+0x97b>
jmp    1b77 <parse_line+0xa37>
xor    %ecx,%ecx
lea    (%rcx,%rcx,2),%rax
lea    0x549(%rip),%rcx
mov    0x14(%rcx,%rax,8),%dl
movzbl 0xb(%rbp),%eax
mov    0x38(%rsp),%rcx
mov    %dl,0x17(%rsp)
mov    %dl,(%rcx,%rax,1)
movl   $0x1,0x18(%rsp)
mov    0x28(%rsp),%r8
mov    0x20(%rsp),%rsi
lea    0x140(%rsp),%rdi
movb   $0x1,0xc(%rbp)
xor    %eax,%eax
mov    0x1c(%rsp),%ebp
add    $0x1,%r14
cmp    %rsi,%r14
jne    1777 <parse_line+0x637>
jmp    1b0c <parse_line+0x9cc>
mov    $0x6,%ecx
jmp    1aac <parse_line+0x96c>
mov    $0x7,%ecx
jmp    1aac <parse_line+0x96c>
mov    %ebp,%eax
lea    (%rax,%rax,2),%rcx
lea    (%rax,%rcx,4),%rax
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
cmpb   $0x0,0xc(%r15,%rcx,1)
je     1b34 <parse_line+0x9f4>
add    $0xd,%rcx
cmp    %ecx,%eax
jne    1b20 <parse_line+0x9e0>
xor    %ecx,%ecx
jmp    1b63 <parse_line+0xa23>
mov    $0xfffffff2,%ecx
jmp    1b63 <parse_line+0xa23>
mov    $0xffffffe0,%ecx
jmp    1b63 <parse_line+0xa23>
mov    $0xffffffe1,%ecx
jmp    1b63 <parse_line+0xa23>
mov    $0xffffffe2,%ecx
jmp    1b63 <parse_line+0xa23>
mov    $0xfffffffc,%ecx
jmp    1b63 <parse_line+0xa23>
mov    $0xffffffdf,%ecx
jmp    1b63 <parse_line+0xa23>
mov    $0xfffffff4,%ecx
mov    %ecx,%eax
add    $0x2f8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0xffffffe8,%ecx
jmp    1b63 <parse_line+0xa23>

LLVM IR (-O0):
%struct.tCOL = type { [10 x i8], [10 x i8], i32 }
%struct.tS = type { [10 x i8], i8, i8, i8 }
@__const.parse_line.col_tab = [8 x %struct.tCOL] [%struct.tCOL { [10 x i8] c"white\00\00\00\00\00", [10 x i8] c"c1\00\00\00\00\00\00\00\00", i32 0 }, %struct.tCOL { [10 x i8] c"red\00\00\00\00\00\00\00", [10 x i8] c"c2\00\00\00\00\00\00\00\00", i32 32 }, %struct.tCOL { [10 x i8] c"green\00\00\00\00\00", [10 x i8] c"c3\00\00\00\00\00\00\00\00", i32 64 }, %struct.tCOL { [10 x i8] c"blue\00\00\00\00\00\00", [10 x i8] c"c4\00\00\00\00\00\00\00\00", i32 96 }, %struct.tCOL { [10 x i8] c"yellow\00\00\00\00", [10 x i8] c"c5\00\00\00\00\00\00\00\00", i32 128 }, %struct.tCOL { [10 x i8] c"cyan\00\00\00\00\00\00", [10 x i8] c"c6\00\00\00\00\00\00\00\00", i32 160 }, %struct.tCOL { [10 x i8] c"magenta\00\00\00", [10 x i8] c"c7\00\00\00\00\00\00\00\00", i32 192 }, %struct.tCOL { [10 x i8] c"blue2\00\00\00\00\00", [10 x i8] c"c8\00\00\00\00\00\00\00\00", i32 224 }]
@__const.parse_line.s_sph = [5 x %struct.tS] [%struct.tS { [10 x i8] c"x0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"z0\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"r\00\00\00\00\00\00\00\00\00", i8 100, i8 3, i8 0 }, %struct.tS { [10 x i8] c"color\00\00\00\00\00", i8 115, i8 0, i8 0 }]
@__const.parse_line.s_pln = [9 x %struct.tS] [%struct.tS { [10 x i8] c"x0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"z0\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"a\00\00\00\00\00\00\00\00\00", i8 100, i8 3, i8 0 }, %struct.tS { [10 x i8] c"b\00\00\00\00\00\00\00\00\00", i8 100, i8 4, i8 0 }, %struct.tS { [10 x i8] c"c\00\00\00\00\00\00\00\00\00", i8 100, i8 5, i8 0 }, %struct.tS { [10 x i8] c"color1\00\00\00\00", i8 115, i8 0, i8 0 }, %struct.tS { [10 x i8] c"color2\00\00\00\00", i8 115, i8 1, i8 0 }, %struct.tS { [10 x i8] c"texscale\00\00", i8 100, i8 6, i8 0 }]
@__const.parse_line.s_cxy = [4 x %struct.tS] [%struct.tS { [10 x i8] c"x0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"r\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"color\00\00\00\00\00", i8 115, i8 0, i8 0 }]
@__const.parse_line.s_cxz = [4 x %struct.tS] [%struct.tS { [10 x i8] c"x0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"z0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"r\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"color\00\00\00\00\00", i8 115, i8 0, i8 0 }]
@__const.parse_line.s_cyz = [4 x %struct.tS] [%struct.tS { [10 x i8] c"y0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"z0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"r\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"color\00\00\00\00\00", i8 115, i8 0, i8 0 }]
@__const.parse_line.s_lig = [3 x %struct.tS] [%struct.tS { [10 x i8] c"x\00\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y\00\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"z\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }]
@__const.parse_line.s_cam = [7 x %struct.tS] [%struct.tS { [10 x i8] c"x\00\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y\00\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"z\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"lx\00\00\00\00\00\00\00\00", i8 100, i8 3, i8 0 }, %struct.tS { [10 x i8] c"ly\00\00\00\00\00\00\00\00", i8 100, i8 4, i8 0 }, %struct.tS { [10 x i8] c"lz\00\00\00\00\00\00\00\00", i8 100, i8 5, i8 0 }, %struct.tS { [10 x i8] c"rot\00\00\00\00\00\00\00", i8 100, i8 6, i8 0 }]
@.str = [7 x i8] c"sphere\00"
@.str.1 = [6 x i8] c"plane\00"
@.str.2 = [7 x i8] c"camera\00"
@.str.3 = [6 x i8] c"light\00"
@.str.4 = [9 x i8] c"cylinder\00"
@.str.5 = [11 x i8] c"cylinderxy\00"
@.str.6 = [11 x i8] c"cylinderxz\00"
@.str.7 = [11 x i8] c"cylinderyz\00"
define i32 @parse_line(i8* %0, i32* %1, i32* %2, double* %3, i8* %4) {
%6 = alloca i32
%7 = alloca i8*
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca double*
%11 = alloca i8*
%12 = alloca [8 x %struct.tCOL]
%13 = alloca [5 x %struct.tS]
%14 = alloca [9 x %struct.tS]
%15 = alloca [4 x %struct.tS]
%16 = alloca [4 x %struct.tS]
%17 = alloca [4 x %struct.tS]
%18 = alloca [3 x %struct.tS]
%19 = alloca [7 x %struct.tS]
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca [16 x i8]
%25 = alloca i8
%26 = alloca %struct.tS*
%27 = alloca %struct.tS*
%28 = alloca [75 x i8]
%29 = alloca i32
%30 = alloca [10 x i8]
%31 = alloca [64 x i8]
%32 = alloca i32
%33 = alloca i32
%34 = alloca i8
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
store i8* %0, i8** %7
store i32* %1, i32** %8
store i32* %2, i32** %9
store double* %3, double** %10
store i8* %4, i8** %11
%38 = bitcast [8 x %struct.tCOL]* %12 to i8*
%39 = bitcast [5 x %struct.tS]* %13 to i8*
%40 = bitcast [9 x %struct.tS]* %14 to i8*
%41 = bitcast [4 x %struct.tS]* %15 to i8*
%42 = bitcast [4 x %struct.tS]* %16 to i8*
%43 = bitcast [4 x %struct.tS]* %17 to i8*
%44 = bitcast [3 x %struct.tS]* %18 to i8*
%45 = bitcast [7 x %struct.tS]* %19 to i8*
%46 = load i8*, i8** %7
%47 = call i64 @strlen(i8* %46)
%48 = trunc i64 %47 to i32
store i32 %48, i32* %20
store i32 0, i32* %29
store i32 0, i32* %37
%49 = load i8*, i8** %7
%50 = load i32, i32* %20
%51 = sub nsw i32 %50, 1
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %49, i64 %52
%54 = load i8, i8* %53
%55 = sext i8 %54 to i32
%56 = icmp ne i32 %55, 41
br i1 %56, label %57, label %58
57: ; preds = %5
store i32 -13, i32* %6
br label %376
58: ; preds = %5
store i32 0, i32* %21
br label %59
59: ; preds = %87, %58
%60 = load i32, i32* %21
%61 = icmp eq i32 %60, 16
br i1 %61, label %62, label %63
62: ; preds = %59
store i32 -8, i32* %6
br label %376
63: ; preds = %59
%64 = load i8*, i8** %7
%65 = load i32, i32* %21
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %64, i64 %66
%68 = load i8, i8* %67
store i8 %68, i8* %25
%69 = load i8, i8* %25
%70 = sext i8 %69 to i32
%71 = icmp eq i32 %70, 40
br i1 %71, label %72, label %73
72: ; preds = %63
br label %90
73: ; preds = %63
%74 = load i8, i8* %25
%75 = sext i8 %74 to i32
%76 = icmp slt i32 %75, 97
br i1 %76, label %81, label %77
77: ; preds = %73
%78 = load i8, i8* %25
%79 = sext i8 %78 to i32
%80 = icmp sgt i32 %79, 122
br i1 %80, label %81, label %82
81: ; preds = %77, %73
store i32 -7, i32* %6
br label %376
82: ; preds = %77
%83 = load i8, i8* %25
%84 = load i32, i32* %21
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 %85
store i8 %83, i8* %86
br label %87
87: ; preds = %82
%88 = load i32, i32* %21
%89 = add nsw i32 %88, 1
store i32 %89, i32* %21
br label %59
90: ; preds = %72
%91 = load i32, i32* %21
%92 = add nsw i32 %91, 1
store i32 %92, i32* %21
%93 = sext i32 %91 to i64
%94 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 %93
store i8 0, i8* %94
%95 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 0
%96 = call i32 @strcmp(i8* %95, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%97 = icmp eq i32 %96, 0
br i1 %97, label %98, label %101
98: ; preds = %90
%99 = load i32*, i32** %8
store i32 3, i32* %99
%100 = getelementptr inbounds [5 x %struct.tS], [5 x %struct.tS]* %13, i64 0, i64 0
store %struct.tS* %100, %struct.tS** %26
store i32 5, i32* %35
br label %157
101: ; preds = %90
%102 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 0
%103 = call i32 @strcmp(i8* %102, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
%104 = icmp eq i32 %103, 0
br i1 %104, label %105, label %108
105: ; preds = %101
%106 = load i32*, i32** %8
store i32 4, i32* %106
%107 = getelementptr inbounds [9 x %struct.tS], [9 x %struct.tS]* %14, i64 0, i64 0
store %struct.tS* %107, %struct.tS** %26
store i32 9, i32* %35
br label %156
108: ; preds = %101
%109 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 0
%110 = call i32 @strcmp(i8* %109, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%111 = icmp eq i32 %110, 0
br i1 %111, label %112, label %115
112: ; preds = %108
%113 = load i32*, i32** %8
store i32 1, i32* %113
%114 = getelementptr inbounds [7 x %struct.tS], [7 x %struct.tS]* %19, i64 0, i64 0
store %struct.tS* %114, %struct.tS** %26
store i32 7, i32* %35
br label %155
115: ; preds = %108
%116 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 0
%117 = call i32 @strcmp(i8* %116, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%118 = icmp eq i32 %117, 0
br i1 %118, label %119, label %122
119: ; preds = %115
%120 = load i32*, i32** %8
store i32 2, i32* %120
%121 = getelementptr inbounds [3 x %struct.tS], [3 x %struct.tS]* %18, i64 0, i64 0
store %struct.tS* %121, %struct.tS** %26
store i32 3, i32* %35
br label %154
122: ; preds = %115
%123 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 0
%124 = call i32 @strncmp(i8* %123, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i64 8)
%125 = icmp eq i32 %124, 0
br i1 %125, label %126, label %152
126: ; preds = %122
%127 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 0
%128 = call i32 @strcmp(i8* %127, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0))
%129 = icmp eq i32 %128, 0
br i1 %129, label %130, label %133
130: ; preds = %126
%131 = load i32*, i32** %9
store i32 1, i32* %131
%132 = getelementptr inbounds [4 x %struct.tS], [4 x %struct.tS]* %15, i64 0, i64 0
store %struct.tS* %132, %struct.tS** %26
br label %150
133: ; preds = %126
%134 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 0
%135 = call i32 @strcmp(i8* %134, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0))
%136 = icmp eq i32 %135, 0
br i1 %136, label %137, label %140
137: ; preds = %133
%138 = load i32*, i32** %9
store i32 2, i32* %138
%139 = getelementptr inbounds [4 x %struct.tS], [4 x %struct.tS]* %16, i64 0, i64 0
store %struct.tS* %139, %struct.tS** %26
br label %149
140: ; preds = %133
%141 = getelementptr inbounds [16 x i8], [16 x i8]* %24, i64 0, i64 0
%142 = call i32 @strcmp(i8* %141, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0))
%143 = icmp eq i32 %142, 0
br i1 %143, label %144, label %147
144: ; preds = %140
%145 = load i32*, i32** %9
store i32 3, i32* %145
%146 = getelementptr inbounds [4 x %struct.tS], [4 x %struct.tS]* %17, i64 0, i64 0
store %struct.tS* %146, %struct.tS** %26
br label %148
147: ; preds = %140
store i32 -10, i32* %6
br label %376
148: ; preds = %144
br label %149
149: ; preds = %148, %137
br label %150
150: ; preds = %149, %130
%151 = load i32*, i32** %8
store i32 5, i32* %151
store i32 4, i32* %35
br label %153
152: ; preds = %122
store i32 -10, i32* %6
br label %376
153: ; preds = %150
br label %154
154: ; preds = %153, %119
br label %155
155: ; preds = %154, %112
br label %156
156: ; preds = %155, %105
br label %157
157: ; preds = %156, %98
br label %158
158: ; preds = %354, %157
%159 = load i32, i32* %21
%160 = load i32, i32* %20
%161 = icmp slt i32 %159, %160
br i1 %161, label %162, label %357
162: ; preds = %158
%163 = load i8*, i8** %7
%164 = load i32, i32* %21
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds i8, i8* %163, i64 %165
%167 = load i8, i8* %166
store i8 %167, i8* %25
%168 = load i8, i8* %25
%169 = sext i8 %168 to i32
%170 = icmp eq i32 %169, 59
br i1 %170, label %180, label %171
171: ; preds = %162
%172 = load i8, i8* %25
%173 = sext i8 %172 to i32
%174 = icmp eq i32 %173, 41
br i1 %174, label %175, label %343
175: ; preds = %171
%176 = load i32, i32* %21
%177 = load i32, i32* %20
%178 = sub nsw i32 %177, 1
%179 = icmp eq i32 %176, %178
br i1 %179, label %180, label %343
180: ; preds = %175, %162
%181 = load i32, i32* %29
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [75 x i8], [75 x i8]* %28, i64 0, i64 %182
store i8 0, i8* %183
store i32 0, i32* %29
%184 = getelementptr inbounds [75 x i8], [75 x i8]* %28, i64 0, i64 0
%185 = call i64 @strlen(i8* %184)
%186 = icmp ne i64 %185, 0
br i1 %186, label %187, label %192
187: ; preds = %180
%188 = getelementptr inbounds [75 x i8], [75 x i8]* %28, i64 0, i64 0
%189 = load i8, i8* %188
%190 = sext i8 %189 to i32
%191 = icmp eq i32 %190, 61
br i1 %191, label %192, label %193
192: ; preds = %187, %180
store i32 -34, i32* %6
br label %376
193: ; preds = %187
store i32 0, i32* %32
store i32 0, i32* %22
br label %194
194: ; preds = %238, %193
%195 = load i32, i32* %22
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds [75 x i8], [75 x i8]* %28, i64 0, i64 0
%198 = call i64 @strlen(i8* %197)
%199 = icmp ult i64 %196, %198
br i1 %199, label %200, label %241
200: ; preds = %194
%201 = load i32, i32* %22
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds [75 x i8], [75 x i8]* %28, i64 0, i64 %202
%204 = load i8, i8* %203
store i8 %204, i8* %25
%205 = load i32, i32* %32
%206 = icmp eq i32 %205, 0
br i1 %206, label %207, label %227
207: ; preds = %200
%208 = load i32, i32* %22
%209 = icmp eq i32 %208, 10
br i1 %209, label %210, label %211
210: ; preds = %207
store i32 -30, i32* %6
br label %376
211: ; preds = %207
%212 = load i8, i8* %25
%213 = sext i8 %212 to i32
%214 = icmp eq i32 %213, 61
br i1 %214, label %215, label %221
215: ; preds = %211
%216 = load i32, i32* %32
%217 = add nsw i32 %216, 1
store i32 %217, i32* %32
store i32 0, i32* %23
%218 = load i32, i32* %22
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds [10 x i8], [10 x i8]* %30, i64 0, i64 %219
store i8 0, i8* %220
br label %226
221: ; preds = %211
%222 = load i8, i8* %25
%223 = load i32, i32* %22
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds [10 x i8], [10 x i8]* %30, i64 0, i64 %224
store i8 %222, i8* %225
br label %226
226: ; preds = %221, %215
br label %237
227: ; preds = %200
%228 = load i8, i8* %25
%229 = load i32, i32* %23
%230 = add nsw i32 %229, 1
store i32 %230, i32* %23
%231 = sext i32 %229 to i64
%232 = getelementptr inbounds [64 x i8], [64 x i8]* %31, i64 0, i64 %231
store i8 %228, i8* %232
%233 = load i32, i32* %23
%234 = icmp eq i32 %233, 64
br i1 %234, label %235, label %236
235: ; preds = %227
store i32 -31, i32* %6
br label %376
236: ; preds = %227
br label %237
237: ; preds = %236, %226
br label %238
238: ; preds = %237
%239 = load i32, i32* %22
%240 = add nsw i32 %239, 1
store i32 %240, i32* %22
br label %194
241: ; preds = %194
%242 = load i32, i32* %23
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds [64 x i8], [64 x i8]* %31, i64 0, i64 %243
store i8 0, i8* %244
%245 = load %struct.tS*, %struct.tS** %26
store %struct.tS* %245, %struct.tS** %27
store i32 0, i32* %33
store i32 0, i32* %22
br label %246
246: ; preds = %259, %241
%247 = load i32, i32* %22
%248 = load i32, i32* %35
%249 = icmp slt i32 %247, %248
br i1 %249, label %250, label %264
250: ; preds = %246
%251 = getelementptr inbounds [10 x i8], [10 x i8]* %30, i64 0, i64 0
%252 = load %struct.tS*, %struct.tS** %27
%253 = getelementptr inbounds %struct.tS, %struct.tS* %252, i32 0, i32 0
%254 = getelementptr inbounds [10 x i8], [10 x i8]* %253, i64 0, i64 0
%255 = call i32 @strcmp(i8* %251, i8* %254)
%256 = icmp eq i32 %255, 0
br i1 %256, label %257, label %258
257: ; preds = %250
store i32 1, i32* %33
br label %264
258: ; preds = %250
br label %259
259: ; preds = %258
%260 = load i32, i32* %22
%261 = add nsw i32 %260, 1
store i32 %261, i32* %22
%262 = load %struct.tS*, %struct.tS** %27
%263 = getelementptr inbounds %struct.tS, %struct.tS* %262, i32 1
store %struct.tS* %263, %struct.tS** %27
br label %246
264: ; preds = %257, %246
%265 = load i32, i32* %33
%266 = icmp ne i32 %265, 0
br i1 %266, label %268, label %267
267: ; preds = %264
store i32 -32, i32* %6
br label %376
268: ; preds = %264
%269 = load %struct.tS*, %struct.tS** %27
%270 = getelementptr inbounds %struct.tS, %struct.tS* %269, i32 0, i32 3
%271 = load i8, i8* %270
%272 = icmp ne i8 %271, 0
br i1 %272, label %273, label %274
273: ; preds = %268
store i32 -33, i32* %6
br label %376
274: ; preds = %268
%275 = load %struct.tS*, %struct.tS** %27
%276 = getelementptr inbounds %struct.tS, %struct.tS* %275, i32 0, i32 1
%277 = load i8, i8* %276
%278 = sext i8 %277 to i32
%279 = icmp eq i32 %278, 100
br i1 %279, label %280, label %295
280: ; preds = %274
%281 = getelementptr inbounds [64 x i8], [64 x i8]* %31, i64 0, i64 0
%282 = call i32 (i8*, ...) bitcast (i32 (...)* @is_double to i32 (i8*, ...)*)(i8* %281)
%283 = icmp ne i32 %282, 0
br i1 %283, label %285, label %284
284: ; preds = %280
store i32 -12, i32* %6
br label %376
285: ; preds = %280
%286 = getelementptr inbounds [64 x i8], [64 x i8]* %31, i64 0, i64 0
%287 = call i32 (i8*, ...) bitcast (i32 (...)* @atof to i32 (i8*, ...)*)(i8* %286)
%288 = sitofp i32 %287 to double
%289 = load double*, double** %10
%290 = load %struct.tS*, %struct.tS** %27
%291 = getelementptr inbounds %struct.tS, %struct.tS* %290, i32 0, i32 2
%292 = load i8, i8* %291
%293 = zext i8 %292 to i64
%294 = getelementptr inbounds double, double* %289, i64 %293
store double %288, double* %294
br label %340
295: ; preds = %274
store i32 0, i32* %36
br label %296
296: ; preds = %325, %295
%297 = load i32, i32* %36
%298 = icmp slt i32 %297, 8
br i1 %298, label %299, label %328
299: ; preds = %296
%300 = getelementptr inbounds [64 x i8], [64 x i8]* %31, i64 0, i64 0
%301 = load i32, i32* %36
%302 = sext i32 %301 to i64
%303 = getelementptr inbounds [8 x %struct.tCOL], [8 x %struct.tCOL]* %12, i64 0, i64 %302
%304 = getelementptr inbounds %struct.tCOL, %struct.tCOL* %303, i32 0, i32 0
%305 = getelementptr inbounds [10 x i8], [10 x i8]* %304, i64 0, i64 0
%306 = call i32 @strcmp(i8* %300, i8* %305)
%307 = icmp eq i32 %306, 0
br i1 %307, label %317, label %308
308: ; preds = %299
%309 = getelementptr inbounds [64 x i8], [64 x i8]* %31, i64 0, i64 0
%310 = load i32, i32* %36
%311 = sext i32 %310 to i64
%312 = getelementptr inbounds [8 x %struct.tCOL], [8 x %struct.tCOL]* %12, i64 0, i64 %311
%313 = getelementptr inbounds %struct.tCOL, %struct.tCOL* %312, i32 0, i32 1
%314 = getelementptr inbounds [10 x i8], [10 x i8]* %313, i64 0, i64 0
%315 = call i32 @strcmp(i8* %309, i8* %314)
%316 = icmp eq i32 %315, 0
br i1 %316, label %317, label %324
317: ; preds = %308, %299
%318 = load i32, i32* %36
%319 = sext i32 %318 to i64
%320 = getelementptr inbounds [8 x %struct.tCOL], [8 x %struct.tCOL]* %12, i64 0, i64 %319
%321 = getelementptr inbounds %struct.tCOL, %struct.tCOL* %320, i32 0, i32 2
%322 = load i32, i32* %321
%323 = trunc i32 %322 to i8
store i8 %323, i8* %34
store i32 1, i32* %37
br label %328
324: ; preds = %308
br label %325
325: ; preds = %324
%326 = load i32, i32* %36
%327 = add nsw i32 %326, 1
store i32 %327, i32* %36
br label %296
328: ; preds = %317, %296
%329 = load i32, i32* %37
%330 = icmp ne i32 %329, 0
br i1 %330, label %332, label %331
331: ; preds = %328
store i32 -24, i32* %6
br label %376
332: ; preds = %328
%333 = load i8, i8* %34
%334 = load i8*, i8** %11
%335 = load %struct.tS*, %struct.tS** %27
%336 = getelementptr inbounds %struct.tS, %struct.tS* %335, i32 0, i32 2
%337 = load i8, i8* %336
%338 = zext i8 %337 to i64
%339 = getelementptr inbounds i8, i8* %334, i64 %338
store i8 %333, i8* %339
br label %340
340: ; preds = %332, %285
%341 = load %struct.tS*, %struct.tS** %27
%342 = getelementptr inbounds %struct.tS, %struct.tS* %341, i32 0, i32 3
store i8 1, i8* %342
br label %353
343: ; preds = %175, %171
%344 = load i8, i8* %25
%345 = load i32, i32* %29
%346 = add nsw i32 %345, 1
store i32 %346, i32* %29
%347 = sext i32 %345 to i64
%348 = getelementptr inbounds [75 x i8], [75 x i8]* %28, i64 0, i64 %347
store i8 %344, i8* %348
%349 = load i32, i32* %29
%350 = icmp eq i32 %349, 75
br i1 %350, label %351, label %352
351: ; preds = %343
store i32 -4, i32* %6
br label %376
352: ; preds = %343
br label %353
353: ; preds = %352, %340
br label %354
354: ; preds = %353
%355 = load i32, i32* %21
%356 = add nsw i32 %355, 1
store i32 %356, i32* %21
br label %158
357: ; preds = %158
%358 = load %struct.tS*, %struct.tS** %26
store %struct.tS* %358, %struct.tS** %27
store i32 0, i32* %21
br label %359
359: ; preds = %370, %357
%360 = load i32, i32* %21
%361 = load i32, i32* %35
%362 = icmp slt i32 %360, %361
br i1 %362, label %363, label %375
363: ; preds = %359
%364 = load %struct.tS*, %struct.tS** %27
%365 = getelementptr inbounds %struct.tS, %struct.tS* %364, i32 0, i32 3
%366 = load i8, i8* %365
%367 = icmp ne i8 %366, 0
br i1 %367, label %369, label %368
368: ; preds = %363
store i32 -14, i32* %6
br label %376
369: ; preds = %363
br label %370
370: ; preds = %369
%371 = load i32, i32* %21
%372 = add nsw i32 %371, 1
store i32 %372, i32* %21
%373 = load %struct.tS*, %struct.tS** %27
%374 = getelementptr inbounds %struct.tS, %struct.tS* %373, i32 1
store %struct.tS* %374, %struct.tS** %27
br label %359
375: ; preds = %359
store i32 0, i32* %6
br label %376
376: ; preds = %375, %368, %351, %331, %284, %273, %267, %235, %210, %192, %152, %147, %81, %62, %57
%377 = load i32, i32* %6
ret i32 %377
}

LLVM IR (-O2):
%struct.tCOL = type { [10 x i8], [10 x i8], i32 }
%struct.tS = type { [10 x i8], i8, i8, i8 }
@__const.parse_line.col_tab = [8 x %struct.tCOL] [%struct.tCOL { [10 x i8] c"white\00\00\00\00\00", [10 x i8] c"c1\00\00\00\00\00\00\00\00", i32 0 }, %struct.tCOL { [10 x i8] c"red\00\00\00\00\00\00\00", [10 x i8] c"c2\00\00\00\00\00\00\00\00", i32 32 }, %struct.tCOL { [10 x i8] c"green\00\00\00\00\00", [10 x i8] c"c3\00\00\00\00\00\00\00\00", i32 64 }, %struct.tCOL { [10 x i8] c"blue\00\00\00\00\00\00", [10 x i8] c"c4\00\00\00\00\00\00\00\00", i32 96 }, %struct.tCOL { [10 x i8] c"yellow\00\00\00\00", [10 x i8] c"c5\00\00\00\00\00\00\00\00", i32 128 }, %struct.tCOL { [10 x i8] c"cyan\00\00\00\00\00\00", [10 x i8] c"c6\00\00\00\00\00\00\00\00", i32 160 }, %struct.tCOL { [10 x i8] c"magenta\00\00\00", [10 x i8] c"c7\00\00\00\00\00\00\00\00", i32 192 }, %struct.tCOL { [10 x i8] c"blue2\00\00\00\00\00", [10 x i8] c"c8\00\00\00\00\00\00\00\00", i32 224 }]
@__const.parse_line.s_sph = [5 x %struct.tS] [%struct.tS { [10 x i8] c"x0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"z0\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"r\00\00\00\00\00\00\00\00\00", i8 100, i8 3, i8 0 }, %struct.tS { [10 x i8] c"color\00\00\00\00\00", i8 115, i8 0, i8 0 }]
@__const.parse_line.s_pln = [9 x %struct.tS] [%struct.tS { [10 x i8] c"x0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"z0\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"a\00\00\00\00\00\00\00\00\00", i8 100, i8 3, i8 0 }, %struct.tS { [10 x i8] c"b\00\00\00\00\00\00\00\00\00", i8 100, i8 4, i8 0 }, %struct.tS { [10 x i8] c"c\00\00\00\00\00\00\00\00\00", i8 100, i8 5, i8 0 }, %struct.tS { [10 x i8] c"color1\00\00\00\00", i8 115, i8 0, i8 0 }, %struct.tS { [10 x i8] c"color2\00\00\00\00", i8 115, i8 1, i8 0 }, %struct.tS { [10 x i8] c"texscale\00\00", i8 100, i8 6, i8 0 }]
@__const.parse_line.s_cxy = [4 x %struct.tS] [%struct.tS { [10 x i8] c"x0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"r\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"color\00\00\00\00\00", i8 115, i8 0, i8 0 }]
@__const.parse_line.s_cxz = [4 x %struct.tS] [%struct.tS { [10 x i8] c"x0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"z0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"r\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"color\00\00\00\00\00", i8 115, i8 0, i8 0 }]
@__const.parse_line.s_cyz = [4 x %struct.tS] [%struct.tS { [10 x i8] c"y0\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"z0\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"r\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"color\00\00\00\00\00", i8 115, i8 0, i8 0 }]
@__const.parse_line.s_lig = [3 x %struct.tS] [%struct.tS { [10 x i8] c"x\00\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y\00\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"z\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }]
@__const.parse_line.s_cam = [7 x %struct.tS] [%struct.tS { [10 x i8] c"x\00\00\00\00\00\00\00\00\00", i8 100, i8 0, i8 0 }, %struct.tS { [10 x i8] c"y\00\00\00\00\00\00\00\00\00", i8 100, i8 1, i8 0 }, %struct.tS { [10 x i8] c"z\00\00\00\00\00\00\00\00\00", i8 100, i8 2, i8 0 }, %struct.tS { [10 x i8] c"lx\00\00\00\00\00\00\00\00", i8 100, i8 3, i8 0 }, %struct.tS { [10 x i8] c"ly\00\00\00\00\00\00\00\00", i8 100, i8 4, i8 0 }, %struct.tS { [10 x i8] c"lz\00\00\00\00\00\00\00\00", i8 100, i8 5, i8 0 }, %struct.tS { [10 x i8] c"rot\00\00\00\00\00\00\00", i8 100, i8 6, i8 0 }]
@.str = [7 x i8] c"sphere\00"
@.str.1 = [6 x i8] c"plane\00"
@.str.2 = [7 x i8] c"camera\00"
@.str.3 = [6 x i8] c"light\00"
@.str.5 = [11 x i8] c"cylinderxy\00"
@.str.6 = [11 x i8] c"cylinderxz\00"
@.str.7 = [11 x i8] c"cylinderyz\00"
define i32 @parse_line(i8* nocapture %0, i32* nocapture writeonly %1, i32* nocapture writeonly %2, double* nocapture writeonly %3, i8* nocapture writeonly %4) {
%6 = alloca [5 x %struct.tS]
%7 = alloca [9 x %struct.tS]
%8 = alloca [4 x %struct.tS]
%9 = alloca [4 x %struct.tS]
%10 = alloca [4 x %struct.tS]
%11 = alloca [3 x %struct.tS]
%12 = alloca [7 x %struct.tS]
%13 = alloca [16 x i8]
%14 = alloca [75 x i8]
%15 = alloca [10 x i8]
%16 = alloca [64 x i8]
%17 = getelementptr inbounds [5 x %struct.tS], [5 x %struct.tS]* %6, i64 0, i64 0, i32 0, i64 0
%18 = getelementptr inbounds [9 x %struct.tS], [9 x %struct.tS]* %7, i64 0, i64 0, i32 0, i64 0
%19 = getelementptr inbounds [4 x %struct.tS], [4 x %struct.tS]* %8, i64 0, i64 0, i32 0, i64 0
%20 = getelementptr inbounds [4 x %struct.tS], [4 x %struct.tS]* %9, i64 0, i64 0, i32 0, i64 0
%21 = getelementptr inbounds [4 x %struct.tS], [4 x %struct.tS]* %10, i64 0, i64 0, i32 0, i64 0
%22 = getelementptr inbounds [3 x %struct.tS], [3 x %struct.tS]* %11, i64 0, i64 0, i32 0, i64 0
%23 = getelementptr inbounds [7 x %struct.tS], [7 x %struct.tS]* %12, i64 0, i64 0, i32 0, i64 0
%24 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%25 = trunc i64 %24 to i32
%26 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 0
%27 = getelementptr inbounds [75 x i8], [75 x i8]* %14, i64 0, i64 0
%28 = getelementptr inbounds [10 x i8], [10 x i8]* %15, i64 0, i64 0
%29 = getelementptr inbounds [64 x i8], [64 x i8]* %16, i64 0, i64 0
%30 = add nsw i32 %25, -1
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %0, i64 %31
%33 = load i8, i8* %32
%34 = icmp eq i8 %33, 41
br i1 %34, label %35, label %374
35: ; preds = %5
%36 = load i8, i8* %0
%37 = icmp eq i8 %36, 40
br i1 %37, label %162, label %38
38: ; preds = %35
%39 = add i8 %36, -123
%40 = icmp ult i8 %39, -26
br i1 %40, label %374, label %41
41: ; preds = %38
store i8 %36, i8* %26
%42 = getelementptr inbounds i8, i8* %0, i64 1
%43 = load i8, i8* %42
%44 = icmp eq i8 %43, 40
br i1 %44, label %162, label %45
45: ; preds = %41
%46 = add i8 %43, -123
%47 = icmp ult i8 %46, -26
br i1 %47, label %374, label %48
48: ; preds = %45
%49 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 1
store i8 %43, i8* %49
%50 = getelementptr inbounds i8, i8* %0, i64 2
%51 = load i8, i8* %50
%52 = icmp eq i8 %51, 40
br i1 %52, label %162, label %53
53: ; preds = %48
%54 = add i8 %51, -123
%55 = icmp ult i8 %54, -26
br i1 %55, label %374, label %56
56: ; preds = %53
%57 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 2
store i8 %51, i8* %57
%58 = getelementptr inbounds i8, i8* %0, i64 3
%59 = load i8, i8* %58
%60 = icmp eq i8 %59, 40
br i1 %60, label %162, label %61
61: ; preds = %56
%62 = add i8 %59, -123
%63 = icmp ult i8 %62, -26
br i1 %63, label %374, label %64
64: ; preds = %61
%65 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 3
store i8 %59, i8* %65
%66 = getelementptr inbounds i8, i8* %0, i64 4
%67 = load i8, i8* %66
%68 = icmp eq i8 %67, 40
br i1 %68, label %162, label %69
69: ; preds = %64
%70 = add i8 %67, -123
%71 = icmp ult i8 %70, -26
br i1 %71, label %374, label %72
72: ; preds = %69
%73 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 4
store i8 %67, i8* %73
%74 = getelementptr inbounds i8, i8* %0, i64 5
%75 = load i8, i8* %74
%76 = icmp eq i8 %75, 40
br i1 %76, label %162, label %77
77: ; preds = %72
%78 = add i8 %75, -123
%79 = icmp ult i8 %78, -26
br i1 %79, label %374, label %80
80: ; preds = %77
%81 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 5
store i8 %75, i8* %81
%82 = getelementptr inbounds i8, i8* %0, i64 6
%83 = load i8, i8* %82
%84 = icmp eq i8 %83, 40
br i1 %84, label %162, label %85
85: ; preds = %80
%86 = add i8 %83, -123
%87 = icmp ult i8 %86, -26
br i1 %87, label %374, label %88
88: ; preds = %85
%89 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 6
store i8 %83, i8* %89
%90 = getelementptr inbounds i8, i8* %0, i64 7
%91 = load i8, i8* %90
%92 = icmp eq i8 %91, 40
br i1 %92, label %162, label %93
93: ; preds = %88
%94 = add i8 %91, -123
%95 = icmp ult i8 %94, -26
br i1 %95, label %374, label %96
96: ; preds = %93
%97 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 7
store i8 %91, i8* %97
%98 = getelementptr inbounds i8, i8* %0, i64 8
%99 = load i8, i8* %98
%100 = icmp eq i8 %99, 40
br i1 %100, label %162, label %101
101: ; preds = %96
%102 = add i8 %99, -123
%103 = icmp ult i8 %102, -26
br i1 %103, label %374, label %104
104: ; preds = %101
%105 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 8
store i8 %99, i8* %105
%106 = getelementptr inbounds i8, i8* %0, i64 9
%107 = load i8, i8* %106
%108 = icmp eq i8 %107, 40
br i1 %108, label %162, label %109
109: ; preds = %104
%110 = add i8 %107, -123
%111 = icmp ult i8 %110, -26
br i1 %111, label %374, label %112
112: ; preds = %109
%113 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 9
store i8 %107, i8* %113
%114 = getelementptr inbounds i8, i8* %0, i64 10
%115 = load i8, i8* %114
%116 = icmp eq i8 %115, 40
br i1 %116, label %162, label %117
117: ; preds = %112
%118 = add i8 %115, -123
%119 = icmp ult i8 %118, -26
br i1 %119, label %374, label %120
120: ; preds = %117
%121 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 10
store i8 %115, i8* %121
%122 = getelementptr inbounds i8, i8* %0, i64 11
%123 = load i8, i8* %122
%124 = icmp eq i8 %123, 40
br i1 %124, label %162, label %125
125: ; preds = %120
%126 = add i8 %123, -123
%127 = icmp ult i8 %126, -26
br i1 %127, label %374, label %128
128: ; preds = %125
%129 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 11
store i8 %123, i8* %129
%130 = getelementptr inbounds i8, i8* %0, i64 12
%131 = load i8, i8* %130
%132 = icmp eq i8 %131, 40
br i1 %132, label %162, label %133
133: ; preds = %128
%134 = add i8 %131, -123
%135 = icmp ult i8 %134, -26
br i1 %135, label %374, label %136
136: ; preds = %133
%137 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 12
store i8 %131, i8* %137
%138 = getelementptr inbounds i8, i8* %0, i64 13
%139 = load i8, i8* %138
%140 = icmp eq i8 %139, 40
br i1 %140, label %162, label %141
141: ; preds = %136
%142 = add i8 %139, -123
%143 = icmp ult i8 %142, -26
br i1 %143, label %374, label %144
144: ; preds = %141
%145 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 13
store i8 %139, i8* %145
%146 = getelementptr inbounds i8, i8* %0, i64 14
%147 = load i8, i8* %146
%148 = icmp eq i8 %147, 40
br i1 %148, label %162, label %149
149: ; preds = %144
%150 = add i8 %147, -123
%151 = icmp ult i8 %150, -26
br i1 %151, label %374, label %152
152: ; preds = %149
%153 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 14
store i8 %147, i8* %153
%154 = getelementptr inbounds i8, i8* %0, i64 15
%155 = load i8, i8* %154
%156 = icmp eq i8 %155, 40
br i1 %156, label %162, label %157
157: ; preds = %152
%158 = add i8 %155, -123
%159 = icmp ult i8 %158, -26
br i1 %159, label %374, label %160
160: ; preds = %157
%161 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 15
store i8 %155, i8* %161
br label %374
162: ; preds = %152, %144, %136, %128, %120, %112, %104, %96, %88, %80, %72, %64, %56, %48, %41, %35
%163 = phi i64 [ 0, %35 ], [ 1, %41 ], [ 2, %48 ], [ 3, %56 ], [ 4, %64 ], [ 5, %72 ], [ 6, %80 ], [ 7, %88 ], [ 8, %96 ], [ 9, %104 ], [ 10, %112 ], [ 11, %120 ], [ 12, %128 ], [ 13, %136 ], [ 14, %144 ], [ 15, %152 ]
%164 = trunc i64 %163 to i32
%165 = getelementptr inbounds [16 x i8], [16 x i8]* %13, i64 0, i64 %163
store i8 0, i8* %165
%166 = call i32 @bcmp(i8* dereferenceable(7) %26, i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i64 7)
%167 = icmp eq i32 %166, 0
br i1 %167, label %168, label %170
168: ; preds = %162
store i32 3, i32* %1
%169 = getelementptr inbounds [5 x %struct.tS], [5 x %struct.tS]* %6, i64 0, i64 0
br label %202
170: ; preds = %162
%171 = call i32 @bcmp(i8* dereferenceable(6) %26, i8* dereferenceable(6) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i64 6)
%172 = icmp eq i32 %171, 0
br i1 %172, label %173, label %175
173: ; preds = %170
store i32 4, i32* %1
%174 = getelementptr inbounds [9 x %struct.tS], [9 x %struct.tS]* %7, i64 0, i64 0
br label %202
175: ; preds = %170
%176 = call i32 @bcmp(i8* dereferenceable(7) %26, i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i64 7)
%177 = icmp eq i32 %176, 0
br i1 %177, label %178, label %180
178: ; preds = %175
store i32 1, i32* %1
%179 = getelementptr inbounds [7 x %struct.tS], [7 x %struct.tS]* %12, i64 0, i64 0
br label %202
180: ; preds = %175
%181 = call i32 @bcmp(i8* dereferenceable(6) %26, i8* dereferenceable(6) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i64 6)
%182 = icmp eq i32 %181, 0
br i1 %182, label %183, label %185
183: ; preds = %180
store i32 2, i32* %1
%184 = getelementptr inbounds [3 x %struct.tS], [3 x %struct.tS]* %11, i64 0, i64 0
br label %202
185: ; preds = %180
%186 = bitcast [16 x i8]* %13 to i64*
%187 = load i64, i64* %186
%188 = icmp eq i64 %187, 8243105118349457763
br i1 %188, label %189, label %374
189: ; preds = %185
%190 = call i32 @bcmp(i8* dereferenceable(11) %26, i8* dereferenceable(11) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0), i64 11)
%191 = icmp eq i32 %190, 0
br i1 %191, label %198, label %192
192: ; preds = %189
%193 = call i32 @bcmp(i8* dereferenceable(11) %26, i8* dereferenceable(11) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0), i64 11)
%194 = icmp eq i32 %193, 0
br i1 %194, label %198, label %195
195: ; preds = %192
%196 = call i32 @bcmp(i8* dereferenceable(11) %26, i8* dereferenceable(11) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0), i64 11)
%197 = icmp eq i32 %196, 0
br i1 %197, label %198, label %374
198: ; preds = %195, %192, %189
%199 = phi i32 [ 1, %189 ], [ 2, %192 ], [ 3, %195 ]
%200 = phi [4 x %struct.tS]* [ %8, %189 ], [ %9, %192 ], [ %10, %195 ]
store i32 %199, i32* %2
%201 = getelementptr inbounds [4 x %struct.tS], [4 x %struct.tS]* %200, i64 0, i64 0
store i32 5, i32* %1
br label %202
202: ; preds = %173, %183, %198, %178, %168
%203 = phi %struct.tS* [ %169, %168 ], [ %174, %173 ], [ %179, %178 ], [ %184, %183 ], [ %201, %198 ]
%204 = phi i32 [ 5, %168 ], [ 9, %173 ], [ 7, %178 ], [ 3, %183 ], [ 4, %198 ]
%205 = add nuw nsw i32 %164, 1
%206 = icmp slt i32 %205, %25
br i1 %206, label %207, label %363
207: ; preds = %202
%208 = add nuw nsw i64 %163, 1
%209 = zext i32 %30 to i64
%210 = and i64 %24, 4294967295
br label %211
211: ; preds = %207, %356
%212 = phi i64 [ %208, %207 ], [ %361, %356 ]
%213 = phi i32 [ 0, %207 ], [ %360, %356 ]
%214 = phi i8 [ undef, %207 ], [ %359, %356 ]
%215 = phi i32 [ 0, %207 ], [ %358, %356 ]
%216 = phi i32 [ undef, %207 ], [ %357, %356 ]
%217 = getelementptr inbounds i8, i8* %0, i64 %212
%218 = load i8, i8* %217
switch i8 %218, label %351 [
i8 59, label %221
i8 41, label %219
]
219: ; preds = %211
%220 = icmp eq i64 %212, %209
br i1 %220, label %221, label %351
221: ; preds = %211, %219
%222 = sext i32 %215 to i64
%223 = getelementptr inbounds [75 x i8], [75 x i8]* %14, i64 0, i64 %222
store i8 0, i8* %223
%224 = load i8, i8* %27
switch i8 %224, label %225 [
i8 61, label %374
i8 0, label %374
]
225: ; preds = %221
%226 = call i64 @strlen(i8* %27)
%227 = icmp eq i64 %226, 0
br i1 %227, label %255, label %228
228: ; preds = %225, %252
%229 = phi i8 [ %254, %252 ], [ %224, %225 ]
%230 = phi i64 [ %250, %252 ], [ 0, %225 ]
%231 = phi i32 [ %249, %252 ], [ 0, %225 ]
%232 = phi i32 [ %248, %252 ], [ %216, %225 ]
%233 = icmp eq i32 %231, 0
br i1 %233, label %234, label %242
234: ; preds = %228
%235 = icmp eq i64 %230, 10
br i1 %235, label %374, label %236
236: ; preds = %234
%237 = icmp eq i8 %229, 61
%238 = getelementptr inbounds [10 x i8], [10 x i8]* %15, i64 0, i64 %230
%239 = select i1 %237, i8 0, i8 %229
%240 = select i1 %237, i32 0, i32 %232
%241 = zext i1 %237 to i32
store i8 %239, i8* %238
br label %247
242: ; preds = %228
%243 = add nsw i32 %232, 1
%244 = sext i32 %232 to i64
%245 = getelementptr inbounds [64 x i8], [64 x i8]* %16, i64 0, i64 %244
store i8 %229, i8* %245
%246 = icmp eq i32 %243, 64
br i1 %246, label %374, label %247
247: ; preds = %236, %242
%248 = phi i32 [ %243, %242 ], [ %240, %236 ]
%249 = phi i32 [ 1, %242 ], [ %241, %236 ]
%250 = add nuw i64 %230, 1
%251 = icmp eq i64 %250, %226
br i1 %251, label %255, label %252
252: ; preds = %247
%253 = getelementptr inbounds [75 x i8], [75 x i8]* %14, i64 0, i64 %250
%254 = load i8, i8* %253
br label %228
255: ; preds = %247, %225
%256 = phi i32 [ %216, %225 ], [ %248, %247 ]
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds [64 x i8], [64 x i8]* %16, i64 0, i64 %257
store i8 0, i8* %258
br label %259
259: ; preds = %255, %265
%260 = phi %struct.tS* [ %203, %255 ], [ %267, %265 ]
%261 = phi i32 [ 0, %255 ], [ %266, %265 ]
%262 = getelementptr inbounds %struct.tS, %struct.tS* %260, i64 0, i32 0, i64 0
%263 = call i32 @strcmp(i8* %28, i8* dereferenceable(1) %262)
%264 = icmp eq i32 %263, 0
br i1 %264, label %269, label %265
265: ; preds = %259
%266 = add nuw nsw i32 %261, 1
%267 = getelementptr inbounds %struct.tS, %struct.tS* %260, i64 1
%268 = icmp eq i32 %266, %204
br i1 %268, label %374, label %259
269: ; preds = %259
%270 = getelementptr inbounds %struct.tS, %struct.tS* %260, i64 0, i32 3
%271 = load i8, i8* %270
%272 = icmp eq i8 %271, 0
br i1 %272, label %273, label %374
273: ; preds = %269
%274 = getelementptr inbounds %struct.tS, %struct.tS* %260, i64 0, i32 1
%275 = load i8, i8* %274
%276 = icmp eq i8 %275, 100
br i1 %276, label %280, label %277
277: ; preds = %273
%278 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 0, i32 0, i64 0))
%279 = icmp eq i32 %278, 0
br i1 %279, label %293, label %290
280: ; preds = %273
%281 = call i32 (i8*, ...) bitcast (i32 (...)* @is_double to i32 (i8*, ...)*)(i8* %29)
%282 = icmp eq i32 %281, 0
br i1 %282, label %374, label %283
283: ; preds = %280
%284 = call i32 (i8*, ...) bitcast (i32 (...)* @atof to i32 (i8*, ...)*)(i8* %29)
%285 = sitofp i32 %284 to double
%286 = getelementptr inbounds %struct.tS, %struct.tS* %260, i64 0, i32 2
%287 = load i8, i8* %286
%288 = zext i8 %287 to i64
%289 = getelementptr inbounds double, double* %3, i64 %288
store double %285, double* %289
br label %348
290: ; preds = %277
%291 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 0, i32 1, i64 0))
%292 = icmp eq i32 %291, 0
br i1 %292, label %293, label %298
293: ; preds = %337, %334, %331, %328, %325, %322, %319, %316, %313, %310, %307, %304, %301, %298, %277, %290
%294 = phi i64 [ 0, %277 ], [ 0, %290 ], [ 1, %298 ], [ 1, %301 ], [ 2, %304 ], [ 2, %307 ], [ 3, %310 ], [ 3, %313 ], [ 4, %316 ], [ 4, %319 ], [ 5, %322 ], [ 5, %325 ], [ 6, %328 ], [ 6, %331 ], [ 7, %334 ], [ 7, %337 ]
%295 = getelementptr inbounds [8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 %294, i32 2
%296 = load i32, i32* %295
%297 = trunc i32 %296 to i8
br label %342
298: ; preds = %290
%299 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 1, i32 0, i64 0))
%300 = icmp eq i32 %299, 0
br i1 %300, label %293, label %301
301: ; preds = %298
%302 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 1, i32 1, i64 0))
%303 = icmp eq i32 %302, 0
br i1 %303, label %293, label %304
304: ; preds = %301
%305 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 2, i32 0, i64 0))
%306 = icmp eq i32 %305, 0
br i1 %306, label %293, label %307
307: ; preds = %304
%308 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 2, i32 1, i64 0))
%309 = icmp eq i32 %308, 0
br i1 %309, label %293, label %310
310: ; preds = %307
%311 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 3, i32 0, i64 0))
%312 = icmp eq i32 %311, 0
br i1 %312, label %293, label %313
313: ; preds = %310
%314 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 3, i32 1, i64 0))
%315 = icmp eq i32 %314, 0
br i1 %315, label %293, label %316
316: ; preds = %313
%317 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 4, i32 0, i64 0))
%318 = icmp eq i32 %317, 0
br i1 %318, label %293, label %319
319: ; preds = %316
%320 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 4, i32 1, i64 0))
%321 = icmp eq i32 %320, 0
br i1 %321, label %293, label %322
322: ; preds = %319
%323 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 5, i32 0, i64 0))
%324 = icmp eq i32 %323, 0
br i1 %324, label %293, label %325
325: ; preds = %322
%326 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 5, i32 1, i64 0))
%327 = icmp eq i32 %326, 0
br i1 %327, label %293, label %328
328: ; preds = %325
%329 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 6, i32 0, i64 0))
%330 = icmp eq i32 %329, 0
br i1 %330, label %293, label %331
331: ; preds = %328
%332 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 6, i32 1, i64 0))
%333 = icmp eq i32 %332, 0
br i1 %333, label %293, label %334
334: ; preds = %331
%335 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 7, i32 0, i64 0))
%336 = icmp eq i32 %335, 0
br i1 %336, label %293, label %337
337: ; preds = %334
%338 = call i32 @strcmp(i8* %29, i8* getelementptr inbounds ([8 x %struct.tCOL], [8 x %struct.tCOL]* @__const.parse_line.col_tab, i64 0, i64 7, i32 1, i64 0))
%339 = icmp eq i32 %338, 0
br i1 %339, label %293, label %340
340: ; preds = %337
%341 = icmp eq i32 %213, 0
br i1 %341, label %374, label %342
342: ; preds = %293, %340
%343 = phi i8 [ %297, %293 ], [ %214, %340 ]
%344 = getelementptr inbounds %struct.tS, %struct.tS* %260, i64 0, i32 2
%345 = load i8, i8* %344
%346 = zext i8 %345 to i64
%347 = getelementptr inbounds i8, i8* %4, i64 %346
store i8 %343, i8* %347
br label %348
348: ; preds = %342, %283
%349 = phi i8 [ %214, %283 ], [ %343, %342 ]
%350 = phi i32 [ %213, %283 ], [ 1, %342 ]
store i8 1, i8* %270
br label %356
351: ; preds = %211, %219
%352 = add nsw i32 %215, 1
%353 = sext i32 %215 to i64
%354 = getelementptr inbounds [75 x i8], [75 x i8]* %14, i64 0, i64 %353
store i8 %218, i8* %354
%355 = icmp eq i32 %352, 75
br i1 %355, label %374, label %356
356: ; preds = %348, %351
%357 = phi i32 [ %256, %348 ], [ %216, %351 ]
%358 = phi i32 [ 0, %348 ], [ %352, %351 ]
%359 = phi i8 [ %349, %348 ], [ %214, %351 ]
%360 = phi i32 [ %350, %348 ], [ %213, %351 ]
%361 = add nuw nsw i64 %212, 1
%362 = icmp eq i64 %361, %210
br i1 %362, label %363, label %211
363: ; preds = %356, %202
br label %364
364: ; preds = %363, %370
%365 = phi %struct.tS* [ %372, %370 ], [ %203, %363 ]
%366 = phi i32 [ %371, %370 ], [ 0, %363 ]
%367 = getelementptr inbounds %struct.tS, %struct.tS* %365, i64 0, i32 3
%368 = load i8, i8* %367
%369 = icmp eq i8 %368, 0
br i1 %369, label %374, label %370
370: ; preds = %364
%371 = add nuw nsw i32 %366, 1
%372 = getelementptr inbounds %struct.tS, %struct.tS* %365, i64 1
%373 = icmp eq i32 %371, %204
br i1 %373, label %374, label %364
374: ; preds = %351, %340, %280, %269, %221, %221, %242, %234, %265, %370, %364, %38, %45, %53, %61, %69, %77, %85, %93, %101, %109, %117, %125, %133, %141, %149, %157, %160, %185, %195, %5
%375 = phi i32 [ -13, %5 ], [ -10, %195 ], [ -10, %185 ], [ -7, %38 ], [ -7, %45 ], [ -7, %53 ], [ -7, %61 ], [ -7, %69 ], [ -7, %77 ], [ -7, %85 ], [ -7, %93 ], [ -7, %101 ], [ -7, %109 ], [ -7, %117 ], [ -7, %125 ], [ -7, %133 ], [ -7, %141 ], [ -7, %149 ], [ -7, %157 ], [ -8, %160 ], [ 0, %370 ], [ -14, %364 ], [ -32, %265 ], [ -31, %242 ], [ -30, %234 ], [ -4, %351 ], [ -24, %340 ], [ -12, %280 ], [ -33, %269 ], [ -34, %221 ], [ -34, %221 ]
ret i32 %375
}