#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 atoi(char *);
scalar_t__ isdigit(char);
scalar_t__ strcmp(char *, char *);
void par_color2(int argc, char **argv, int *option, int *opt_color,
                int *bad_arg) {
  if (!argc || argc > 2 || *option)
    *bad_arg = 1;
  *option = 1;
  *opt_color = 0;
  if (argc == 2) {
    if (strcmp(argv[0], "bright") == 0)
      *opt_color = 8;
    else {
      *bad_arg = 1;
      return;
    }
  }
  if (argc) {
    if (strcmp(argv[argc - 1], "black") == 0) {
      if (*opt_color)
        *bad_arg = 1;
      else
        *opt_color = 0;
    } else if (strcmp(argv[argc - 1], "grey") == 0) {
      if (*opt_color)
        *bad_arg = 1;
      else
        *opt_color = 8;
    } else if (strcmp(argv[argc - 1], "red") == 0)
      *opt_color |= 1;
    else if (strcmp(argv[argc - 1], "green") == 0)
      *opt_color |= 2;
    else if (strcmp(argv[argc - 1], "yellow") == 0)
      *opt_color |= 3;
    else if (strcmp(argv[argc - 1], "blue") == 0)
      *opt_color |= 4;
    else if (strcmp(argv[argc - 1], "magenta") == 0)
      *opt_color |= 5;
    else if (strcmp(argv[argc - 1], "cyan") == 0)
      *opt_color |= 6;
    else if (strcmp(argv[argc - 1], "white") == 0)
      *opt_color |= 7;
    else if (isdigit(argv[argc - 1][0]))
      *opt_color = atoi(argv[argc - 1]);
    else
      *bad_arg = 1;
    if (*opt_color < 0 || *opt_color > 15)
      *bad_arg = 1;
  }
}


