#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 */
typedef struct option {
  char *name;
  int has_arg;
  int *flag;
  int val;
} const option;

/* Variables and functions */
int /*<<< orphan*/ getopterror(int);
char *optarg;
int optind;
int optopt;
char *strchr(char const *, int);
size_t strlen(char *);
int /*<<< orphan*/ strncmp(char *, char *, size_t);
int /*<<< orphan*/ write(int, char *, int);
int getopt_long_only(int argc, char *const argv[], const char *optstring,
                     const struct option *longopts, int *longindex) {
  static int lastidx, lastofs;
  char *tmp, *arg;
  if (optind == 0) {
    optind = 1;
    lastidx = 0;
  }
again:
  if (optind > argc || !argv[optind] || *argv[optind] != '-' ||
      argv[optind][1] == 0)
    return -1;
  if (argv[optind][1] == '-' && argv[optind][2] == 0) {
    ++optind;
    return -1;
  }
  if (argv[optind][1] == '-')
    arg = argv[optind] + 2;
  else
    arg = argv[optind] + 1;
  {
    char *max = strchr(arg, '=');
    const struct option *o;
    const struct option *match = 0;
    if (!max)
      max = arg + strlen(arg);
    for (o = longopts; o->name; ++o) {
      size_t tlen = max - arg;
      if (!strncmp(o->name, arg, tlen)) {
        if (strlen(o->name) == tlen) {
          match = o;
          break;
        }
        if (!match)
          match = o;
        else
          match = (struct option *)-1;
      }
    }
    if (match != (struct option *)-1 && (o = match)) {
      if (longindex)
        *longindex = o - longopts;
      if (o->has_arg > 0) {
        if (*max == '=')
          optarg = max + 1;
        else {
          optarg = argv[optind + 1];
          if (!optarg && o->has_arg == 1) {
            if (*optstring == ':')
              return ':';
            write(2, "argument required: `", 20);
            write(2, arg, (size_t)(max - arg));
            write(2, "'.\n", 3);
            ++optind;
            return '?';
          }
          ++optind;
        }
      }
      ++optind;
      if (o->flag)
        *(o->flag) = o->val;
      else
        return o->val;
      return 0;
    }
    if (argv[optind][1] != '-')
      goto shortopt;
    if (*optstring == ':')
      return ':';
    write(2, "invalid option `", 16);
    write(2, arg, (size_t)(max - arg));
    write(2, "'.\n", 3);
    ++optind;
    return '?';
  }
shortopt:
  if (lastidx != optind) {
    lastidx = optind;
    lastofs = 0;
  }
  optopt = argv[optind][lastofs + 1];
  if ((tmp = strchr(optstring, optopt))) {
    if (*tmp == 0) {
      ++optind;
      goto again;
    }
    if (tmp[1] == ':') {
      if (tmp[2] == ':' || argv[optind][lastofs + 2]) {
        if (!*(optarg = argv[optind] + lastofs + 2))
          optarg = 0;
        goto found;
      }
      optarg = argv[optind + 1];
      if (!optarg) {
        ++optind;
        if (*optstring == ':')
          return ':';
        getopterror(1);
        return ':';
      }
      ++optind;
    } else {
      ++lastofs;
      return optopt;
    }
  found:
    ++optind;
    return optopt;
  } else {
    getopterror(0);
    ++optind;
    return '?';
  }
}


