#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 */
scalar_t__ strcmp(char *, char *);
int analyseParameters(int argc, char *argv[]) {
  if (argc == 1) {
    return 98;
  } else {
    if (strcmp(argv[1], "area") == 0) {
      if (argc == 2) {
        return 11;
      } else if (argc == 4 && strcmp(argv[2], "switch") == 0) {
        return 12;
      } else if (argc == 4 && strcmp(argv[2], "add") == 0) {
        return 13;
      }
    } else if (strcmp(argv[1], "task") == 0) {
      if (argc == 2 || (argc == 3 && strcmp(argv[2], "show") == 0)) {
        return 21;
      } else if (argc == 4 && strcmp(argv[2], "show") == 0) {
        return 22;
      } else if (argc == 4 && strcmp(argv[2], "done") == 0) {
        return 24;
      } else if (argc == 5 && strcmp(argv[2], "add") == 0) {
        return 23;
      }
    } else if (argc == 2 && strcmp(argv[1], "sync") == 0) {
      return 00;
    }
  }
  return 99;
}


x86 assembly (clang, -O0):
<analyseParameters>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
cmpl   $0x1,-0x8(%rbp)
jne    1135 <analyseParameters+0x25>
movl   $0x62,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xebc(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    11e0 <analyseParameters+0xd0>
cmpl   $0x2,-0x8(%rbp)
jne    1169 <analyseParameters+0x59>
movl   $0xb,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
cmpl   $0x4,-0x8(%rbp)
jne    119d <analyseParameters+0x8d>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xe83(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    119d <analyseParameters+0x8d>
movl   $0xc,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
cmpl   $0x4,-0x8(%rbp)
jne    11d1 <analyseParameters+0xc1>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xe56(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    11d1 <analyseParameters+0xc1>
movl   $0xd,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
jmp    11d6 <analyseParameters+0xc6>
jmp    11db <analyseParameters+0xcb>
jmp    132a <analyseParameters+0x21a>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xe21(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    12ec <analyseParameters+0x1dc>
cmpl   $0x2,-0x8(%rbp)
je     1230 <analyseParameters+0x120>
cmpl   $0x3,-0x8(%rbp)
jne    123c <analyseParameters+0x12c>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xdf4(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    123c <analyseParameters+0x12c>
movl   $0x15,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
cmpl   $0x4,-0x8(%rbp)
jne    1270 <analyseParameters+0x160>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xdc0(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    1270 <analyseParameters+0x160>
movl   $0x16,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
cmpl   $0x4,-0x8(%rbp)
jne    12a4 <analyseParameters+0x194>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xd91(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    12a4 <analyseParameters+0x194>
movl   $0x18,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
cmpl   $0x5,-0x8(%rbp)
jne    12d8 <analyseParameters+0x1c8>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xd4f(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    12d8 <analyseParameters+0x1c8>
movl   $0x17,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
jmp    12dd <analyseParameters+0x1cd>
jmp    12e2 <analyseParameters+0x1d2>
jmp    12e7 <analyseParameters+0x1d7>
jmp    1325 <analyseParameters+0x215>
cmpl   $0x2,-0x8(%rbp)
jne    1320 <analyseParameters+0x210>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xd1a(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    1320 <analyseParameters+0x210>
movl   $0x0,-0x4(%rbp)
jmp    1336 <analyseParameters+0x226>
jmp    1325 <analyseParameters+0x215>
jmp    132a <analyseParameters+0x21a>
jmp    132f <analyseParameters+0x21f>
movl   $0x63,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<analyseParameters>:
push   %rbp
push   %r14
push   %rbx
mov    $0x62,%ebp
cmp    $0x1,%edi
je     1251 <analyseParameters+0x141>
mov    %rsi,%r14
mov    %edi,%ebx
mov    0x8(%rsi),%rdi
lea    0xede(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
je     117a <analyseParameters+0x6a>
mov    0x8(%r14),%rdi
lea    0xed9(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
je     11c0 <analyseParameters+0xb0>
cmp    $0x2,%ebx
jne    124c <analyseParameters+0x13c>
mov    0x8(%r14),%rdi
lea    0xeca(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
jne    124c <analyseParameters+0x13c>
xor    %ebp,%ebp
jmp    1251 <analyseParameters+0x141>
cmp    $0x2,%ebx
je     11f8 <analyseParameters+0xe8>
cmp    $0x4,%ebx
jne    124c <analyseParameters+0x13c>
mov    0x10(%r14),%rdi
lea    0xe82(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
je     11ff <analyseParameters+0xef>
mov    0x10(%r14),%rdi
lea    0xe74(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
jne    124c <analyseParameters+0x13c>
mov    $0xd,%ebp
jmp    1251 <analyseParameters+0x141>
add    $0xfffffffe,%ebx
cmp    $0x3,%ebx
ja     124c <analyseParameters+0x13c>
mov    $0x15,%ebp
lea    0xe28(%rip),%rax
movslq (%rax,%rbx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
mov    0x10(%r14),%rdi
lea    0xe39(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
jne    124c <analyseParameters+0x13c>
jmp    1251 <analyseParameters+0x141>
mov    $0xb,%ebp
jmp    1251 <analyseParameters+0x141>
mov    $0xc,%ebp
jmp    1251 <analyseParameters+0x141>
mov    0x10(%r14),%rdi
lea    0xe14(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
je     1258 <analyseParameters+0x148>
mov    0x10(%r14),%rdi
lea    0xe04(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
jne    124c <analyseParameters+0x13c>
mov    $0x18,%ebp
jmp    1251 <analyseParameters+0x141>
mov    0x10(%r14),%rdi
lea    0xdda(%rip),%rsi
call   1030 <strcmp@plt>
test   %rax,%rax
je     125f <analyseParameters+0x14f>
mov    $0x63,%ebp
mov    %ebp,%eax
pop    %rbx
pop    %r14
pop    %rbp
ret
mov    $0x16,%ebp
jmp    1251 <analyseParameters+0x141>
mov    $0x17,%ebp
jmp    1251 <analyseParameters+0x141>

LLVM IR (-O0):
@.str = [5 x i8] c"area\00"
@.str.1 = [7 x i8] c"switch\00"
@.str.2 = [4 x i8] c"add\00"
@.str.3 = [5 x i8] c"task\00"
@.str.4 = [5 x i8] c"show\00"
@.str.5 = [5 x i8] c"done\00"
@.str.6 = [5 x i8] c"sync\00"
define i32 @analyseParameters(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
store i32 %0, i32* %4
store i8** %1, i8*** %5
%6 = load i32, i32* %4
%7 = icmp eq i32 %6, 1
br i1 %7, label %8, label %9
8: ; preds = %2
store i32 98, i32* %3
br label %109
9: ; preds = %2
%10 = load i8**, i8*** %5
%11 = getelementptr inbounds i8*, i8** %10, i64 1
%12 = load i8*, i8** %11
%13 = call i64 @strcmp(i8* %12, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%14 = icmp eq i64 %13, 0
br i1 %14, label %15, label %42
15: ; preds = %9
%16 = load i32, i32* %4
%17 = icmp eq i32 %16, 2
br i1 %17, label %18, label %19
18: ; preds = %15
store i32 11, i32* %3
br label %109
19: ; preds = %15
%20 = load i32, i32* %4
%21 = icmp eq i32 %20, 4
br i1 %21, label %22, label %29
22: ; preds = %19
%23 = load i8**, i8*** %5
%24 = getelementptr inbounds i8*, i8** %23, i64 2
%25 = load i8*, i8** %24
%26 = call i64 @strcmp(i8* %25, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
%27 = icmp eq i64 %26, 0
br i1 %27, label %28, label %29
28: ; preds = %22
store i32 12, i32* %3
br label %109
29: ; preds = %22, %19
%30 = load i32, i32* %4
%31 = icmp eq i32 %30, 4
br i1 %31, label %32, label %39
32: ; preds = %29
%33 = load i8**, i8*** %5
%34 = getelementptr inbounds i8*, i8** %33, i64 2
%35 = load i8*, i8** %34
%36 = call i64 @strcmp(i8* %35, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%37 = icmp eq i64 %36, 0
br i1 %37, label %38, label %39
38: ; preds = %32
store i32 13, i32* %3
br label %109
39: ; preds = %32, %29
br label %40
40: ; preds = %39
br label %41
41: ; preds = %40
br label %107
42: ; preds = %9
%43 = load i8**, i8*** %5
%44 = getelementptr inbounds i8*, i8** %43, i64 1
%45 = load i8*, i8** %44
%46 = call i64 @strcmp(i8* %45, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%47 = icmp eq i64 %46, 0
br i1 %47, label %48, label %95
48: ; preds = %42
%49 = load i32, i32* %4
%50 = icmp eq i32 %49, 2
br i1 %50, label %60, label %51
51: ; preds = %48
%52 = load i32, i32* %4
%53 = icmp eq i32 %52, 3
br i1 %53, label %54, label %61
54: ; preds = %51
%55 = load i8**, i8*** %5
%56 = getelementptr inbounds i8*, i8** %55, i64 2
%57 = load i8*, i8** %56
%58 = call i64 @strcmp(i8* %57, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%59 = icmp eq i64 %58, 0
br i1 %59, label %60, label %61
60: ; preds = %54, %48
store i32 21, i32* %3
br label %109
61: ; preds = %54, %51
%62 = load i32, i32* %4
%63 = icmp eq i32 %62, 4
br i1 %63, label %64, label %71
64: ; preds = %61
%65 = load i8**, i8*** %5
%66 = getelementptr inbounds i8*, i8** %65, i64 2
%67 = load i8*, i8** %66
%68 = call i64 @strcmp(i8* %67, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%69 = icmp eq i64 %68, 0
br i1 %69, label %70, label %71
70: ; preds = %64
store i32 22, i32* %3
br label %109
71: ; preds = %64, %61
%72 = load i32, i32* %4
%73 = icmp eq i32 %72, 4
br i1 %73, label %74, label %81
74: ; preds = %71
%75 = load i8**, i8*** %5
%76 = getelementptr inbounds i8*, i8** %75, i64 2
%77 = load i8*, i8** %76
%78 = call i64 @strcmp(i8* %77, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
%79 = icmp eq i64 %78, 0
br i1 %79, label %80, label %81
80: ; preds = %74
store i32 24, i32* %3
br label %109
81: ; preds = %74, %71
%82 = load i32, i32* %4
%83 = icmp eq i32 %82, 5
br i1 %83, label %84, label %91
84: ; preds = %81
%85 = load i8**, i8*** %5
%86 = getelementptr inbounds i8*, i8** %85, i64 2
%87 = load i8*, i8** %86
%88 = call i64 @strcmp(i8* %87, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%89 = icmp eq i64 %88, 0
br i1 %89, label %90, label %91
90: ; preds = %84
store i32 23, i32* %3
br label %109
91: ; preds = %84, %81
br label %92
92: ; preds = %91
br label %93
93: ; preds = %92
br label %94
94: ; preds = %93
br label %106
95: ; preds = %42
%96 = load i32, i32* %4
%97 = icmp eq i32 %96, 2
br i1 %97, label %98, label %105
98: ; preds = %95
%99 = load i8**, i8*** %5
%100 = getelementptr inbounds i8*, i8** %99, i64 1
%101 = load i8*, i8** %100
%102 = call i64 @strcmp(i8* %101, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%103 = icmp eq i64 %102, 0
br i1 %103, label %104, label %105
104: ; preds = %98
store i32 0, i32* %3
br label %109
105: ; preds = %98, %95
br label %106
106: ; preds = %105, %94
br label %107
107: ; preds = %106, %41
br label %108
108: ; preds = %107
store i32 99, i32* %3
br label %109
109: ; preds = %108, %104, %90, %80, %70, %60, %38, %28, %18, %8
%110 = load i32, i32* %3
ret i32 %110
}

LLVM IR (-O2):
@.str = [5 x i8] c"area\00"
@.str.1 = [7 x i8] c"switch\00"
@.str.2 = [4 x i8] c"add\00"
@.str.3 = [5 x i8] c"task\00"
@.str.4 = [5 x i8] c"show\00"
@.str.5 = [5 x i8] c"done\00"
@.str.6 = [5 x i8] c"sync\00"
define i32 @analyseParameters(i32 %0, i8** nocapture %1) {
%3 = icmp eq i32 %0, 1
br i1 %3, label %50, label %4
4: ; preds = %2
%5 = getelementptr inbounds i8*, i8** %1, i64 1
%6 = load i8*, i8** %5
%7 = tail call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%8 = icmp eq i64 %7, 0
br i1 %8, label %9, label %19
9: ; preds = %4
switch i32 %0, label %49 [
i32 2, label %50
i32 4, label %10
]
10: ; preds = %9
%11 = getelementptr inbounds i8*, i8** %1, i64 2
%12 = load i8*, i8** %11
%13 = tail call i64 @strcmp(i8* %12, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
%14 = icmp eq i64 %13, 0
br i1 %14, label %50, label %15
15: ; preds = %10
%16 = load i8*, i8** %11
%17 = tail call i64 @strcmp(i8* %16, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%18 = icmp eq i64 %17, 0
br i1 %18, label %50, label %49
19: ; preds = %4
%20 = load i8*, i8** %5
%21 = tail call i64 @strcmp(i8* %20, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%22 = icmp eq i64 %21, 0
br i1 %22, label %23, label %43
23: ; preds = %19
switch i32 %0, label %49 [
i32 2, label %50
i32 3, label %24
i32 4, label %29
i32 5, label %38
]
24: ; preds = %23
%25 = getelementptr inbounds i8*, i8** %1, i64 2
%26 = load i8*, i8** %25
%27 = tail call i64 @strcmp(i8* %26, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%28 = icmp eq i64 %27, 0
br i1 %28, label %50, label %49
29: ; preds = %23
%30 = getelementptr inbounds i8*, i8** %1, i64 2
%31 = load i8*, i8** %30
%32 = tail call i64 @strcmp(i8* %31, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%33 = icmp eq i64 %32, 0
br i1 %33, label %50, label %34
34: ; preds = %29
%35 = load i8*, i8** %30
%36 = tail call i64 @strcmp(i8* %35, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
%37 = icmp eq i64 %36, 0
br i1 %37, label %50, label %49
38: ; preds = %23
%39 = getelementptr inbounds i8*, i8** %1, i64 2
%40 = load i8*, i8** %39
%41 = tail call i64 @strcmp(i8* %40, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%42 = icmp eq i64 %41, 0
br i1 %42, label %50, label %49
43: ; preds = %19
%44 = icmp eq i32 %0, 2
br i1 %44, label %45, label %49
45: ; preds = %43
%46 = load i8*, i8** %5
%47 = tail call i64 @strcmp(i8* %46, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%48 = icmp eq i64 %47, 0
br i1 %48, label %50, label %49
49: ; preds = %23, %9, %24, %34, %15, %43, %45, %38
br label %50
50: ; preds = %23, %9, %45, %38, %34, %29, %24, %15, %10, %2, %49
%51 = phi i32 [ 99, %49 ], [ 98, %2 ], [ 11, %9 ], [ 12, %10 ], [ 13, %15 ], [ 21, %23 ], [ 21, %24 ], [ 22, %29 ], [ 24, %34 ], [ 23, %38 ], [ 0, %45 ]
ret i32 %51
}