x86 assembly (clang, -O0):
<par_color2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
cmpl   $0x0,-0x4(%rbp)
je     116c <par_color2+0x3c>
cmpl   $0x2,-0x4(%rbp)
jg     116c <par_color2+0x3c>
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
je     1176 <par_color2+0x46>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
cmpl   $0x2,-0x4(%rbp)
jne    11d4 <par_color2+0xa4>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
lea    0xe5e(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    11c0 <par_color2+0x90>
mov    -0x20(%rbp),%rax
movl   $0x8,(%rax)
jmp    11cf <par_color2+0x9f>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    14a9 <par_color2+0x379>
jmp    11d4 <par_color2+0xa4>
cmpl   $0x0,-0x4(%rbp)
je     14a9 <par_color2+0x379>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xe11(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    1230 <par_color2+0x100>
mov    -0x20(%rbp),%rax
cmpl   $0x0,(%rax)
je     1221 <par_color2+0xf1>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    122b <par_color2+0xfb>
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
jmp    1480 <par_color2+0x350>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xdc5(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    1282 <par_color2+0x152>
mov    -0x20(%rbp),%rax
cmpl   $0x0,(%rax)
je     1273 <par_color2+0x143>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    127d <par_color2+0x14d>
mov    -0x20(%rbp),%rax
movl   $0x8,(%rax)
jmp    147b <par_color2+0x34b>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xd78(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    12b9 <par_color2+0x189>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
or     $0x1,%ecx
mov    %ecx,(%rax)
jmp    1476 <par_color2+0x346>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xd45(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    12f0 <par_color2+0x1c0>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
or     $0x2,%ecx
mov    %ecx,(%rax)
jmp    1471 <par_color2+0x341>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xd14(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    1327 <par_color2+0x1f7>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
or     $0x3,%ecx
mov    %ecx,(%rax)
jmp    146c <par_color2+0x33c>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xce4(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    135e <par_color2+0x22e>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
or     $0x4,%ecx
mov    %ecx,(%rax)
jmp    1467 <par_color2+0x337>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xcb2(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    1395 <par_color2+0x265>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
or     $0x5,%ecx
mov    %ecx,(%rax)
jmp    1462 <par_color2+0x332>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xc83(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    13cc <par_color2+0x29c>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
or     $0x6,%ecx
mov    %ecx,(%rax)
jmp    145d <par_color2+0x32d>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xc51(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    1403 <par_color2+0x2d3>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
or     $0x7,%ecx
mov    %ecx,(%rax)
jmp    1458 <par_color2+0x328>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1449 <par_color2+0x319>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <atoi@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    1453 <par_color2+0x323>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    1458 <par_color2+0x328>
jmp    145d <par_color2+0x32d>
jmp    1462 <par_color2+0x332>
jmp    1467 <par_color2+0x337>
jmp    146c <par_color2+0x33c>
jmp    1471 <par_color2+0x341>
jmp    1476 <par_color2+0x346>
jmp    147b <par_color2+0x34b>
jmp    1480 <par_color2+0x350>
mov    -0x20(%rbp),%rax
cmpl   $0x0,(%rax)
jl     149a <par_color2+0x36a>
mov    -0x20(%rbp),%rax
cmpl   $0xf,(%rax)
jle    14a4 <par_color2+0x374>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    14a9 <par_color2+0x379>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<par_color2>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %r8,%r14
mov    %rcx,%r15
mov    %rsi,%rbx
mov    %edi,%ebp
test   %edi,%edi
je     1150 <par_color2+0x20>
cmp    $0x2,%ebp
jg     1150 <par_color2+0x20>
cmpl   $0x0,(%rdx)
je     1157 <par_color2+0x27>
movl   $0x1,(%r14)
movl   $0x1,(%rdx)
movl   $0x0,(%r15)
test   %ebp,%ebp
je     1305 <par_color2+0x1d5>
cmp    $0x2,%ebp
jne    1190 <par_color2+0x60>
mov    (%rbx),%rdi
lea    0xe85(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
jne    12fe <par_color2+0x1ce>
movl   $0x8,(%r15)
movslq %ebp,%rbp
mov    -0x8(%rbx,%rbp,8),%rdi
lea    0xe68(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     1291 <par_color2+0x161>
add    $0xffffffffffffffff,%rbp
mov    (%rbx,%rbp,8),%rdi
lea    0xe51(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     12a0 <par_color2+0x170>
mov    (%rbx,%rbp,8),%rdi
lea    0xe3d(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     12b7 <par_color2+0x187>
mov    (%rbx,%rbp,8),%rdi
lea    0xe28(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     12bf <par_color2+0x18f>
mov    (%rbx,%rbp,8),%rdi
lea    0xe15(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     12d0 <par_color2+0x1a0>
mov    (%rbx,%rbp,8),%rdi
lea    0xe03(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     12d8 <par_color2+0x1a8>
mov    (%rbx,%rbp,8),%rdi
lea    0xdef(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     12e0 <par_color2+0x1b0>
mov    (%rbx,%rbp,8),%rdi
lea    0xdde(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     12e8 <par_color2+0x1b8>
mov    (%rbx,%rbp,8),%rdi
lea    0xdca(%rip),%rsi
call   1040 <strcmp@plt>
test   %rax,%rax
je     12f0 <par_color2+0x1c0>
mov    (%rbx,%rbp,8),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     12a6 <par_color2+0x176>
mov    (%rbx,%rbp,8),%rdi
call   1050 <atoi@plt>
jmp    12f6 <par_color2+0x1c6>
cmpl   $0x0,(%r15)
jne    12a6 <par_color2+0x176>
movl   $0x0,(%r15)
jmp    1305 <par_color2+0x1d5>
cmpl   $0x0,(%r15)
je     12c7 <par_color2+0x197>
movl   $0x1,(%r14)
mov    (%r15),%eax
cmp    $0x10,%eax
jb     1305 <par_color2+0x1d5>
jmp    12fe <par_color2+0x1ce>
mov    (%r15),%eax
or     $0x1,%eax
jmp    12f6 <par_color2+0x1c6>
mov    (%r15),%eax
or     $0x2,%eax
jmp    12f6 <par_color2+0x1c6>
movl   $0x8,(%r15)
jmp    1305 <par_color2+0x1d5>
mov    (%r15),%eax
or     $0x3,%eax
jmp    12f6 <par_color2+0x1c6>
mov    (%r15),%eax
or     $0x4,%eax
jmp    12f6 <par_color2+0x1c6>
mov    (%r15),%eax
or     $0x5,%eax
jmp    12f6 <par_color2+0x1c6>
mov    (%r15),%eax
or     $0x6,%eax
jmp    12f6 <par_color2+0x1c6>
mov    (%r15),%eax
or     $0x7,%eax
mov    %eax,(%r15)
cmp    $0x10,%eax
jb     1305 <par_color2+0x1d5>
movl   $0x1,(%r14)
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [7 x i8] c"bright\00"
@.str.1 = [6 x i8] c"black\00"
@.str.2 = [5 x i8] c"grey\00"
@.str.3 = [4 x i8] c"red\00"
@.str.4 = [6 x i8] c"green\00"
@.str.5 = [7 x i8] c"yellow\00"
@.str.6 = [5 x i8] c"blue\00"
@.str.7 = [8 x i8] c"magenta\00"
@.str.8 = [5 x i8] c"cyan\00"
@.str.9 = [6 x i8] c"white\00"
define void @par_color2(i32 %0, i8** %1, i32* %2, i32* %3, i32* %4) {
%6 = alloca i32
%7 = alloca i8**
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca i32*
store i32 %0, i32* %6
store i8** %1, i8*** %7
store i32* %2, i32** %8
store i32* %3, i32** %9
store i32* %4, i32** %10
%11 = load i32, i32* %6
%12 = icmp ne i32 %11, 0
br i1 %12, label %13, label %20
13: ; preds = %5
%14 = load i32, i32* %6
%15 = icmp sgt i32 %14, 2
br i1 %15, label %20, label %16
16: ; preds = %13
%17 = load i32*, i32** %8
%18 = load i32, i32* %17
%19 = icmp ne i32 %18, 0
br i1 %19, label %20, label %22
20: ; preds = %16, %13, %5
%21 = load i32*, i32** %10
store i32 1, i32* %21
br label %22
22: ; preds = %20, %16
%23 = load i32*, i32** %8
store i32 1, i32* %23
%24 = load i32*, i32** %9
store i32 0, i32* %24
%25 = load i32, i32* %6
%26 = icmp eq i32 %25, 2
br i1 %26, label %27, label %38
27: ; preds = %22
%28 = load i8**, i8*** %7
%29 = getelementptr inbounds i8*, i8** %28, i64 0
%30 = load i8*, i8** %29
%31 = call i64 @strcmp(i8* %30, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%32 = icmp eq i64 %31, 0
br i1 %32, label %33, label %35
33: ; preds = %27
%34 = load i32*, i32** %9
store i32 8, i32* %34
br label %37
35: ; preds = %27
%36 = load i32*, i32** %10
store i32 1, i32* %36
br label %210
37: ; preds = %33
br label %38
38: ; preds = %37, %22
%39 = load i32, i32* %6
%40 = icmp ne i32 %39, 0
br i1 %40, label %41, label %210
41: ; preds = %38
%42 = load i8**, i8*** %7
%43 = load i32, i32* %6
%44 = sub nsw i32 %43, 1
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8*, i8** %42, i64 %45
%47 = load i8*, i8** %46
%48 = call i64 @strcmp(i8* %47, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
%49 = icmp eq i64 %48, 0
br i1 %49, label %50, label %59
50: ; preds = %41
%51 = load i32*, i32** %9
%52 = load i32, i32* %51
%53 = icmp ne i32 %52, 0
br i1 %53, label %54, label %56
54: ; preds = %50
%55 = load i32*, i32** %10
store i32 1, i32* %55
br label %58
56: ; preds = %50
%57 = load i32*, i32** %9
store i32 0, i32* %57
br label %58
58: ; preds = %56, %54
br label %199
59: ; preds = %41
%60 = load i8**, i8*** %7
%61 = load i32, i32* %6
%62 = sub nsw i32 %61, 1
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i8*, i8** %60, i64 %63
%65 = load i8*, i8** %64
%66 = call i64 @strcmp(i8* %65, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
%67 = icmp eq i64 %66, 0
br i1 %67, label %68, label %77
68: ; preds = %59
%69 = load i32*, i32** %9
%70 = load i32, i32* %69
%71 = icmp ne i32 %70, 0
br i1 %71, label %72, label %74
72: ; preds = %68
%73 = load i32*, i32** %10
store i32 1, i32* %73
br label %76
74: ; preds = %68
%75 = load i32*, i32** %9
store i32 8, i32* %75
br label %76
76: ; preds = %74, %72
br label %198
77: ; preds = %59
%78 = load i8**, i8*** %7
%79 = load i32, i32* %6
%80 = sub nsw i32 %79, 1
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8*, i8** %78, i64 %81
%83 = load i8*, i8** %82
%84 = call i64 @strcmp(i8* %83, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
%85 = icmp eq i64 %84, 0
br i1 %85, label %86, label %90
86: ; preds = %77
%87 = load i32*, i32** %9
%88 = load i32, i32* %87
%89 = or i32 %88, 1
store i32 %89, i32* %87
br label %197
90: ; preds = %77
%91 = load i8**, i8*** %7
%92 = load i32, i32* %6
%93 = sub nsw i32 %92, 1
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i8*, i8** %91, i64 %94
%96 = load i8*, i8** %95
%97 = call i64 @strcmp(i8* %96, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
%98 = icmp eq i64 %97, 0
br i1 %98, label %99, label %103
99: ; preds = %90
%100 = load i32*, i32** %9
%101 = load i32, i32* %100
%102 = or i32 %101, 2
store i32 %102, i32* %100
br label %196
103: ; preds = %90
%104 = load i8**, i8*** %7
%105 = load i32, i32* %6
%106 = sub nsw i32 %105, 1
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds i8*, i8** %104, i64 %107
%109 = load i8*, i8** %108
%110 = call i64 @strcmp(i8* %109, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0))
%111 = icmp eq i64 %110, 0
br i1 %111, label %112, label %116
112: ; preds = %103
%113 = load i32*, i32** %9
%114 = load i32, i32* %113
%115 = or i32 %114, 3
store i32 %115, i32* %113
br label %195
116: ; preds = %103
%117 = load i8**, i8*** %7
%118 = load i32, i32* %6
%119 = sub nsw i32 %118, 1
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i8*, i8** %117, i64 %120
%122 = load i8*, i8** %121
%123 = call i64 @strcmp(i8* %122, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%124 = icmp eq i64 %123, 0
br i1 %124, label %125, label %129
125: ; preds = %116
%126 = load i32*, i32** %9
%127 = load i32, i32* %126
%128 = or i32 %127, 4
store i32 %128, i32* %126
br label %194
129: ; preds = %116
%130 = load i8**, i8*** %7
%131 = load i32, i32* %6
%132 = sub nsw i32 %131, 1
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i8*, i8** %130, i64 %133
%135 = load i8*, i8** %134
%136 = call i64 @strcmp(i8* %135, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.7, i64 0, i64 0))
%137 = icmp eq i64 %136, 0
br i1 %137, label %138, label %142
138: ; preds = %129
%139 = load i32*, i32** %9
%140 = load i32, i32* %139
%141 = or i32 %140, 5
store i32 %141, i32* %139
br label %193
142: ; preds = %129
%143 = load i8**, i8*** %7
%144 = load i32, i32* %6
%145 = sub nsw i32 %144, 1
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds i8*, i8** %143, i64 %146
%148 = load i8*, i8** %147
%149 = call i64 @strcmp(i8* %148, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%150 = icmp eq i64 %149, 0
br i1 %150, label %151, label %155
151: ; preds = %142
%152 = load i32*, i32** %9
%153 = load i32, i32* %152
%154 = or i32 %153, 6
store i32 %154, i32* %152
br label %192
155: ; preds = %142
%156 = load i8**, i8*** %7
%157 = load i32, i32* %6
%158 = sub nsw i32 %157, 1
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds i8*, i8** %156, i64 %159
%161 = load i8*, i8** %160
%162 = call i64 @strcmp(i8* %161, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0))
%163 = icmp eq i64 %162, 0
br i1 %163, label %164, label %168
164: ; preds = %155
%165 = load i32*, i32** %9
%166 = load i32, i32* %165
%167 = or i32 %166, 7
store i32 %167, i32* %165
br label %191
168: ; preds = %155
%169 = load i8**, i8*** %7
%170 = load i32, i32* %6
%171 = sub nsw i32 %170, 1
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds i8*, i8** %169, i64 %172
%174 = load i8*, i8** %173
%175 = getelementptr inbounds i8, i8* %174, i64 0
%176 = load i8, i8* %175
%177 = call i64 @isdigit(i8 signext %176)
%178 = icmp ne i64 %177, 0
br i1 %178, label %179, label %188
179: ; preds = %168
%180 = load i8**, i8*** %7
%181 = load i32, i32* %6
%182 = sub nsw i32 %181, 1
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds i8*, i8** %180, i64 %183
%185 = load i8*, i8** %184
%186 = call i32 @atoi(i8* %185)
%187 = load i32*, i32** %9
store i32 %186, i32* %187
br label %190
188: ; preds = %168
%189 = load i32*, i32** %10
store i32 1, i32* %189
br label %190
190: ; preds = %188, %179
br label %191
191: ; preds = %190, %164
br label %192
192: ; preds = %191, %151
br label %193
193: ; preds = %192, %138
br label %194
194: ; preds = %193, %125
br label %195
195: ; preds = %194, %112
br label %196
196: ; preds = %195, %99
br label %197
197: ; preds = %196, %86
br label %198
198: ; preds = %197, %76
br label %199
199: ; preds = %198, %58
%200 = load i32*, i32** %9
%201 = load i32, i32* %200
%202 = icmp slt i32 %201, 0
br i1 %202, label %207, label %203
203: ; preds = %199
%204 = load i32*, i32** %9
%205 = load i32, i32* %204
%206 = icmp sgt i32 %205, 15
br i1 %206, label %207, label %209
207: ; preds = %203, %199
%208 = load i32*, i32** %10
store i32 1, i32* %208
br label %209
209: ; preds = %207, %203
br label %210
210: ; preds = %35, %209, %38
ret void
}

LLVM IR (-O2):
@.str = [7 x i8] c"bright\00"
@.str.1 = [6 x i8] c"black\00"
@.str.2 = [5 x i8] c"grey\00"
@.str.3 = [4 x i8] c"red\00"
@.str.4 = [6 x i8] c"green\00"
@.str.5 = [7 x i8] c"yellow\00"
@.str.6 = [5 x i8] c"blue\00"
@.str.7 = [8 x i8] c"magenta\00"
@.str.8 = [5 x i8] c"cyan\00"
@.str.9 = [6 x i8] c"white\00"
define void @par_color2(i32 %0, i8** nocapture %1, i32* nocapture %2, i32* %3, i32* nocapture writeonly %4) {
%6 = icmp eq i32 %0, 0
%7 = icmp sgt i32 %0, 2
%8 = or i1 %6, %7
br i1 %8, label %12, label %9
9: ; preds = %5
%10 = load i32, i32* %2
%11 = icmp eq i32 %10, 0
br i1 %11, label %13, label %12
12: ; preds = %9, %5
store i32 1, i32* %4
br label %13
13: ; preds = %12, %9
store i32 1, i32* %2
store i32 0, i32* %3
switch i32 %0, label %20 [
i32 2, label %14
i32 0, label %102
]
14: ; preds = %13
%15 = load i8*, i8** %1
%16 = tail call i64 @strcmp(i8* %15, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%17 = icmp eq i64 %16, 0
br i1 %17, label %18, label %19
18: ; preds = %14
store i32 8, i32* %3
br label %20
19: ; preds = %14
store i32 1, i32* %4
br label %102
20: ; preds = %18, %13
%21 = add nsw i32 %0, -1
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds i8*, i8** %1, i64 %22
%24 = load i8*, i8** %23
%25 = tail call i64 @strcmp(i8* %24, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
%26 = icmp eq i64 %25, 0
br i1 %26, label %27, label %31
27: ; preds = %20
%28 = load i32, i32* %3
%29 = icmp eq i32 %28, 0
br i1 %29, label %30, label %96
30: ; preds = %27
store i32 0, i32* %3
br label %102
31: ; preds = %20
%32 = load i8*, i8** %23
%33 = tail call i64 @strcmp(i8* %32, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
%34 = icmp eq i64 %33, 0
br i1 %34, label %35, label %39
35: ; preds = %31
%36 = load i32, i32* %3
%37 = icmp eq i32 %36, 0
br i1 %37, label %38, label %96
38: ; preds = %35
store i32 8, i32* %3
br label %102
39: ; preds = %31
%40 = load i8*, i8** %23
%41 = tail call i64 @strcmp(i8* %40, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
%42 = icmp eq i64 %41, 0
br i1 %42, label %43, label %46
43: ; preds = %39
%44 = load i32, i32* %3
%45 = or i32 %44, 1
store i32 %45, i32* %3
br label %98
46: ; preds = %39
%47 = load i8*, i8** %23
%48 = tail call i64 @strcmp(i8* %47, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
%49 = icmp eq i64 %48, 0
br i1 %49, label %50, label %53
50: ; preds = %46
%51 = load i32, i32* %3
%52 = or i32 %51, 2
store i32 %52, i32* %3
br label %98
53: ; preds = %46
%54 = load i8*, i8** %23
%55 = tail call i64 @strcmp(i8* %54, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0))
%56 = icmp eq i64 %55, 0
br i1 %56, label %57, label %60
57: ; preds = %53
%58 = load i32, i32* %3
%59 = or i32 %58, 3
store i32 %59, i32* %3
br label %98
60: ; preds = %53
%61 = load i8*, i8** %23
%62 = tail call i64 @strcmp(i8* %61, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%63 = icmp eq i64 %62, 0
br i1 %63, label %64, label %67
64: ; preds = %60
%65 = load i32, i32* %3
%66 = or i32 %65, 4
store i32 %66, i32* %3
br label %98
67: ; preds = %60
%68 = load i8*, i8** %23
%69 = tail call i64 @strcmp(i8* %68, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.7, i64 0, i64 0))
%70 = icmp eq i64 %69, 0
br i1 %70, label %71, label %74
71: ; preds = %67
%72 = load i32, i32* %3
%73 = or i32 %72, 5
store i32 %73, i32* %3
br label %98
74: ; preds = %67
%75 = load i8*, i8** %23
%76 = tail call i64 @strcmp(i8* %75, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%77 = icmp eq i64 %76, 0
br i1 %77, label %78, label %81
78: ; preds = %74
%79 = load i32, i32* %3
%80 = or i32 %79, 6
store i32 %80, i32* %3
br label %98
81: ; preds = %74
%82 = load i8*, i8** %23
%83 = tail call i64 @strcmp(i8* %82, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0))
%84 = icmp eq i64 %83, 0
br i1 %84, label %85, label %88
85: ; preds = %81
%86 = load i32, i32* %3
%87 = or i32 %86, 7
store i32 %87, i32* %3
br label %98
88: ; preds = %81
%89 = load i8*, i8** %23
%90 = load i8, i8* %89
%91 = tail call i64 @isdigit(i8 signext %90)
%92 = icmp eq i64 %91, 0
br i1 %92, label %96, label %93
93: ; preds = %88
%94 = load i8*, i8** %23
%95 = tail call i32 @atoi(i8* %94)
store i32 %95, i32* %3
br label %98
96: ; preds = %88, %35, %27
store i32 1, i32* %4
%97 = load i32, i32* %3
br label %98
98: ; preds = %96, %50, %64, %78, %93, %85, %71, %57, %43
%99 = phi i32 [ %97, %96 ], [ %52, %50 ], [ %66, %64 ], [ %80, %78 ], [ %95, %93 ], [ %87, %85 ], [ %73, %71 ], [ %59, %57 ], [ %45, %43 ]
%100 = icmp ugt i32 %99, 15
br i1 %100, label %101, label %102
101: ; preds = %98
store i32 1, i32* %4
br label %102
102: ; preds = %30, %38, %98, %13, %101, %19
ret void
}