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

/* Variables and functions */
scalar_t__ no_argument;
char *optarg;
scalar_t__ opterr;
scalar_t__ required_argument;
size_t strcspn(char *, char *);
scalar_t__ strncmp(char *, char *, size_t);
int /*<<< orphan*/ warnx(char *, char *);
int handleLongOption(char *option, const struct option *longopts,
                     int *longindex, bool colonMode) {
  size_t optionLength = strcspn(option, "=");
  for (size_t i = 0; longopts[i].name; i++) {
    if (strncmp(option, longopts[i].name, optionLength) == 0 &&
        longopts[i].name[optionLength] == '\0') {
      if (option[optionLength] == '\0' &&
          longopts[i].has_arg == required_argument) {
        if (opterr && !colonMode) {
          warnx("option '--%s' requires an argument", option);
        }
        return !colonMode ? '?' : ':';
      } else if (option[optionLength] != '\0' &&
                 longopts[i].has_arg == no_argument) {
        if (opterr && !colonMode) {
          warnx("option '--%s' does not allow an argument", longopts[i].name);
        }
        return '?';
      }
      if (option[optionLength] != '\0') {
        optarg = option + optionLength + 1;
      }
      if (longindex) {
        *longindex = i;
      }
      if (longopts[i].flag) {
        *longopts[i].flag = longopts[i].val;
        return 0;
      } else {
        return longopts[i].val;
      }
    }
  }
  if (opterr && !colonMode) {
    warnx("unrecognized option '--%s'", option);
  }
  return '?';
}


