#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int strcmp(char *, char *);
int flag_build(int ftype, char *fname, char *fvalue, int fftype, char *ffname,
               char *ffvalue) {
  int valeq, selfnull;
  selfnull = 0;
  if (strcmp(fname, ffname) != 0)
    return 3;
  if (fvalue == NULL) {
    fvalue = "";
    selfnull = 1;
  }
  if (ffvalue == NULL)
    ffvalue = "";
  valeq = strcmp(fvalue, ffvalue);
  if (ftype == 1 && fftype == 16 && valeq == 0)
    return 2;
  if (ftype == 1 && fftype == 2)
    return 2;
  if (ftype == 1 && fftype == 1 && valeq != 0)
    return 1;
  if (ftype == 1 && fftype == 16 && valeq != 0)
    return 1;
  if (ftype == 1 && fftype == 8 && valeq == 0)
    return 1;
  if (ftype == 32 && fftype == 1 && selfnull)
    return 2;
  if (ftype == 32 && fftype == 16 && selfnull)
    return 2;
  if (ftype == 32 && fftype == 8 && selfnull)
    return 2;
  if (ftype == 32 && fftype == 2 && selfnull)
    return 1;
  if (ftype == 32 && fftype == 16 && valeq == 0 && !selfnull)
    return 2;
  if (ftype == 32 && fftype == 1 && valeq == 0 && !selfnull)
    return 2;
  if (ftype == 32 && fftype == 16 && valeq != 0 && !selfnull)
    return 1;
  if (ftype == 32 && fftype == 1 && valeq != 0 && !selfnull)
    return 1;
  if (ftype == 32 && fftype == 8 && !selfnull)
    return 1;
  if (ftype == 32 && fftype == 2 && !selfnull)
    return 1;
  if (ftype == 4 && fftype == 2 && selfnull)
    return 2;
  if (ftype == 4 && fftype == 16 && selfnull)
    return 1;
  if (ftype == 4 && fftype == 1 && selfnull)
    return 1;
  if (ftype == 4 && fftype == 8 && selfnull)
    return 1;
  if (ftype == 4 && fftype == 16 && valeq != 0 && !selfnull)
    return 2;
  if (ftype == 4 && fftype == 2 && !selfnull)
    return 2;
  if (ftype == 4 && fftype == 8 && valeq == 0 && !selfnull)
    return 2;
  if (ftype == 4 && fftype == 16 && valeq == 0 && !selfnull)
    return 1;
  if (ftype == 4 && fftype == 1 && valeq == 0 && !selfnull)
    return 1;
  if (ftype == 4 && fftype == 8 && valeq != 0 && !selfnull)
    return 1;
  return 3;
}