x86 assembly (clang, -O0):
<getopt_long_only>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    0x2e66(%rip),%rax
cmpl   $0x0,(%rax)
jne    1192 <getopt_long_only+0x42>
mov    0x2e56(%rip),%rax
movl   $0x1,(%rax)
movl   $0x0,0x2ebe(%rip)
jmp    1197 <getopt_long_only+0x47>
mov    0x2e3a(%rip),%rax
mov    (%rax),%eax
cmp    -0x8(%rbp),%eax
jg     11ff <getopt_long_only+0xaf>
mov    -0x10(%rbp),%rax
mov    0x2e24(%rip),%rcx
movslq (%rcx),%rcx
cmpq   $0x0,(%rax,%rcx,8)
je     11ff <getopt_long_only+0xaf>
mov    -0x10(%rbp),%rax
mov    0x2e0b(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    11ff <getopt_long_only+0xaf>
mov    -0x10(%rbp),%rax
mov    0x2ded(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    120b <getopt_long_only+0xbb>
movl   $0xffffffff,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    -0x10(%rbp),%rax
mov    0x2dc2(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2d,%eax
jne    126a <getopt_long_only+0x11a>
mov    -0x10(%rbp),%rax
mov    0x2da3(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
jne    126a <getopt_long_only+0x11a>
mov    0x2d88(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x2d7c(%rip),%rax
mov    %ecx,(%rax)
movl   $0xffffffff,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    -0x10(%rbp),%rax
mov    0x2d63(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2d,%eax
jne    12a8 <getopt_long_only+0x158>
mov    -0x10(%rbp),%rax
mov    0x2d44(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
jmp    12c2 <getopt_long_only+0x172>
mov    -0x10(%rbp),%rax
mov    0x2d25(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rdi
mov    $0x3d,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
movq   $0x0,-0x50(%rbp)
cmpq   $0x0,-0x40(%rbp)
jne    1306 <getopt_long_only+0x1b6>
mov    -0x38(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x38(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,%rcx
mov    -0x60(%rbp),%rax
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmpq   $0x0,(%rax)
je     13a9 <getopt_long_only+0x259>
mov    -0x40(%rbp),%rax
mov    -0x38(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x58(%rbp)
mov    -0x48(%rbp),%rax
mov    (%rax),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x58(%rbp),%rdx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    1393 <getopt_long_only+0x243>
mov    -0x48(%rbp),%rax
mov    (%rax),%rdi
call   1050 <strlen@plt>
cmp    -0x58(%rbp),%rax
jne    136b <getopt_long_only+0x21b>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    13a9 <getopt_long_only+0x259>
cmpq   $0x0,-0x50(%rbp)
jne    1383 <getopt_long_only+0x233>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    138e <getopt_long_only+0x23e>
mov    $0xffffffffffffffff,%rax
mov    %rax,-0x50(%rbp)
jmp    1393 <getopt_long_only+0x243>
jmp    1398 <getopt_long_only+0x248>
mov    -0x48(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x48(%rbp)
jmp    130e <getopt_long_only+0x1be>
mov    $0xffffffffffffffff,%rax
cmp    %rax,-0x50(%rbp)
je     1556 <getopt_long_only+0x406>
mov    -0x50(%rbp),%rax
mov    %rax,-0x48(%rbp)
cmp    $0x0,%rax
je     1556 <getopt_long_only+0x406>
cmpq   $0x0,-0x28(%rbp)
je     13ee <getopt_long_only+0x29e>
mov    -0x48(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
sar    $0x5,%rax
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%rax
cmpl   $0x0,0x8(%rax)
jle    1501 <getopt_long_only+0x3b1>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
jne    1423 <getopt_long_only+0x2d3>
mov    -0x40(%rbp),%rcx
add    $0x1,%rcx
mov    0x2bdd(%rip),%rax
mov    %rcx,(%rax)
jmp    14fc <getopt_long_only+0x3ac>
mov    -0x10(%rbp),%rax
mov    0x2baa(%rip),%rcx
mov    (%rcx),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rcx
mov    0x2bb7(%rip),%rax
mov    %rcx,(%rax)
mov    0x2bad(%rip),%rax
cmpq   $0x0,(%rax)
jne    14e7 <getopt_long_only+0x397>
mov    -0x48(%rbp),%rax
cmpl   $0x1,0x8(%rax)
jne    14e7 <getopt_long_only+0x397>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    147f <getopt_long_only+0x32f>
movl   $0x3a,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    $0x2,%edi
lea    0xb75(%rip),%rsi
mov    $0x14,%edx
call   1040 <write@plt>
mov    -0x38(%rbp),%rsi
mov    -0x40(%rbp),%rax
mov    -0x38(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
mov    $0x2,%edi
call   1040 <write@plt>
mov    $0x2,%edi
lea    0xb59(%rip),%rsi
mov    $0x3,%edx
call   1040 <write@plt>
mov    0x2b0b(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x2aff(%rip),%rax
mov    %ecx,(%rax)
movl   $0x3f,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    0x2aea(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x2ade(%rip),%rax
mov    %ecx,(%rax)
jmp    1501 <getopt_long_only+0x3b1>
mov    0x2ad0(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x2ac4(%rip),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%rax
cmpq   $0x0,0x10(%rax)
je     153b <getopt_long_only+0x3eb>
mov    -0x48(%rbp),%rax
mov    0x18(%rax),%ecx
mov    -0x48(%rbp),%rax
mov    0x10(%rax),%rax
mov    %ecx,(%rax)
jmp    154a <getopt_long_only+0x3fa>
mov    -0x48(%rbp),%rax
mov    0x18(%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
movl   $0x0,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    -0x10(%rbp),%rax
mov    0x2a77(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2d,%eax
je     157a <getopt_long_only+0x42a>
jmp    15fe <getopt_long_only+0x4ae>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    1596 <getopt_long_only+0x446>
movl   $0x3a,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    $0x2,%edi
lea    0xa77(%rip),%rsi
mov    $0x10,%edx
call   1040 <write@plt>
mov    -0x38(%rbp),%rsi
mov    -0x40(%rbp),%rax
mov    -0x38(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
mov    $0x2,%edi
call   1040 <write@plt>
mov    $0x2,%edi
lea    0xa42(%rip),%rsi
mov    $0x3,%edx
call   1040 <write@plt>
mov    0x29f4(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x29e8(%rip),%rax
mov    %ecx,(%rax)
movl   $0x3f,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    0x2a4c(%rip),%eax
mov    0x29cd(%rip),%rcx
cmp    (%rcx),%eax
je     162c <getopt_long_only+0x4dc>
mov    0x29be(%rip),%rax
mov    (%rax),%eax
mov    %eax,0x2a2e(%rip)
movl   $0x0,0x2a28(%rip)
mov    -0x10(%rbp),%rax
mov    0x29a1(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x2a10(%rip),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
mov    0x298b(%rip),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rdi
mov    0x297e(%rip),%rax
mov    (%rax),%esi
call   1060 <strchr@plt>
mov    %rax,-0x30(%rbp)
cmp    $0x0,%rax
je     1817 <getopt_long_only+0x6c7>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    16a1 <getopt_long_only+0x551>
mov    0x294a(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x293e(%rip),%rax
mov    %ecx,(%rax)
jmp    1197 <getopt_long_only+0x47>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3a,%eax
jne    17cc <getopt_long_only+0x67c>
mov    -0x30(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x3a,%eax
je     16ee <getopt_long_only+0x59e>
mov    -0x10(%rbp),%rax
mov    0x290a(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x2979(%rip),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     1739 <getopt_long_only+0x5e9>
mov    -0x10(%rbp),%rax
mov    0x28df(%rip),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,8),%rax
movslq 0x294d(%rip),%rcx
mov    %rax,%rsi
add    %rcx,%rsi
add    $0x2,%rsi
mov    0x28e0(%rip),%rdx
mov    %rsi,(%rdx)
cmpb   $0x0,0x2(%rax,%rcx,1)
jne    1734 <getopt_long_only+0x5e4>
mov    0x28cb(%rip),%rax
movq   $0x0,(%rax)
jmp    17f1 <getopt_long_only+0x6a1>
mov    -0x10(%rbp),%rax
mov    0x2894(%rip),%rcx
mov    (%rcx),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rcx
mov    0x28a1(%rip),%rax
mov    %rcx,(%rax)
mov    0x2897(%rip),%rax
cmpq   $0x0,(%rax)
jne    17b2 <getopt_long_only+0x662>
mov    0x2866(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x285a(%rip),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    179c <getopt_long_only+0x64c>
movl   $0x3a,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    $0x1,%edi
call   1070 <getopterror@plt>
movl   $0x3a,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
mov    0x281f(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x2813(%rip),%rax
mov    %ecx,(%rax)
jmp    17ec <getopt_long_only+0x69c>
mov    0x2882(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2879(%rip)
mov    0x27fe(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
jmp    17f1 <getopt_long_only+0x6a1>
mov    0x27e0(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x27d4(%rip),%rax
mov    %ecx,(%rax)
mov    0x27d3(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    183a <getopt_long_only+0x6ea>
xor    %edi,%edi
call   1070 <getopterror@plt>
mov    0x27b3(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x27a7(%rip),%rax
mov    %ecx,(%rax)
movl   $0x3f,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getopt_long_only>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rcx,%r14
mov    %rdx,0x8(%rsp)
mov    %rsi,0x10(%rsp)
mov    0x2e66(%rip),%rax
mov    (%rax),%eax
test   %eax,%eax
je     1181 <getopt_long_only+0x31>
cmp    %edi,%eax
jle    11a5 <getopt_long_only+0x55>
jmp    1418 <getopt_long_only+0x2c8>
mov    0x2e50(%rip),%rax
movl   $0x1,(%rax)
movl   $0x0,0x2eb8(%rip)
mov    $0x1,%eax
cmp    %edi,%eax
jg     1418 <getopt_long_only+0x2c8>
mov    %r8,0x30(%rsp)
mov    0x2ea4(%rip),%ecx
mov    %ecx,0x4(%rsp)
mov    0x2e96(%rip),%esi
mov    %r14,0x28(%rsp)
mov    %edi,0x18(%rsp)
mov    %eax,%ebx
movslq %eax,%rcx
mov    0x10(%rsp),%rax
mov    (%rax,%rcx,8),%r15
test   %r15,%r15
je     1418 <getopt_long_only+0x2c8>
cmpb   $0x2d,(%r15)
jne    1418 <getopt_long_only+0x2c8>
mov    0x1(%r15),%dl
cmp    $0x2d,%dl
je     1200 <getopt_long_only+0xb0>
test   %dl,%dl
jne    120b <getopt_long_only+0xbb>
jmp    1418 <getopt_long_only+0x2c8>
cs nopw 0x0(%rax,%rax,1)
cmpb   $0x0,0x2(%r15)
je     140c <getopt_long_only+0x2bc>
mov    %esi,0x1c(%rsp)
mov    %rcx,0x38(%rsp)
lea    0x1(%r15),%r13
lea    0x2(%r15),%rax
mov    %dl,0x3(%rsp)
cmp    $0x2d,%dl
cmove  %rax,%r13
mov    %r13,%rdi
mov    $0x3d,%esi
call   1060 <strchr@plt>
test   %rax,%rax
jne    1244 <getopt_long_only+0xf4>
mov    %r13,%rdi
call   1050 <strlen@plt>
add    %r13,%rax
mov    %rbx,0x40(%rsp)
mov    (%r14),%rbp
test   %rbp,%rbp
mov    %rax,0x20(%rsp)
je     12b0 <getopt_long_only+0x160>
mov    %rax,%rbx
sub    %r13,%rbx
xor    %r12d,%r12d
jmp    127d <getopt_long_only+0x12d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x20(%r14),%rbp
add    $0x20,%r14
test   %rbp,%rbp
je     12c0 <getopt_long_only+0x170>
mov    %rbp,%rdi
mov    %r13,%rsi
mov    %rbx,%rdx
call   1030 <strncmp@plt>
test   %eax,%eax
jne    1270 <getopt_long_only+0x120>
mov    %rbp,%rdi
call   1050 <strlen@plt>
cmp    %rbx,%rax
je     12b5 <getopt_long_only+0x165>
neg    %r12
sbb    %r12,%r12
or     %r14,%r12
jmp    1270 <getopt_long_only+0x120>
nopw   0x0(%rax,%rax,1)
xor    %r12d,%r12d
jmp    12c0 <getopt_long_only+0x170>
mov    %r14,%r12
nopl   0x0(%rax,%rax,1)
lea    0x1(%r12),%rax
cmp    $0x2,%rax
jae    1430 <getopt_long_only+0x2e0>
cmpb   $0x2d,0x3(%rsp)
je     1351 <getopt_long_only+0x201>
mov    0x40(%rsp),%rbp
cmp    %ebp,0x1c(%rsp)
je     12f9 <getopt_long_only+0x1a9>
mov    %ebp,0x2d69(%rip)
movl   $0x0,0x2d63(%rip)
movl   $0x0,0x4(%rsp)
movslq 0x4(%rsp),%rbx
movsbl 0x1(%r15,%rbx,1),%r14d
mov    0x2cd5(%rip),%rax
mov    %r14d,(%rax)
mov    0x8(%rsp),%rdi
mov    %r14d,%esi
call   1060 <strchr@plt>
test   %rax,%rax
je     13a8 <getopt_long_only+0x258>
cmpb   $0x0,(%rax)
jne    13c1 <getopt_long_only+0x271>
lea    0x1(%rbp),%eax
mov    0x2ca1(%rip),%rcx
mov    %eax,(%rcx)
mov    %ebp,%esi
mov    0x18(%rsp),%edi
cmp    %edi,%ebp
mov    0x28(%rsp),%r14
jl     11c3 <getopt_long_only+0x73>
jmp    1418 <getopt_long_only+0x2c8>
mov    $0x3a,%r14d
mov    0x8(%rsp),%rax
cmpb   $0x3a,(%rax)
je     141e <getopt_long_only+0x2ce>
lea    0xcad(%rip),%rsi
mov    $0x2,%edi
mov    $0x10,%edx
call   1040 <write@plt>
mov    0x20(%rsp),%rdx
sub    %r13d,%edx
mov    $0x2,%edi
mov    %r13,%rsi
call   1040 <write@plt>
lea    0xc7e(%rip),%rsi
mov    $0x2,%edi
mov    $0x3,%edx
call   1040 <write@plt>
jmp    13af <getopt_long_only+0x25f>
xor    %edi,%edi
call   1070 <getopterror@plt>
mov    0x2c22(%rip),%rax
addl   $0x1,(%rax)
mov    $0x3f,%r14d
jmp    141e <getopt_long_only+0x2ce>
cmpb   $0x3a,0x1(%rax)
jne    1475 <getopt_long_only+0x325>
cmpb   $0x3a,0x2(%rax)
je     13dd <getopt_long_only+0x28d>
cmpb   $0x0,0x2(%rbx,%r15,1)
je     14e3 <getopt_long_only+0x393>
lea    (%r15,%rbx,1),%rax
add    $0x2,%rax
mov    0x2c0c(%rip),%rcx
mov    %rax,(%rcx)
xor    %edx,%edx
cmpb   $0x0,0x2(%r15,%rbx,1)
cmovne %rax,%rdx
mov    %rdx,(%rcx)
add    $0x1,%ebp
mov    0x2bd0(%rip),%rax
mov    %ebp,(%rax)
jmp    141e <getopt_long_only+0x2ce>
add    $0x1,%ebx
mov    0x2bc2(%rip),%rax
mov    %ebx,(%rax)
mov    $0xffffffff,%r14d
mov    %r14d,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x30(%rsp),%rcx
test   %rcx,%rcx
mov    0x28(%rsp),%rdx
je     144b <getopt_long_only+0x2fb>
mov    %r12,%rax
sub    %rdx,%rax
shr    $0x5,%rax
mov    %eax,(%rcx)
mov    0x8(%r12),%eax
test   %eax,%eax
jle    1541 <getopt_long_only+0x3f1>
mov    0x20(%rsp),%rbx
cmpb   $0x3d,(%rbx)
jne    1481 <getopt_long_only+0x331>
add    $0x1,%rbx
mov    0x2b8b(%rip),%rax
mov    %rbx,(%rax)
jmp    1541 <getopt_long_only+0x3f1>
add    $0x1,%rbx
mov    %ebx,0x2bd5(%rip)
jmp    141e <getopt_long_only+0x2ce>
mov    0x2b50(%rip),%rcx
movslq (%rcx),%rcx
mov    0x10(%rsp),%rdx
mov    0x8(%rdx,%rcx,8),%rdx
mov    0x2b5c(%rip),%rsi
mov    %rdx,(%rsi)
test   %rdx,%rdx
jne    1534 <getopt_long_only+0x3e4>
cmp    $0x1,%eax
jne    1534 <getopt_long_only+0x3e4>
mov    $0x3a,%r14d
mov    0x8(%rsp),%rax
cmpb   $0x3a,(%rax)
je     141e <getopt_long_only+0x2ce>
lea    0xb34(%rip),%rsi
mov    $0x2,%edi
mov    $0x14,%edx
call   1040 <write@plt>
mov    %rbx,%rdx
jmp    1380 <getopt_long_only+0x230>
add    $0x1,%ebp
mov    0x10(%rsp),%rax
mov    0x38(%rsp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    0x2afc(%rip),%rcx
mov    %rax,(%rcx)
test   %rax,%rax
jne    13fe <getopt_long_only+0x2ae>
mov    0x2ac9(%rip),%rax
mov    %ebp,(%rax)
mov    $0x3a,%r14d
mov    0x8(%rsp),%rax
cmpb   $0x3a,(%rax)
je     141e <getopt_long_only+0x2ce>
mov    $0x1,%edi
call   1070 <getopterror@plt>
jmp    141e <getopt_long_only+0x2ce>
add    $0x1,%rcx
mov    0x2a99(%rip),%rax
mov    %ecx,(%rax)
mov    0x2a90(%rip),%rax
addl   $0x1,(%rax)
mov    0x10(%r12),%rax
mov    0x18(%r12),%r14d
test   %rax,%rax
je     141e <getopt_long_only+0x2ce>
mov    %r14d,(%rax)
xor    %r14d,%r14d
jmp    141e <getopt_long_only+0x2ce>

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

LLVM IR (-O2):
%struct.option = type { i8*, i32, i32*, i32 }
@getopt_long_only.lastidx = internal unnamed_addr global i32 0
@getopt_long_only.lastofs = internal unnamed_addr global i32 0
@optind = global i32 0
@optarg = global i8* null
@.str = [21 x i8] c"argument required: `\00"
@.str.1 = [4 x i8] c"'.\0A\00"
@.str.2 = [17 x i8] c"invalid option `\00"
@optopt = global i32 0
define i32 @getopt_long_only(i32 %0, i8** nocapture %1, i8* %2, %struct.option* %3, i32* writeonly %4) {
%6 = load i32, i32* @optind
%7 = icmp eq i32 %6, 0
br i1 %7, label %8, label %9
8: ; preds = %5
store i32 1, i32* @optind
store i32 0, i32* @getopt_long_only.lastidx
br label %9
9: ; preds = %8, %5
%10 = phi i32 [ 1, %8 ], [ %6, %5 ]
%11 = icmp sgt i32 %10, %0
br i1 %11, label %196, label %12
12: ; preds = %9
%13 = load i32, i32* @getopt_long_only.lastofs
%14 = load i32, i32* @getopt_long_only.lastidx
%15 = getelementptr inbounds %struct.option, %struct.option* %3, i64 0, i32 0
br label %16
16: ; preds = %12, %152
%17 = phi i32 [ %10, %12 ], [ %153, %152 ]
%18 = phi i32 [ %14, %12 ], [ %17, %152 ]
%19 = phi i32 [ %13, %12 ], [ %141, %152 ]
%20 = sext i32 %17 to i64
%21 = getelementptr inbounds i8*, i8** %1, i64 %20
%22 = load i8*, i8** %21
%23 = icmp eq i8* %22, null
br i1 %23, label %196, label %24
24: ; preds = %16
%25 = load i8, i8* %22
%26 = icmp eq i8 %25, 45
br i1 %26, label %27, label %196
27: ; preds = %24
%28 = getelementptr inbounds i8, i8* %22, i64 1
%29 = load i8, i8* %28
switch i8 %29, label %36 [
i8 0, label %196
i8 45, label %30
]
30: ; preds = %27
%31 = getelementptr inbounds i8, i8* %22, i64 2
%32 = load i8, i8* %31
%33 = icmp eq i8 %32, 0
br i1 %33, label %34, label %36
34: ; preds = %30
%35 = add nsw i32 %17, 1
store i32 %35, i32* @optind
br label %196
36: ; preds = %27, %30
%37 = icmp eq i8 %29, 45
%38 = getelementptr inbounds i8, i8* %22, i64 2
%39 = select i1 %37, i8* %38, i8* %28
%40 = tail call i8* @strchr(i8* %39, i32 61)
%41 = icmp eq i8* %40, null
br i1 %41, label %42, label %45
42: ; preds = %36
%43 = tail call i64 @strlen(i8* %39)
%44 = getelementptr inbounds i8, i8* %39, i64 %43
br label %45
45: ; preds = %42, %36
%46 = phi i8* [ %40, %36 ], [ %44, %42 ]
%47 = load i8*, i8** %15
%48 = icmp eq i8* %47, null
br i1 %48, label %71, label %49
49: ; preds = %45
%50 = ptrtoint i8* %46 to i64
%51 = ptrtoint i8* %39 to i64
%52 = sub i64 %50, %51
br label %53
53: ; preds = %49, %65
%54 = phi i8* [ %47, %49 ], [ %69, %65 ]
%55 = phi %struct.option* [ null, %49 ], [ %66, %65 ]
%56 = phi %struct.option* [ %3, %49 ], [ %67, %65 ]
%57 = tail call i32 @strncmp(i8* %54, i8* %39, i64 %52)
%58 = icmp eq i32 %57, 0
br i1 %58, label %59, label %65
59: ; preds = %53
%60 = tail call i64 @strlen(i8* %54)
%61 = icmp eq i64 %60, %52
br i1 %61, label %71, label %62
62: ; preds = %59
%63 = icmp eq %struct.option* %55, null
%64 = select i1 %63, %struct.option* %56, %struct.option* inttoptr (i64 -1 to %struct.option*)
br label %65
65: ; preds = %62, %53
%66 = phi %struct.option* [ %64, %62 ], [ %55, %53 ]
%67 = getelementptr inbounds %struct.option, %struct.option* %56, i64 1
%68 = getelementptr inbounds %struct.option, %struct.option* %67, i64 0, i32 0
%69 = load i8*, i8** %68
%70 = icmp eq i8* %69, null
br i1 %70, label %71, label %53
71: ; preds = %65, %59, %45
%72 = phi %struct.option* [ null, %45 ], [ %56, %59 ], [ %66, %65 ]
%73 = ptrtoint %struct.option* %72 to i64
switch i64 %73, label %74 [
i64 -1, label %123
i64 0, label %123
]
74: ; preds = %71
%75 = icmp eq i32* %4, null
br i1 %75, label %82, label %76
76: ; preds = %74
%77 = ptrtoint %struct.option* %72 to i64
%78 = ptrtoint %struct.option* %3 to i64
%79 = sub i64 %77, %78
%80 = lshr exact i64 %79, 5
%81 = trunc i64 %80 to i32
store i32 %81, i32* %4
br label %82
82: ; preds = %76, %74
%83 = getelementptr inbounds %struct.option, %struct.option* %72, i64 0, i32 1
%84 = load i32, i32* %83
%85 = icmp sgt i32 %84, 0
br i1 %85, label %86, label %114
86: ; preds = %82
%87 = load i8, i8* %46
%88 = icmp eq i8 %87, 61
br i1 %88, label %89, label %91
89: ; preds = %86
%90 = getelementptr inbounds i8, i8* %46, i64 1
store i8* %90, i8** @optarg
br label %114
91: ; preds = %86
%92 = load i32, i32* @optind
%93 = add nsw i32 %92, 1
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i8*, i8** %1, i64 %94
%96 = load i8*, i8** %95
store i8* %96, i8** @optarg
%97 = icmp eq i8* %96, null
%98 = icmp eq i32 %84, 1
%99 = select i1 %97, i1 %98, i1 false
br i1 %99, label %100, label %113
100: ; preds = %91
%101 = load i8, i8* %2
%102 = icmp eq i8 %101, 58
br i1 %102, label %196, label %103
103: ; preds = %100
%104 = tail call i32 @write(i32 2, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i32 20)
%105 = ptrtoint i8* %46 to i64
%106 = ptrtoint i8* %39 to i64
%107 = sub i64 %105, %106
%108 = trunc i64 %107 to i32
%109 = tail call i32 @write(i32 2, i8* %39, i32 %108)
%110 = tail call i32 @write(i32 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 3)
%111 = load i32, i32* @optind
%112 = add nsw i32 %111, 1
store i32 %112, i32* @optind
br label %196
113: ; preds = %91
store i32 %93, i32* @optind
br label %114
114: ; preds = %89, %113, %82
%115 = load i32, i32* @optind
%116 = add nsw i32 %115, 1
store i32 %116, i32* @optind
%117 = getelementptr inbounds %struct.option, %struct.option* %72, i64 0, i32 2
%118 = load i32*, i32** %117
%119 = icmp eq i32* %118, null
%120 = getelementptr inbounds %struct.option, %struct.option* %72, i64 0, i32 3
%121 = load i32, i32* %120
br i1 %119, label %196, label %122
122: ; preds = %114
store i32 %121, i32* %118
br label %196
123: ; preds = %71, %71
br i1 %37, label %124, label %137
124: ; preds = %123
%125 = load i8, i8* %2
%126 = icmp eq i8 %125, 58
br i1 %126, label %196, label %127
127: ; preds = %124
%128 = tail call i32 @write(i32 2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.2, i64 0, i64 0), i32 16)
%129 = ptrtoint i8* %46 to i64
%130 = ptrtoint i8* %39 to i64
%131 = sub i64 %129, %130
%132 = trunc i64 %131 to i32
%133 = tail call i32 @write(i32 2, i8* %39, i32 %132)
%134 = tail call i32 @write(i32 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 3)
%135 = load i32, i32* @optind
%136 = add nsw i32 %135, 1
store i32 %136, i32* @optind
br label %196
137: ; preds = %123
%138 = icmp eq i32 %18, %17
br i1 %138, label %140, label %139
139: ; preds = %137
store i32 %17, i32* @getopt_long_only.lastidx
store i32 0, i32* @getopt_long_only.lastofs
br label %140
140: ; preds = %139, %137
%141 = phi i32 [ 0, %139 ], [ %19, %137 ]
%142 = add nsw i32 %141, 1
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds i8, i8* %22, i64 %143
%145 = load i8, i8* %144
%146 = sext i8 %145 to i32
store i32 %146, i32* @optopt
%147 = tail call i8* @strchr(i8* dereferenceable(1) %2, i32 %146)
%148 = icmp eq i8* %147, null
br i1 %148, label %192, label %149
149: ; preds = %140
%150 = load i8, i8* %147
%151 = icmp eq i8 %150, 0
br i1 %151, label %152, label %155
152: ; preds = %149
%153 = add nsw i32 %17, 1
store i32 %153, i32* @optind
%154 = icmp slt i32 %17, %0
br i1 %154, label %16, label %196
155: ; preds = %149
%156 = sext i8 %145 to i32
%157 = getelementptr inbounds i8, i8* %147, i64 1
%158 = load i8, i8* %157
%159 = icmp eq i8 %158, 58
br i1 %159, label %160, label %188
160: ; preds = %155
%161 = getelementptr inbounds i8, i8* %147, i64 2
%162 = load i8, i8* %161
%163 = icmp eq i8 %162, 58
br i1 %163, label %170, label %164
164: ; preds = %160
%165 = add nsw i32 %141, 2
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds i8, i8* %22, i64 %166
%168 = load i8, i8* %167
%169 = icmp eq i8 %168, 0
br i1 %169, label %177, label %170
170: ; preds = %164, %160
%171 = sext i32 %141 to i64
%172 = getelementptr inbounds i8, i8* %22, i64 %171
%173 = getelementptr inbounds i8, i8* %172, i64 2
store i8* %173, i8** @optarg
%174 = load i8, i8* %173
%175 = icmp eq i8 %174, 0
%176 = select i1 %175, i8* null, i8* %173
store i8* %176, i8** @optarg
br label %189
177: ; preds = %164
%178 = add nsw i32 %17, 1
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds i8*, i8** %1, i64 %179
%181 = load i8*, i8** %180
store i8* %181, i8** @optarg
%182 = icmp eq i8* %181, null
br i1 %182, label %183, label %189
183: ; preds = %177
store i32 %178, i32* @optind
%184 = load i8, i8* %2
%185 = icmp eq i8 %184, 58
br i1 %185, label %196, label %186
186: ; preds = %183
%187 = tail call i32 @getopterror(i32 1)
br label %196
188: ; preds = %155
store i32 %142, i32* @getopt_long_only.lastofs
br label %196
189: ; preds = %177, %170
%190 = phi i32 [ %17, %170 ], [ %178, %177 ]
%191 = add nsw i32 %190, 1
store i32 %191, i32* @optind
br label %196
192: ; preds = %140
%193 = tail call i32 @getopterror(i32 0)
%194 = load i32, i32* @optind
%195 = add nsw i32 %194, 1
store i32 %195, i32* @optind
br label %196
196: ; preds = %24, %16, %152, %27, %114, %9, %124, %100, %103, %122, %127, %183, %192, %189, %188, %186, %34
%197 = phi i32 [ -1, %34 ], [ %156, %189 ], [ 58, %186 ], [ %156, %188 ], [ 63, %192 ], [ 58, %183 ], [ 58, %124 ], [ 58, %100 ], [ 63, %103 ], [ 0, %122 ], [ 63, %127 ], [ -1, %9 ], [ %121, %114 ], [ -1, %27 ], [ -1, %152 ], [ -1, %16 ], [ -1, %24 ]
ret i32 %197
}