x86 assembly (clang, -O0):
<handleLongOption>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xeae(%rip),%rsi
call   1050 <strcspn@plt>
mov    %rax,-0x30(%rbp)
movq   $0x0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
cmpq   $0x0,(%rax)
je     138e <handleLongOption+0x25e>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
mov    (%rax),%rsi
mov    -0x30(%rbp),%rdx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1378 <handleLongOption+0x248>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
mov    (%rax),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1378 <handleLongOption+0x248>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    124d <handleLongOption+0x11d>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
mov    0x8(%rax),%rax
mov    0x2de9(%rip),%rcx
cmp    (%rcx),%rax
jne    124d <handleLongOption+0x11d>
mov    0x2dc1(%rip),%rax
cmpq   $0x0,(%rax)
je     122b <handleLongOption+0xfb>
cmpl   $0x0,-0x24(%rbp)
jne    122b <handleLongOption+0xfb>
mov    -0x10(%rbp),%rsi
lea    0xddc(%rip),%rdi
call   1040 <warnx@plt>
cmpl   $0x0,-0x24(%rbp)
setne  %dl
xor    $0xff,%dl
mov    $0x3a,%eax
mov    $0x3f,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    13c0 <handleLongOption+0x290>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     12ca <handleLongOption+0x19a>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
mov    0x8(%rax),%rax
mov    0x2d54(%rip),%rcx
cmp    (%rcx),%rax
jne    12ca <handleLongOption+0x19a>
mov    0x2d3c(%rip),%rax
cmpq   $0x0,(%rax)
je     12be <handleLongOption+0x18e>
cmpl   $0x0,-0x24(%rbp)
jne    12be <handleLongOption+0x18e>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
mov    (%rax),%rsi
lea    0xd6c(%rip),%rdi
call   1040 <warnx@plt>
movl   $0x3f,-0x4(%rbp)
jmp    13c0 <handleLongOption+0x290>
jmp    12cf <handleLongOption+0x19f>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     12fa <handleLongOption+0x1ca>
mov    -0x10(%rbp),%rcx
add    -0x30(%rbp),%rcx
add    $0x1,%rcx
mov    0x2d01(%rip),%rax
mov    %rcx,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     1311 <handleLongOption+0x1e1>
mov    -0x38(%rbp),%rax
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
cmpq   $0x0,0x10(%rax)
je     135e <handleLongOption+0x22e>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
mov    0x18(%rax),%ecx
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rdx
shl    $0x5,%rdx
add    %rdx,%rax
mov    0x10(%rax),%rax
mov    %ecx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    13c0 <handleLongOption+0x290>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
mov    0x18(%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    13c0 <handleLongOption+0x290>
jmp    137d <handleLongOption+0x24d>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1163 <handleLongOption+0x33>
mov    0x2c33(%rip),%rax
cmpq   $0x0,(%rax)
je     13b9 <handleLongOption+0x289>
cmpl   $0x0,-0x24(%rbp)
jne    13b9 <handleLongOption+0x289>
mov    -0x10(%rbp),%rsi
lea    0xc9a(%rip),%rdi
call   1040 <warnx@plt>
movl   $0x3f,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<handleLongOption>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %ecx,%r14d
mov    %rdx,%r15
mov    %rsi,%rbp
mov    %rdi,%r12
lea    0xeb2(%rip),%rsi
call   1050 <strcspn@plt>
mov    0x0(%rbp),%rsi
test   %rsi,%rsi
je     11d6 <handleLongOption+0xa6>
mov    %rax,%r13
add    $0x20,%rbp
xor    %ebx,%ebx
jmp    1180 <handleLongOption+0x50>
nopw   0x0(%rax,%rax,1)
mov    0x0(%rbp),%rsi
add    $0x20,%rbp
add    $0x1,%ebx
test   %rsi,%rsi
je     11d6 <handleLongOption+0xa6>
mov    %r12,%rdi
mov    %r13,%rdx
call   1030 <strncmp@plt>
test   %rax,%rax
jne    1170 <handleLongOption+0x40>
mov    -0x20(%rbp),%rsi
cmpb   $0x0,(%rsi,%r13,1)
jne    1170 <handleLongOption+0x40>
cmpb   $0x0,(%r12,%r13,1)
mov    -0x18(%rbp),%rax
je     120d <handleLongOption+0xdd>
mov    0x2e23(%rip),%rcx
cmp    (%rcx),%rax
jne    124a <handleLongOption+0x11a>
mov    $0x3f,%ebx
test   %r14d,%r14d
jne    11fc <handleLongOption+0xcc>
mov    0x2e01(%rip),%rax
cmpq   $0x0,(%rax)
je     11fc <handleLongOption+0xcc>
lea    0xe51(%rip),%rdi
jmp    11f7 <handleLongOption+0xc7>
mov    $0x3f,%ebx
test   %r14d,%r14d
jne    11fc <handleLongOption+0xcc>
mov    0x2de1(%rip),%rax
cmpq   $0x0,(%rax)
je     11fc <handleLongOption+0xcc>
lea    0xe5a(%rip),%rdi
mov    %r12,%rsi
call   1040 <warnx@plt>
mov    %ebx,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x2dcc(%rip),%rcx
cmp    (%rcx),%rax
jne    125b <handleLongOption+0x12b>
test   %r14d,%r14d
jne    123a <handleLongOption+0x10a>
mov    0x2da3(%rip),%rax
cmpq   $0x0,(%rax)
je     123a <handleLongOption+0x10a>
lea    0xdd0(%rip),%rdi
mov    %r12,%rsi
call   1040 <warnx@plt>
xor    %eax,%eax
test   %r14d,%r14d
sete   %al
lea    (%rax,%rax,4),%ebx
add    $0x3a,%ebx
jmp    11fc <handleLongOption+0xcc>
add    %r13,%r12
add    $0x1,%r12
mov    0x2da0(%rip),%rax
mov    %r12,(%rax)
test   %r15,%r15
je     1263 <handleLongOption+0x133>
mov    %ebx,(%r15)
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%ebx
test   %rax,%rax
je     11fc <handleLongOption+0xcc>
mov    %ebx,(%rax)
xor    %ebx,%ebx
jmp    11fc <handleLongOption+0xcc>

LLVM IR (-O0):
%struct.option = type { i8*, i64, i32*, i32 }
@.str = [2 x i8] c"=\00"
@required_argument = global i64 0
@opterr = global i64 0
@.str.1 = [35 x i8] c"option '--%s' requires an argument\00"
@no_argument = global i64 0
@.str.2 = [41 x i8] c"option '--%s' does not allow an argument\00"
@optarg = global i8* null
@.str.3 = [27 x i8] c"unrecognized option '--%s'\00"
define i32 @handleLongOption(i8* %0, %struct.option* %1, i32* %2, i32 %3) {
%5 = alloca i32
%6 = alloca i8*
%7 = alloca %struct.option*
%8 = alloca i32*
%9 = alloca i32
%10 = alloca i64
%11 = alloca i64
store i8* %0, i8** %6
store %struct.option* %1, %struct.option** %7
store i32* %2, i32** %8
store i32 %3, i32* %9
%12 = load i8*, i8** %6
%13 = call i64 @strcspn(i8* %12, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
store i64 %13, i64* %10
store i64 0, i64* %11
br label %14
14: ; preds = %146, %4
%15 = load %struct.option*, %struct.option** %7
%16 = load i64, i64* %11
%17 = getelementptr inbounds %struct.option, %struct.option* %15, i64 %16
%18 = getelementptr inbounds %struct.option, %struct.option* %17, i32 0, i32 0
%19 = load i8*, i8** %18
%20 = icmp ne i8* %19, null
br i1 %20, label %21, label %149
21: ; preds = %14
%22 = load i8*, i8** %6
%23 = load %struct.option*, %struct.option** %7
%24 = load i64, i64* %11
%25 = getelementptr inbounds %struct.option, %struct.option* %23, i64 %24
%26 = getelementptr inbounds %struct.option, %struct.option* %25, i32 0, i32 0
%27 = load i8*, i8** %26
%28 = load i64, i64* %10
%29 = call i64 @strncmp(i8* %22, i8* %27, i64 %28)
%30 = icmp eq i64 %29, 0
br i1 %30, label %31, label %145
31: ; preds = %21
%32 = load %struct.option*, %struct.option** %7
%33 = load i64, i64* %11
%34 = getelementptr inbounds %struct.option, %struct.option* %32, i64 %33
%35 = getelementptr inbounds %struct.option, %struct.option* %34, i32 0, i32 0
%36 = load i8*, i8** %35
%37 = load i64, i64* %10
%38 = getelementptr inbounds i8, i8* %36, i64 %37
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = icmp eq i32 %40, 0
br i1 %41, label %42, label %145
42: ; preds = %31
%43 = load i8*, i8** %6
%44 = load i64, i64* %10
%45 = getelementptr inbounds i8, i8* %43, i64 %44
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 0
br i1 %48, label %49, label %72
49: ; preds = %42
%50 = load %struct.option*, %struct.option** %7
%51 = load i64, i64* %11
%52 = getelementptr inbounds %struct.option, %struct.option* %50, i64 %51
%53 = getelementptr inbounds %struct.option, %struct.option* %52, i32 0, i32 1
%54 = load i64, i64* %53
%55 = load i64, i64* @required_argument
%56 = icmp eq i64 %54, %55
br i1 %56, label %57, label %72
57: ; preds = %49
%58 = load i64, i64* @opterr
%59 = icmp ne i64 %58, 0
br i1 %59, label %60, label %66
60: ; preds = %57
%61 = load i32, i32* %9
%62 = icmp ne i32 %61, 0
br i1 %62, label %66, label %63
63: ; preds = %60
%64 = load i8*, i8** %6
%65 = call i32 @warnx(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0), i8* %64)
br label %66
66: ; preds = %63, %60, %57
%67 = load i32, i32* %9
%68 = icmp ne i32 %67, 0
%69 = xor i1 %68, true
%70 = zext i1 %69 to i64
%71 = select i1 %69, i32 63, i32 58
store i32 %71, i32* %5
br label %159
72: ; preds = %49, %42
%73 = load i8*, i8** %6
%74 = load i64, i64* %10
%75 = getelementptr inbounds i8, i8* %73, i64 %74
%76 = load i8, i8* %75
%77 = sext i8 %76 to i32
%78 = icmp ne i32 %77, 0
br i1 %78, label %79, label %101
79: ; preds = %72
%80 = load %struct.option*, %struct.option** %7
%81 = load i64, i64* %11
%82 = getelementptr inbounds %struct.option, %struct.option* %80, i64 %81
%83 = getelementptr inbounds %struct.option, %struct.option* %82, i32 0, i32 1
%84 = load i64, i64* %83
%85 = load i64, i64* @no_argument
%86 = icmp eq i64 %84, %85
br i1 %86, label %87, label %101
87: ; preds = %79
%88 = load i64, i64* @opterr
%89 = icmp ne i64 %88, 0
br i1 %89, label %90, label %100
90: ; preds = %87
%91 = load i32, i32* %9
%92 = icmp ne i32 %91, 0
br i1 %92, label %100, label %93
93: ; preds = %90
%94 = load %struct.option*, %struct.option** %7
%95 = load i64, i64* %11
%96 = getelementptr inbounds %struct.option, %struct.option* %94, i64 %95
%97 = getelementptr inbounds %struct.option, %struct.option* %96, i32 0, i32 0
%98 = load i8*, i8** %97
%99 = call i32 @warnx(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0), i8* %98)
br label %100
100: ; preds = %93, %90, %87
store i32 63, i32* %5
br label %159
101: ; preds = %79, %72
br label %102
102: ; preds = %101
%103 = load i8*, i8** %6
%104 = load i64, i64* %10
%105 = getelementptr inbounds i8, i8* %103, i64 %104
%106 = load i8, i8* %105
%107 = sext i8 %106 to i32
%108 = icmp ne i32 %107, 0
br i1 %108, label %109, label %114
109: ; preds = %102
%110 = load i8*, i8** %6
%111 = load i64, i64* %10
%112 = getelementptr inbounds i8, i8* %110, i64 %111
%113 = getelementptr inbounds i8, i8* %112, i64 1
store i8* %113, i8** @optarg
br label %114
114: ; preds = %109, %102
%115 = load i32*, i32** %8
%116 = icmp ne i32* %115, null
br i1 %116, label %117, label %121
117: ; preds = %114
%118 = load i64, i64* %11
%119 = trunc i64 %118 to i32
%120 = load i32*, i32** %8
store i32 %119, i32* %120
br label %121
121: ; preds = %117, %114
%122 = load %struct.option*, %struct.option** %7
%123 = load i64, i64* %11
%124 = getelementptr inbounds %struct.option, %struct.option* %122, i64 %123
%125 = getelementptr inbounds %struct.option, %struct.option* %124, i32 0, i32 2
%126 = load i32*, i32** %125
%127 = icmp ne i32* %126, null
br i1 %127, label %128, label %139
128: ; preds = %121
%129 = load %struct.option*, %struct.option** %7
%130 = load i64, i64* %11
%131 = getelementptr inbounds %struct.option, %struct.option* %129, i64 %130
%132 = getelementptr inbounds %struct.option, %struct.option* %131, i32 0, i32 3
%133 = load i32, i32* %132
%134 = load %struct.option*, %struct.option** %7
%135 = load i64, i64* %11
%136 = getelementptr inbounds %struct.option, %struct.option* %134, i64 %135
%137 = getelementptr inbounds %struct.option, %struct.option* %136, i32 0, i32 2
%138 = load i32*, i32** %137
store i32 %133, i32* %138
store i32 0, i32* %5
br label %159
139: ; preds = %121
%140 = load %struct.option*, %struct.option** %7
%141 = load i64, i64* %11
%142 = getelementptr inbounds %struct.option, %struct.option* %140, i64 %141
%143 = getelementptr inbounds %struct.option, %struct.option* %142, i32 0, i32 3
%144 = load i32, i32* %143
store i32 %144, i32* %5
br label %159
145: ; preds = %31, %21
br label %146
146: ; preds = %145
%147 = load i64, i64* %11
%148 = add i64 %147, 1
store i64 %148, i64* %11
br label %14
149: ; preds = %14
%150 = load i64, i64* @opterr
%151 = icmp ne i64 %150, 0
br i1 %151, label %152, label %158
152: ; preds = %149
%153 = load i32, i32* %9
%154 = icmp ne i32 %153, 0
br i1 %154, label %158, label %155
155: ; preds = %152
%156 = load i8*, i8** %6
%157 = call i32 @warnx(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), i8* %156)
br label %158
158: ; preds = %155, %152, %149
store i32 63, i32* %5
br label %159
159: ; preds = %158, %139, %128, %100, %66
%160 = load i32, i32* %5
ret i32 %160
}