x86 assembly (clang, -O0):
<flag_build>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x28(%rbp),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%eax
je     1157 <flag_build+0x47>
movl   $0x3,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpq   $0x0,-0x18(%rbp)
jne    1174 <flag_build+0x64>
lea    0xe97(%rip),%rax
mov    %rax,-0x18(%rbp)
movl   $0x1,-0x38(%rbp)
cmpq   $0x0,-0x30(%rbp)
jne    118a <flag_build+0x7a>
lea    0xe7a(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1030 <strcmp@plt>
mov    %eax,-0x34(%rbp)
cmpl   $0x1,-0x8(%rbp)
jne    11c4 <flag_build+0xb4>
cmpl   $0x10,-0x1c(%rbp)
jne    11c4 <flag_build+0xb4>
cmpl   $0x0,-0x34(%rbp)
jne    11c4 <flag_build+0xb4>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x1,-0x8(%rbp)
jne    11e4 <flag_build+0xd4>
cmpl   $0x2,-0x1c(%rbp)
jne    11e4 <flag_build+0xd4>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x1,-0x8(%rbp)
jne    120e <flag_build+0xfe>
cmpl   $0x1,-0x1c(%rbp)
jne    120e <flag_build+0xfe>
cmpl   $0x0,-0x34(%rbp)
je     120e <flag_build+0xfe>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x1,-0x8(%rbp)
jne    1238 <flag_build+0x128>
cmpl   $0x10,-0x1c(%rbp)
jne    1238 <flag_build+0x128>
cmpl   $0x0,-0x34(%rbp)
je     1238 <flag_build+0x128>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x1,-0x8(%rbp)
jne    1262 <flag_build+0x152>
cmpl   $0x8,-0x1c(%rbp)
jne    1262 <flag_build+0x152>
cmpl   $0x0,-0x34(%rbp)
jne    1262 <flag_build+0x152>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    128c <flag_build+0x17c>
cmpl   $0x1,-0x1c(%rbp)
jne    128c <flag_build+0x17c>
cmpl   $0x0,-0x38(%rbp)
je     128c <flag_build+0x17c>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    12b6 <flag_build+0x1a6>
cmpl   $0x10,-0x1c(%rbp)
jne    12b6 <flag_build+0x1a6>
cmpl   $0x0,-0x38(%rbp)
je     12b6 <flag_build+0x1a6>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    12e0 <flag_build+0x1d0>
cmpl   $0x8,-0x1c(%rbp)
jne    12e0 <flag_build+0x1d0>
cmpl   $0x0,-0x38(%rbp)
je     12e0 <flag_build+0x1d0>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    130a <flag_build+0x1fa>
cmpl   $0x2,-0x1c(%rbp)
jne    130a <flag_build+0x1fa>
cmpl   $0x0,-0x38(%rbp)
je     130a <flag_build+0x1fa>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    133e <flag_build+0x22e>
cmpl   $0x10,-0x1c(%rbp)
jne    133e <flag_build+0x22e>
cmpl   $0x0,-0x34(%rbp)
jne    133e <flag_build+0x22e>
cmpl   $0x0,-0x38(%rbp)
jne    133e <flag_build+0x22e>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    1372 <flag_build+0x262>
cmpl   $0x1,-0x1c(%rbp)
jne    1372 <flag_build+0x262>
cmpl   $0x0,-0x34(%rbp)
jne    1372 <flag_build+0x262>
cmpl   $0x0,-0x38(%rbp)
jne    1372 <flag_build+0x262>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    13a6 <flag_build+0x296>
cmpl   $0x10,-0x1c(%rbp)
jne    13a6 <flag_build+0x296>
cmpl   $0x0,-0x34(%rbp)
je     13a6 <flag_build+0x296>
cmpl   $0x0,-0x38(%rbp)
jne    13a6 <flag_build+0x296>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    13da <flag_build+0x2ca>
cmpl   $0x1,-0x1c(%rbp)
jne    13da <flag_build+0x2ca>
cmpl   $0x0,-0x34(%rbp)
je     13da <flag_build+0x2ca>
cmpl   $0x0,-0x38(%rbp)
jne    13da <flag_build+0x2ca>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    1404 <flag_build+0x2f4>
cmpl   $0x8,-0x1c(%rbp)
jne    1404 <flag_build+0x2f4>
cmpl   $0x0,-0x38(%rbp)
jne    1404 <flag_build+0x2f4>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x20,-0x8(%rbp)
jne    142e <flag_build+0x31e>
cmpl   $0x2,-0x1c(%rbp)
jne    142e <flag_build+0x31e>
cmpl   $0x0,-0x38(%rbp)
jne    142e <flag_build+0x31e>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    1458 <flag_build+0x348>
cmpl   $0x2,-0x1c(%rbp)
jne    1458 <flag_build+0x348>
cmpl   $0x0,-0x38(%rbp)
je     1458 <flag_build+0x348>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    1482 <flag_build+0x372>
cmpl   $0x10,-0x1c(%rbp)
jne    1482 <flag_build+0x372>
cmpl   $0x0,-0x38(%rbp)
je     1482 <flag_build+0x372>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    14ac <flag_build+0x39c>
cmpl   $0x1,-0x1c(%rbp)
jne    14ac <flag_build+0x39c>
cmpl   $0x0,-0x38(%rbp)
je     14ac <flag_build+0x39c>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    14d6 <flag_build+0x3c6>
cmpl   $0x8,-0x1c(%rbp)
jne    14d6 <flag_build+0x3c6>
cmpl   $0x0,-0x38(%rbp)
je     14d6 <flag_build+0x3c6>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    150a <flag_build+0x3fa>
cmpl   $0x10,-0x1c(%rbp)
jne    150a <flag_build+0x3fa>
cmpl   $0x0,-0x34(%rbp)
je     150a <flag_build+0x3fa>
cmpl   $0x0,-0x38(%rbp)
jne    150a <flag_build+0x3fa>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    1534 <flag_build+0x424>
cmpl   $0x2,-0x1c(%rbp)
jne    1534 <flag_build+0x424>
cmpl   $0x0,-0x38(%rbp)
jne    1534 <flag_build+0x424>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    1568 <flag_build+0x458>
cmpl   $0x8,-0x1c(%rbp)
jne    1568 <flag_build+0x458>
cmpl   $0x0,-0x34(%rbp)
jne    1568 <flag_build+0x458>
cmpl   $0x0,-0x38(%rbp)
jne    1568 <flag_build+0x458>
movl   $0x2,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    159c <flag_build+0x48c>
cmpl   $0x10,-0x1c(%rbp)
jne    159c <flag_build+0x48c>
cmpl   $0x0,-0x34(%rbp)
jne    159c <flag_build+0x48c>
cmpl   $0x0,-0x38(%rbp)
jne    159c <flag_build+0x48c>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    15d0 <flag_build+0x4c0>
cmpl   $0x1,-0x1c(%rbp)
jne    15d0 <flag_build+0x4c0>
cmpl   $0x0,-0x34(%rbp)
jne    15d0 <flag_build+0x4c0>
cmpl   $0x0,-0x38(%rbp)
jne    15d0 <flag_build+0x4c0>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
cmpl   $0x4,-0x8(%rbp)
jne    1604 <flag_build+0x4f4>
cmpl   $0x8,-0x1c(%rbp)
jne    1604 <flag_build+0x4f4>
cmpl   $0x0,-0x34(%rbp)
je     1604 <flag_build+0x4f4>
cmpl   $0x0,-0x38(%rbp)
jne    1604 <flag_build+0x4f4>
movl   $0x1,-0x4(%rbp)
jmp    160b <flag_build+0x4fb>
movl   $0x3,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<flag_build>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %r9,%rbp
mov    %ecx,%ebx
mov    %rdx,%r14
mov    %edi,%r15d
mov    %rsi,%rdi
mov    %r8,%rsi
call   1030 <strcmp@plt>
mov    %eax,%ecx
mov    $0x3,%eax
test   %ecx,%ecx
jne    11af <flag_build+0x9f>
test   %r14,%r14
lea    0xebd(%rip),%rax
mov    %r14,%rdi
cmove  %rax,%rdi
test   %rbp,%rbp
cmove  %rax,%rbp
mov    %rbp,%rsi
call   1030 <strcmp@plt>
mov    %eax,%edi
mov    %r15d,%eax
xor    $0x1,%eax
mov    %ebx,%edx
xor    $0x10,%edx
or     %edx,%eax
sete   %sil
mov    $0x2,%eax
jne    1177 <flag_build+0x67>
test   %edi,%edi
je     11af <flag_build+0x9f>
cmp    $0x1,%r15d
jne    1182 <flag_build+0x72>
cmp    $0x2,%ebx
je     11af <flag_build+0x9f>
cmp    $0x1,%r15d
jne    1191 <flag_build+0x81>
cmp    $0x1,%ebx
jne    1191 <flag_build+0x81>
test   %edi,%edi
jne    11aa <flag_build+0x9a>
test   %edi,%edi
setne  %cl
test   %cl,%sil
jne    11aa <flag_build+0x9a>
cmp    $0x1,%r15d
jne    11b8 <flag_build+0xa8>
cmp    $0x8,%ebx
jne    11b8 <flag_build+0xa8>
test   %edi,%edi
jne    11b8 <flag_build+0xa8>
mov    $0x1,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %ebx,%r12d
xor    $0x1,%r12d
mov    %r15d,%esi
xor    $0x20,%esi
mov    %esi,%ecx
or     %r12d,%ecx
sete   %r8b
test   %r14,%r14
jne    11d8 <flag_build+0xc8>
test   %r8b,%r8b
jne    11af <flag_build+0x9f>
mov    %esi,%ecx
or     %edx,%ecx
sete   %r10b
test   %r14,%r14
jne    11ea <flag_build+0xda>
test   %r10b,%r10b
jne    11af <flag_build+0x9f>
mov    %ebx,%ecx
xor    $0x8,%ecx
mov    %esi,%ebp
or     %ecx,%ebp
sete   %r9b
test   %r14,%r14
jne    1201 <flag_build+0xf1>
test   %r9b,%r9b
jne    11af <flag_build+0x9f>
xor    $0x2,%ebx
or     %ebx,%esi
sete   %r11b
test   %r14,%r14
jne    1214 <flag_build+0x104>
test   %r11b,%r11b
jne    11aa <flag_build+0x9a>
test   %edi,%edi
sete   %bpl
test   %r14,%r14
je     1224 <flag_build+0x114>
and    %r10b,%bpl
jne    11af <flag_build+0x9f>
test   %edi,%edi
sete   %bpl
test   %r14,%r14
je     1238 <flag_build+0x128>
and    %r8b,%bpl
jne    11af <flag_build+0x9f>
test   %edi,%edi
setne  %bpl
test   %r14,%r14
je     124c <flag_build+0x13c>
and    %bpl,%r10b
jne    11aa <flag_build+0x9a>
test   %edi,%edi
setne  %r10b
test   %r14,%r14
je     1266 <flag_build+0x156>
and    %r10b,%r8b
or     %r8b,%r9b
or     %r9b,%r11b
jne    11aa <flag_build+0x9a>
xor    $0x4,%r15d
or     %r15d,%ebx
sete   %bl
test   %r14,%r14
jne    127d <flag_build+0x16d>
test   %bl,%bl
jne    11af <flag_build+0x9f>
or     %r15d,%edx
sete   %dl
test   %r14,%r14
jne    1290 <flag_build+0x180>
test   %dl,%dl
jne    11aa <flag_build+0x9a>
or     %r15d,%r12d
sete   %r8b
test   %r14,%r14
jne    12a5 <flag_build+0x195>
test   %r8b,%r8b
jne    11aa <flag_build+0x9a>
or     %ecx,%r15d
sete   %sil
test   %r14,%r14
jne    12ba <flag_build+0x1aa>
test   %sil,%sil
jne    11aa <flag_build+0x9a>
test   %edi,%edi
setne  %cl
test   %r14,%r14
je     12ce <flag_build+0x1be>
and    %dl,%cl
or     %cl,%bl
jne    11af <flag_build+0x9f>
test   %edi,%edi
sete   %cl
test   %r14,%r14
je     12e1 <flag_build+0x1d1>
and    %sil,%cl
jne    11af <flag_build+0x9f>
test   %edi,%edi
sete   %al
test   %r14,%r14
je     12f3 <flag_build+0x1e3>
and    %al,%dl
jne    11aa <flag_build+0x9a>
test   %edi,%edi
sete   %cl
test   %r14,%r14
je     130b <flag_build+0x1fb>
mov    $0x1,%eax
and    %cl,%r8b
jne    11af <flag_build+0x9f>
test   %edi,%edi
sete   %al
xor    $0x1,%sil
or     %al,%sil
test   %r14,%r14
movzbl %sil,%eax
lea    0x1(%rax,%rax,1),%ecx
mov    $0x3,%eax
cmovne %ecx,%eax
jmp    11af <flag_build+0x9f>

LLVM IR (-O0):
@.str = [1 x i8] zeroinitializer
define i32 @flag_build(i32 %0, i8* %1, i8* %2, i32 %3, i8* %4, i8* %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i8*
%10 = alloca i8*
%11 = alloca i32
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i32
%15 = alloca i32
store i32 %0, i32* %8
store i8* %1, i8** %9
store i8* %2, i8** %10
store i32 %3, i32* %11
store i8* %4, i8** %12
store i8* %5, i8** %13
store i32 0, i32* %15
%16 = load i8*, i8** %9
%17 = load i8*, i8** %12
%18 = call i32 @strcmp(i8* %16, i8* %17)
%19 = icmp ne i32 %18, 0
br i1 %19, label %20, label %21
20: ; preds = %6
store i32 3, i32* %7
br label %307
21: ; preds = %6
%22 = load i8*, i8** %10
%23 = icmp eq i8* %22, null
br i1 %23, label %24, label %25
24: ; preds = %21
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8** %10
store i32 1, i32* %15
br label %25
25: ; preds = %24, %21
%26 = load i8*, i8** %13
%27 = icmp eq i8* %26, null
br i1 %27, label %28, label %29
28: ; preds = %25
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8** %13
br label %29
29: ; preds = %28, %25
%30 = load i8*, i8** %10
%31 = load i8*, i8** %13
%32 = call i32 @strcmp(i8* %30, i8* %31)
store i32 %32, i32* %14
%33 = load i32, i32* %8
%34 = icmp eq i32 %33, 1
br i1 %34, label %35, label %42
35: ; preds = %29
%36 = load i32, i32* %11
%37 = icmp eq i32 %36, 16
br i1 %37, label %38, label %42
38: ; preds = %35
%39 = load i32, i32* %14
%40 = icmp eq i32 %39, 0
br i1 %40, label %41, label %42
41: ; preds = %38
store i32 2, i32* %7
br label %307
42: ; preds = %38, %35, %29
%43 = load i32, i32* %8
%44 = icmp eq i32 %43, 1
br i1 %44, label %45, label %49
45: ; preds = %42
%46 = load i32, i32* %11
%47 = icmp eq i32 %46, 2
br i1 %47, label %48, label %49
48: ; preds = %45
store i32 2, i32* %7
br label %307
49: ; preds = %45, %42
%50 = load i32, i32* %8
%51 = icmp eq i32 %50, 1
br i1 %51, label %52, label %59
52: ; preds = %49
%53 = load i32, i32* %11
%54 = icmp eq i32 %53, 1
br i1 %54, label %55, label %59
55: ; preds = %52
%56 = load i32, i32* %14
%57 = icmp ne i32 %56, 0
br i1 %57, label %58, label %59
58: ; preds = %55
store i32 1, i32* %7
br label %307
59: ; preds = %55, %52, %49
%60 = load i32, i32* %8
%61 = icmp eq i32 %60, 1
br i1 %61, label %62, label %69
62: ; preds = %59
%63 = load i32, i32* %11
%64 = icmp eq i32 %63, 16
br i1 %64, label %65, label %69
65: ; preds = %62
%66 = load i32, i32* %14
%67 = icmp ne i32 %66, 0
br i1 %67, label %68, label %69
68: ; preds = %65
store i32 1, i32* %7
br label %307
69: ; preds = %65, %62, %59
%70 = load i32, i32* %8
%71 = icmp eq i32 %70, 1
br i1 %71, label %72, label %79
72: ; preds = %69
%73 = load i32, i32* %11
%74 = icmp eq i32 %73, 8
br i1 %74, label %75, label %79
75: ; preds = %72
%76 = load i32, i32* %14
%77 = icmp eq i32 %76, 0
br i1 %77, label %78, label %79
78: ; preds = %75
store i32 1, i32* %7
br label %307
79: ; preds = %75, %72, %69
%80 = load i32, i32* %8
%81 = icmp eq i32 %80, 32
br i1 %81, label %82, label %89
82: ; preds = %79
%83 = load i32, i32* %11
%84 = icmp eq i32 %83, 1
br i1 %84, label %85, label %89
85: ; preds = %82
%86 = load i32, i32* %15
%87 = icmp ne i32 %86, 0
br i1 %87, label %88, label %89
88: ; preds = %85
store i32 2, i32* %7
br label %307
89: ; preds = %85, %82, %79
%90 = load i32, i32* %8
%91 = icmp eq i32 %90, 32
br i1 %91, label %92, label %99
92: ; preds = %89
%93 = load i32, i32* %11
%94 = icmp eq i32 %93, 16
br i1 %94, label %95, label %99
95: ; preds = %92
%96 = load i32, i32* %15
%97 = icmp ne i32 %96, 0
br i1 %97, label %98, label %99
98: ; preds = %95
store i32 2, i32* %7
br label %307
99: ; preds = %95, %92, %89
%100 = load i32, i32* %8
%101 = icmp eq i32 %100, 32
br i1 %101, label %102, label %109
102: ; preds = %99
%103 = load i32, i32* %11
%104 = icmp eq i32 %103, 8
br i1 %104, label %105, label %109
105: ; preds = %102
%106 = load i32, i32* %15
%107 = icmp ne i32 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %105
store i32 2, i32* %7
br label %307
109: ; preds = %105, %102, %99
%110 = load i32, i32* %8
%111 = icmp eq i32 %110, 32
br i1 %111, label %112, label %119
112: ; preds = %109
%113 = load i32, i32* %11
%114 = icmp eq i32 %113, 2
br i1 %114, label %115, label %119
115: ; preds = %112
%116 = load i32, i32* %15
%117 = icmp ne i32 %116, 0
br i1 %117, label %118, label %119
118: ; preds = %115
store i32 1, i32* %7
br label %307
119: ; preds = %115, %112, %109
%120 = load i32, i32* %8
%121 = icmp eq i32 %120, 32
br i1 %121, label %122, label %132
122: ; preds = %119
%123 = load i32, i32* %11
%124 = icmp eq i32 %123, 16
br i1 %124, label %125, label %132
125: ; preds = %122
%126 = load i32, i32* %14
%127 = icmp eq i32 %126, 0
br i1 %127, label %128, label %132
128: ; preds = %125
%129 = load i32, i32* %15
%130 = icmp ne i32 %129, 0
br i1 %130, label %132, label %131
131: ; preds = %128
store i32 2, i32* %7
br label %307
132: ; preds = %128, %125, %122, %119
%133 = load i32, i32* %8
%134 = icmp eq i32 %133, 32
br i1 %134, label %135, label %145
135: ; preds = %132
%136 = load i32, i32* %11
%137 = icmp eq i32 %136, 1
br i1 %137, label %138, label %145
138: ; preds = %135
%139 = load i32, i32* %14
%140 = icmp eq i32 %139, 0
br i1 %140, label %141, label %145
141: ; preds = %138
%142 = load i32, i32* %15
%143 = icmp ne i32 %142, 0
br i1 %143, label %145, label %144
144: ; preds = %141
store i32 2, i32* %7
br label %307
145: ; preds = %141, %138, %135, %132
%146 = load i32, i32* %8
%147 = icmp eq i32 %146, 32
br i1 %147, label %148, label %158
148: ; preds = %145
%149 = load i32, i32* %11
%150 = icmp eq i32 %149, 16
br i1 %150, label %151, label %158
151: ; preds = %148
%152 = load i32, i32* %14
%153 = icmp ne i32 %152, 0
br i1 %153, label %154, label %158
154: ; preds = %151
%155 = load i32, i32* %15
%156 = icmp ne i32 %155, 0
br i1 %156, label %158, label %157
157: ; preds = %154
store i32 1, i32* %7
br label %307
158: ; preds = %154, %151, %148, %145
%159 = load i32, i32* %8
%160 = icmp eq i32 %159, 32
br i1 %160, label %161, label %171
161: ; preds = %158
%162 = load i32, i32* %11
%163 = icmp eq i32 %162, 1
br i1 %163, label %164, label %171
164: ; preds = %161
%165 = load i32, i32* %14
%166 = icmp ne i32 %165, 0
br i1 %166, label %167, label %171
167: ; preds = %164
%168 = load i32, i32* %15
%169 = icmp ne i32 %168, 0
br i1 %169, label %171, label %170
170: ; preds = %167
store i32 1, i32* %7
br label %307
171: ; preds = %167, %164, %161, %158
%172 = load i32, i32* %8
%173 = icmp eq i32 %172, 32
br i1 %173, label %174, label %181
174: ; preds = %171
%175 = load i32, i32* %11
%176 = icmp eq i32 %175, 8
br i1 %176, label %177, label %181
177: ; preds = %174
%178 = load i32, i32* %15
%179 = icmp ne i32 %178, 0
br i1 %179, label %181, label %180
180: ; preds = %177
store i32 1, i32* %7
br label %307
181: ; preds = %177, %174, %171
%182 = load i32, i32* %8
%183 = icmp eq i32 %182, 32
br i1 %183, label %184, label %191
184: ; preds = %181
%185 = load i32, i32* %11
%186 = icmp eq i32 %185, 2
br i1 %186, label %187, label %191
187: ; preds = %184
%188 = load i32, i32* %15
%189 = icmp ne i32 %188, 0
br i1 %189, label %191, label %190
190: ; preds = %187
store i32 1, i32* %7
br label %307
191: ; preds = %187, %184, %181
%192 = load i32, i32* %8
%193 = icmp eq i32 %192, 4
br i1 %193, label %194, label %201
194: ; preds = %191
%195 = load i32, i32* %11
%196 = icmp eq i32 %195, 2
br i1 %196, label %197, label %201
197: ; preds = %194
%198 = load i32, i32* %15
%199 = icmp ne i32 %198, 0
br i1 %199, label %200, label %201
200: ; preds = %197
store i32 2, i32* %7
br label %307
201: ; preds = %197, %194, %191
%202 = load i32, i32* %8
%203 = icmp eq i32 %202, 4
br i1 %203, label %204, label %211
204: ; preds = %201
%205 = load i32, i32* %11
%206 = icmp eq i32 %205, 16
br i1 %206, label %207, label %211
207: ; preds = %204
%208 = load i32, i32* %15
%209 = icmp ne i32 %208, 0
br i1 %209, label %210, label %211
210: ; preds = %207
store i32 1, i32* %7
br label %307
211: ; preds = %207, %204, %201
%212 = load i32, i32* %8
%213 = icmp eq i32 %212, 4
br i1 %213, label %214, label %221
214: ; preds = %211
%215 = load i32, i32* %11
%216 = icmp eq i32 %215, 1
br i1 %216, label %217, label %221
217: ; preds = %214
%218 = load i32, i32* %15
%219 = icmp ne i32 %218, 0
br i1 %219, label %220, label %221
220: ; preds = %217
store i32 1, i32* %7
br label %307
221: ; preds = %217, %214, %211
%222 = load i32, i32* %8
%223 = icmp eq i32 %222, 4
br i1 %223, label %224, label %231
224: ; preds = %221
%225 = load i32, i32* %11
%226 = icmp eq i32 %225, 8
br i1 %226, label %227, label %231
227: ; preds = %224
%228 = load i32, i32* %15
%229 = icmp ne i32 %228, 0
br i1 %229, label %230, label %231
230: ; preds = %227
store i32 1, i32* %7
br label %307
231: ; preds = %227, %224, %221
%232 = load i32, i32* %8
%233 = icmp eq i32 %232, 4
br i1 %233, label %234, label %244
234: ; preds = %231
%235 = load i32, i32* %11
%236 = icmp eq i32 %235, 16
br i1 %236, label %237, label %244
237: ; preds = %234
%238 = load i32, i32* %14
%239 = icmp ne i32 %238, 0
br i1 %239, label %240, label %244
240: ; preds = %237
%241 = load i32, i32* %15
%242 = icmp ne i32 %241, 0
br i1 %242, label %244, label %243
243: ; preds = %240
store i32 2, i32* %7
br label %307
244: ; preds = %240, %237, %234, %231
%245 = load i32, i32* %8
%246 = icmp eq i32 %245, 4
br i1 %246, label %247, label %254
247: ; preds = %244
%248 = load i32, i32* %11
%249 = icmp eq i32 %248, 2
br i1 %249, label %250, label %254
250: ; preds = %247
%251 = load i32, i32* %15
%252 = icmp ne i32 %251, 0
br i1 %252, label %254, label %253
253: ; preds = %250
store i32 2, i32* %7
br label %307
254: ; preds = %250, %247, %244
%255 = load i32, i32* %8
%256 = icmp eq i32 %255, 4
br i1 %256, label %257, label %267
257: ; preds = %254
%258 = load i32, i32* %11
%259 = icmp eq i32 %258, 8
br i1 %259, label %260, label %267
260: ; preds = %257
%261 = load i32, i32* %14
%262 = icmp eq i32 %261, 0
br i1 %262, label %263, label %267
263: ; preds = %260
%264 = load i32, i32* %15
%265 = icmp ne i32 %264, 0
br i1 %265, label %267, label %266
266: ; preds = %263
store i32 2, i32* %7
br label %307
267: ; preds = %263, %260, %257, %254
%268 = load i32, i32* %8
%269 = icmp eq i32 %268, 4
br i1 %269, label %270, label %280
270: ; preds = %267
%271 = load i32, i32* %11
%272 = icmp eq i32 %271, 16
br i1 %272, label %273, label %280
273: ; preds = %270
%274 = load i32, i32* %14
%275 = icmp eq i32 %274, 0
br i1 %275, label %276, label %280
276: ; preds = %273
%277 = load i32, i32* %15
%278 = icmp ne i32 %277, 0
br i1 %278, label %280, label %279
279: ; preds = %276
store i32 1, i32* %7
br label %307
280: ; preds = %276, %273, %270, %267
%281 = load i32, i32* %8
%282 = icmp eq i32 %281, 4
br i1 %282, label %283, label %293
283: ; preds = %280
%284 = load i32, i32* %11
%285 = icmp eq i32 %284, 1
br i1 %285, label %286, label %293
286: ; preds = %283
%287 = load i32, i32* %14
%288 = icmp eq i32 %287, 0
br i1 %288, label %289, label %293
289: ; preds = %286
%290 = load i32, i32* %15
%291 = icmp ne i32 %290, 0
br i1 %291, label %293, label %292
292: ; preds = %289
store i32 1, i32* %7
br label %307
293: ; preds = %289, %286, %283, %280
%294 = load i32, i32* %8
%295 = icmp eq i32 %294, 4
br i1 %295, label %296, label %306
296: ; preds = %293
%297 = load i32, i32* %11
%298 = icmp eq i32 %297, 8
br i1 %298, label %299, label %306
299: ; preds = %296
%300 = load i32, i32* %14
%301 = icmp ne i32 %300, 0
br i1 %301, label %302, label %306
302: ; preds = %299
%303 = load i32, i32* %15
%304 = icmp ne i32 %303, 0
br i1 %304, label %306, label %305
305: ; preds = %302
store i32 1, i32* %7
br label %307
306: ; preds = %302, %299, %296, %293
store i32 3, i32* %7
br label %307
307: ; preds = %306, %305, %292, %279, %266, %253, %243, %230, %220, %210, %200, %190, %180, %170, %157, %144, %131, %118, %108, %98, %88, %78, %68, %58, %48, %41, %20
%308 = load i32, i32* %7
ret i32 %308
}

LLVM IR (-O2):
@.str = [1 x i8] zeroinitializer
define i32 @flag_build(i32 %0, i8* nocapture %1, i8* %2, i32 %3, i8* nocapture %4, i8* %5) {
%7 = tail call i32 @strcmp(i8* dereferenceable(1) %1, i8* dereferenceable(1) %4)
%8 = icmp eq i32 %7, 0
br i1 %8, label %9, label %100
9: ; preds = %6
%10 = icmp eq i8* %2, null
%11 = select i1 %10, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8* %2
%12 = icmp eq i8* %5, null
%13 = select i1 %12, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8* %5
%14 = tail call i32 @strcmp(i8* dereferenceable(1) %11, i8* dereferenceable(1) %13)
%15 = icmp eq i32 %0, 1
%16 = icmp eq i32 %3, 16
%17 = and i1 %15, %16
%18 = icmp eq i32 %14, 0
%19 = select i1 %17, i1 %18, i1 false
br i1 %19, label %100, label %20
20: ; preds = %9
%21 = icmp eq i32 %3, 2
%22 = and i1 %15, %21
br i1 %22, label %100, label %23
23: ; preds = %20
%24 = icmp eq i32 %3, 1
%25 = and i1 %15, %24
%26 = icmp ne i32 %14, 0
%27 = select i1 %25, i1 %26, i1 false
br i1 %27, label %100, label %28
28: ; preds = %23
%29 = select i1 %17, i1 %26, i1 false
br i1 %29, label %100, label %30
30: ; preds = %28
%31 = icmp eq i32 %3, 8
%32 = and i1 %15, %31
%33 = select i1 %32, i1 %18, i1 false
br i1 %33, label %100, label %34
34: ; preds = %30
%35 = icmp eq i32 %0, 32
%36 = and i1 %35, %24
%37 = and i1 %10, %36
br i1 %37, label %100, label %38
38: ; preds = %34
%39 = and i1 %35, %16
%40 = and i1 %10, %39
br i1 %40, label %100, label %41
41: ; preds = %38
%42 = and i1 %35, %31
%43 = and i1 %10, %42
br i1 %43, label %100, label %44
44: ; preds = %41
%45 = and i1 %35, %21
%46 = and i1 %10, %45
br i1 %46, label %100, label %47
47: ; preds = %44
%48 = select i1 %39, i1 %18, i1 false
%49 = xor i1 %48, true
%50 = or i1 %10, %49
br i1 %50, label %51, label %100
51: ; preds = %47
%52 = select i1 %36, i1 %18, i1 false
%53 = xor i1 %52, true
%54 = or i1 %10, %53
br i1 %54, label %55, label %100
55: ; preds = %51
%56 = select i1 %39, i1 %26, i1 false
%57 = xor i1 %56, true
%58 = or i1 %10, %57
br i1 %58, label %59, label %100
59: ; preds = %55
%60 = select i1 %36, i1 %26, i1 false
%61 = or i1 %42, %60
%62 = or i1 %45, %61
%63 = xor i1 %62, true
%64 = or i1 %10, %63
br i1 %64, label %65, label %100
65: ; preds = %59
%66 = icmp eq i32 %0, 4
%67 = and i1 %66, %21
%68 = and i1 %10, %67
br i1 %68, label %100, label %69
69: ; preds = %65
%70 = and i1 %66, %16
%71 = and i1 %10, %70
br i1 %71, label %100, label %72
72: ; preds = %69
%73 = and i1 %66, %24
%74 = and i1 %10, %73
br i1 %74, label %100, label %75
75: ; preds = %72
%76 = and i1 %66, %31
%77 = and i1 %10, %76
br i1 %77, label %100, label %78
78: ; preds = %75
%79 = select i1 %70, i1 %26, i1 false
%80 = or i1 %67, %79
%81 = xor i1 %80, true
%82 = or i1 %10, %81
br i1 %82, label %83, label %100
83: ; preds = %78
%84 = select i1 %76, i1 %18, i1 false
%85 = xor i1 %84, true
%86 = or i1 %10, %85
br i1 %86, label %87, label %100
87: ; preds = %83
%88 = select i1 %70, i1 %18, i1 false
%89 = xor i1 %88, true
%90 = or i1 %10, %89
br i1 %90, label %91, label %100
91: ; preds = %87
%92 = select i1 %73, i1 %18, i1 false
%93 = xor i1 %92, true
%94 = or i1 %10, %93
br i1 %94, label %95, label %100
95: ; preds = %91
%96 = select i1 %76, i1 %26, i1 false
%97 = xor i1 %96, true
%98 = or i1 %10, %97
%99 = select i1 %98, i32 3, i32 1
br label %100
100: ; preds = %95, %91, %87, %83, %78, %75, %72, %69, %65, %59, %55, %51, %47, %44, %41, %38, %34, %30, %28, %23, %20, %9, %6
%101 = phi i32 [ 3, %6 ], [ 2, %9 ], [ 2, %20 ], [ 1, %23 ], [ 1, %28 ], [ 1, %30 ], [ 2, %34 ], [ 2, %38 ], [ 2, %41 ], [ 1, %44 ], [ 2, %47 ], [ 2, %51 ], [ 1, %55 ], [ 1, %59 ], [ 2, %65 ], [ 1, %69 ], [ 1, %72 ], [ 1, %75 ], [ 2, %78 ], [ 2, %83 ], [ 1, %87 ], [ 1, %91 ], [ %99, %95 ]
ret i32 %101
}