LLVM IR (-O2):
%struct.option = type { i8*, i64, i32*, i32 }
@.str = [2 x i8] c"=\00"
@required_argument = global i64 0
@opterr = global i64 0
@.str.1 = [35 x i8] c"option '--%s' requires an argument\00"
@no_argument = global i64 0
@.str.2 = [41 x i8] c"option '--%s' does not allow an argument\00"
@optarg = global i8* null
@.str.3 = [27 x i8] c"unrecognized option '--%s'\00"
define i32 @handleLongOption(i8* %0, %struct.option* nocapture %1, i32* writeonly %2, i32 %3) {
%5 = tail call i64 @strcspn(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%6 = getelementptr inbounds %struct.option, %struct.option* %1, i64 0, i32 0
%7 = load i8*, i8** %6
%8 = icmp eq i8* %7, null
br i1 %8, label %66, label %9
9: ; preds = %4, %61
%10 = phi i8* [ %64, %61 ], [ %7, %4 ]
%11 = phi i8** [ %63, %61 ], [ %6, %4 ]
%12 = phi i64 [ %62, %61 ], [ 0, %4 ]
%13 = tail call i64 @strncmp(i8* %0, i8* %10, i64 %5)
%14 = icmp eq i64 %13, 0
br i1 %14, label %15, label %61
15: ; preds = %9
%16 = load i8*, i8** %11
%17 = getelementptr inbounds i8, i8* %16, i64 %5
%18 = load i8, i8* %17
%19 = icmp eq i8 %18, 0
br i1 %19, label %20, label %61
20: ; preds = %15
%21 = getelementptr inbounds i8, i8* %0, i64 %5
%22 = load i8, i8* %21
%23 = icmp eq i8 %22, 0
%24 = getelementptr inbounds %struct.option, %struct.option* %1, i64 %12, i32 1
%25 = load i64, i64* %24
br i1 %23, label %26, label %38
26: ; preds = %20
%27 = load i64, i64* @required_argument
%28 = icmp eq i64 %25, %27
br i1 %28, label %29, label %50
29: ; preds = %26
%30 = load i64, i64* @opterr
%31 = icmp eq i64 %30, 0
%32 = icmp ne i32 %3, 0
%33 = or i1 %32, %31
br i1 %33, label %36, label %34
34: ; preds = %29
%35 = tail call i32 @warnx(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0), i8* %0)
br label %36
36: ; preds = %34, %29
%37 = select i1 %32, i32 58, i32 63
br label %73
38: ; preds = %20
%39 = load i64, i64* @no_argument
%40 = icmp eq i64 %25, %39
br i1 %40, label %41, label %48
41: ; preds = %38
%42 = load i64, i64* @opterr
%43 = icmp eq i64 %42, 0
%44 = icmp ne i32 %3, 0
%45 = or i1 %44, %43
br i1 %45, label %73, label %46
46: ; preds = %41
%47 = tail call i32 @warnx(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0), i8* %16)
br label %73
48: ; preds = %38
%49 = getelementptr inbounds i8, i8* %21, i64 1
store i8* %49, i8** @optarg
br label %50
50: ; preds = %26, %48
%51 = icmp eq i32* %2, null
br i1 %51, label %54, label %52
52: ; preds = %50
%53 = trunc i64 %12 to i32
store i32 %53, i32* %2
br label %54
54: ; preds = %52, %50
%55 = getelementptr inbounds %struct.option, %struct.option* %1, i64 %12, i32 2
%56 = load i32*, i32** %55
%57 = icmp eq i32* %56, null
%58 = getelementptr inbounds %struct.option, %struct.option* %1, i64 %12, i32 3
%59 = load i32, i32* %58
br i1 %57, label %73, label %60
60: ; preds = %54
store i32 %59, i32* %56
br label %73
61: ; preds = %9, %15
%62 = add i64 %12, 1
%63 = getelementptr inbounds %struct.option, %struct.option* %1, i64 %62, i32 0
%64 = load i8*, i8** %63
%65 = icmp eq i8* %64, null
br i1 %65, label %66, label %9
66: ; preds = %61, %4
%67 = load i64, i64* @opterr
%68 = icmp eq i64 %67, 0
%69 = icmp ne i32 %3, 0
%70 = or i1 %69, %68
br i1 %70, label %73, label %71
71: ; preds = %66
%72 = tail call i32 @warnx(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), i8* %0)
br label %73
73: ; preds = %54, %41, %46, %60, %36, %66, %71
%74 = phi i32 [ 63, %71 ], [ 63, %66 ], [ 63, %41 ], [ 63, %46 ], [ 0, %60 ], [ %37, %36 ], [ %59, %54 ]
ret i32 %74
}