#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 /*<<< orphan*/ on_add();
int /*<<< orphan*/ on_addl();
int /*<<< orphan*/ on_del();
int /*<<< orphan*/ on_delall();
int /*<<< orphan*/ on_down();
int /*<<< orphan*/ on_help();
int /*<<< orphan*/ on_import(char *);
int /*<<< orphan*/ on_importl(char *);
int /*<<< orphan*/ on_order();
scalar_t__ on_play(char, int);
int /*<<< orphan*/ on_save_config();
int /*<<< orphan*/ on_showlist();
int /*<<< orphan*/ on_up();
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, ...);
scalar_t__ strcmp(char *, char *);
int executer(char order[256]) {
  char name_newdir[256];
  if (strcmp(order, "add") == 0)
    on_add();
  else if (strcmp(order, "addl") == 0)
    on_addl();
  else if (strcmp(order, "import") == 0) {
    scanf(" %[^\n]", name_newdir);
    on_import(name_newdir);
  } else if (strcmp(order, "importl") == 0) {
    scanf(" %[^\n]", name_newdir);
    on_importl(name_newdir);
  } else if (strcmp(order, "order") == 0)
    on_order();
  else if (strcmp(order, "del") == 0 || strcmp(order, "delete") == 0)
    on_del();
  else if (strcmp(order, "delall") == 0 || strcmp(order, "deleteall") == 0)
    on_delall();
  else if (strcmp(order, "help") == 0 || strcmp(order, "?") == 0)
    on_help();
  else if (strcmp(order, "showlist") == 0 || strcmp(order, "show") == 0)
    on_showlist();
  else if (strcmp(order, "play") == 0) {
    if (on_play('d', 0))
      printf("The songlist cannot be played.Please check the song list\n");
  } else if (strcmp(order, "playone") == 0) {
    int which;
    scanf("%d", &which);
    if (on_play('a', which))
      printf("The songlist cannot be played.Please check the song list\n");
  } else if (strcmp(order, "save") == 0)
    on_save_config();
  else if (strcmp(order, "up") == 0)
    on_up();
  else if (strcmp(order, "down") == 0)
    on_down();
  else if (strcmp(order, "exit") == 0 || strcmp(order, "quit") == 0 ||
           strcmp(order, "bye") == 0 || strcmp(order, "q") == 0)
    return 1;
  else if (strcmp(order, "") == 0) {
    return 1;
  } else
    printf("%s%s\n", "Command not found:", order);
  return 0;
}


x86 assembly (clang, -O0):
<executer>:
push   %rbp
mov    %rsp,%rbp
sub    $0x120,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xde6(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1235 <executer+0x35>
mov    $0x0,%al
call   1060 <on_add@plt>
jmp    1610 <executer+0x410>
mov    -0x10(%rbp),%rdi
lea    0xdc4(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    125b <executer+0x5b>
mov    $0x0,%al
call   1070 <on_addl@plt>
jmp    160b <executer+0x40b>
mov    -0x10(%rbp),%rdi
lea    0xda3(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    129b <executer+0x9b>
lea    -0x110(%rbp),%rsi
lea    0xd8d(%rip),%rdi
mov    $0x0,%al
call   10e0 <scanf@plt>
lea    -0x110(%rbp),%rdi
call   1110 <on_import@plt>
jmp    1606 <executer+0x406>
mov    -0x10(%rbp),%rdi
lea    0xd71(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    12db <executer+0xdb>
lea    -0x110(%rbp),%rsi
lea    0xd4d(%rip),%rdi
mov    $0x0,%al
call   10e0 <scanf@plt>
lea    -0x110(%rbp),%rdi
call   1100 <on_importl@plt>
jmp    1601 <executer+0x401>
mov    -0x10(%rbp),%rdi
lea    0xd39(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1301 <executer+0x101>
mov    $0x0,%al
call   1040 <on_order@plt>
jmp    15fc <executer+0x3fc>
mov    -0x10(%rbp),%rdi
lea    0xd19(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     1335 <executer+0x135>
mov    -0x10(%rbp),%rdi
lea    0xd03(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1341 <executer+0x141>
mov    $0x0,%al
call   1120 <on_del@plt>
jmp    15f7 <executer+0x3f7>
mov    -0x10(%rbp),%rdi
lea    0xce4(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     1375 <executer+0x175>
mov    -0x10(%rbp),%rdi
lea    0xcd1(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1381 <executer+0x181>
mov    $0x0,%al
call   1090 <on_delall@plt>
jmp    15f2 <executer+0x3f2>
mov    -0x10(%rbp),%rdi
lea    0xcb5(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     13b5 <executer+0x1b5>
mov    -0x10(%rbp),%rdi
lea    0xca0(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    13c1 <executer+0x1c1>
mov    $0x0,%al
call   10d0 <on_help@plt>
jmp    15ed <executer+0x3ed>
mov    -0x10(%rbp),%rdi
lea    0xc7c(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     13f5 <executer+0x1f5>
mov    -0x10(%rbp),%rdi
lea    0xc6b(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1401 <executer+0x201>
mov    $0x0,%al
call   10b0 <on_showlist@plt>
jmp    15e8 <executer+0x3e8>
mov    -0x10(%rbp),%rdi
lea    0xc4a(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1444 <executer+0x244>
mov    $0x64,%edi
xor    %esi,%esi
call   1030 <on_play@plt>
cmp    $0x0,%rax
je     143f <executer+0x23f>
lea    0xc23(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    15e3 <executer+0x3e3>
mov    -0x10(%rbp),%rdi
lea    0xc46(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    14a0 <executer+0x2a0>
lea    0xc38(%rip),%rdi
lea    -0x114(%rbp),%rsi
mov    $0x0,%al
call   10e0 <scanf@plt>
mov    -0x114(%rbp),%esi
mov    $0x61,%edi
call   1030 <on_play@plt>
cmp    $0x0,%rax
je     149b <executer+0x29b>
lea    0xbc7(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    15de <executer+0x3de>
mov    -0x10(%rbp),%rdi
lea    0xbf5(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    14c6 <executer+0x2c6>
mov    $0x0,%al
call   10f0 <on_save_config@plt>
jmp    15d9 <executer+0x3d9>
mov    -0x10(%rbp),%rdi
lea    0xbd4(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    14ec <executer+0x2ec>
mov    $0x0,%al
call   10c0 <on_up@plt>
jmp    15d4 <executer+0x3d4>
mov    -0x10(%rbp),%rdi
lea    0xbb1(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1512 <executer+0x312>
mov    $0x0,%al
call   10a0 <on_down@plt>
jmp    15cf <executer+0x3cf>
mov    -0x10(%rbp),%rdi
lea    0xb90(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     157a <executer+0x37a>
mov    -0x10(%rbp),%rdi
lea    0xb7b(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     157a <executer+0x37a>
mov    -0x10(%rbp),%rdi
lea    0xb66(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     157a <executer+0x37a>
mov    -0x10(%rbp),%rdi
lea    0xb50(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1586 <executer+0x386>
movl   $0x1,-0x4(%rbp)
jmp    1617 <executer+0x417>
mov    -0x10(%rbp),%rdi
lea    0xb31(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    15ac <executer+0x3ac>
movl   $0x1,-0x4(%rbp)
jmp    1617 <executer+0x417>
mov    -0x10(%rbp),%rdx
lea    0xb06(%rip),%rdi
lea    0xb05(%rip),%rsi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    15ca <executer+0x3ca>
jmp    15cf <executer+0x3cf>
jmp    15d4 <executer+0x3d4>
jmp    15d9 <executer+0x3d9>
jmp    15de <executer+0x3de>
jmp    15e3 <executer+0x3e3>
jmp    15e8 <executer+0x3e8>
jmp    15ed <executer+0x3ed>
jmp    15f2 <executer+0x3f2>
jmp    15f7 <executer+0x3f7>
jmp    15fc <executer+0x3fc>
jmp    1601 <executer+0x401>
jmp    1606 <executer+0x406>
jmp    160b <executer+0x40b>
jmp    1610 <executer+0x410>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x120,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<executer>:
push   %rbp
push   %rbx
sub    $0x108,%rsp
mov    %rdi,%rbx
lea    0xddd(%rip),%rsi
call   1090 <strcmp@plt>
test   %rax,%rax
je     1465 <executer+0x255>
lea    0xdcc(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     1473 <executer+0x263>
lea    0xdb9(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     147e <executer+0x26e>
lea    0xdaf(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     149e <executer+0x28e>
lea    0xd9f(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14c9 <executer+0x2b9>
lea    0xd8d(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14be <executer+0x2ae>
lea    0xd79(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14be <executer+0x2ae>
lea    0xd68(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14d4 <executer+0x2c4>
lea    0xd57(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14d4 <executer+0x2c4>
lea    0xd49(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14df <executer+0x2cf>
lea    0xd36(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14df <executer+0x2cf>
lea    0xd20(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14ea <executer+0x2da>
lea    0xd11(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14ea <executer+0x2da>
lea    0xcfe(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14ff <executer+0x2ef>
lea    0xceb(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     150a <executer+0x2fa>
lea    0xcde(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     153d <executer+0x32d>
lea    0xccb(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     1548 <executer+0x338>
lea    0xcb6(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     1553 <executer+0x343>
lea    0xca3(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
mov    $0x1,%ebp
test   %rax,%rax
je     14f3 <executer+0x2e3>
lea    0xc8b(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14f3 <executer+0x2e3>
lea    0xc78(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14f3 <executer+0x2e3>
lea    0xc64(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14f3 <executer+0x2e3>
lea    0xc53(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcmp@plt>
test   %rax,%rax
je     14f3 <executer+0x2e3>
lea    0xc36(%rip),%rdi
lea    0xc35(%rip),%rsi
xor    %ebp,%ebp
mov    %rbx,%rdx
xor    %eax,%eax
call   1060 <printf@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   1070 <on_add@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   1080 <on_addl@plt>
jmp    14f3 <executer+0x2e3>
lea    0xb8b(%rip),%rdi
xor    %ebp,%ebp
mov    %rsp,%rbx
mov    %rbx,%rsi
xor    %eax,%eax
call   10f0 <scanf@plt>
mov    %rbx,%rdi
call   1120 <on_import@plt>
jmp    14f3 <executer+0x2e3>
lea    0xb6b(%rip),%rdi
xor    %ebp,%ebp
mov    %rsp,%rbx
mov    %rbx,%rsi
xor    %eax,%eax
call   10f0 <scanf@plt>
mov    %rbx,%rdi
call   1110 <on_importl@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   1130 <on_del@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   1040 <on_order@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   10a0 <on_delall@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   10e0 <on_help@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   10c0 <on_showlist@plt>
mov    %ebp,%eax
add    $0x108,%rsp
pop    %rbx
pop    %rbp
ret
xor    %ebp,%ebp
mov    $0x64,%edi
xor    %esi,%esi
jmp    1525 <executer+0x315>
lea    0xb52(%rip),%rdi
xor    %ebp,%ebp
mov    %rsp,%rsi
xor    %eax,%eax
call   10f0 <scanf@plt>
mov    (%rsp),%esi
mov    $0x61,%edi
call   1030 <on_play@plt>
test   %rax,%rax
je     14f3 <executer+0x2e3>
lea    0xb66(%rip),%rdi
call   1050 <puts@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   1100 <on_save_config@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   10d0 <on_up@plt>
jmp    14f3 <executer+0x2e3>
xor    %ebp,%ebp
xor    %eax,%eax
call   10b0 <on_down@plt>
jmp    14f3 <executer+0x2e3>

LLVM IR (-O0):
@.str = [4 x i8] c"add\00"
@.str.1 = [5 x i8] c"addl\00"
@.str.2 = [7 x i8] c"import\00"
@.str.3 = [7 x i8] c" %[^\0A]\00"
@.str.4 = [8 x i8] c"importl\00"
@.str.5 = [6 x i8] c"order\00"
@.str.6 = [4 x i8] c"del\00"
@.str.7 = [7 x i8] c"delete\00"
@.str.8 = [7 x i8] c"delall\00"
@.str.9 = [10 x i8] c"deleteall\00"
@.str.10 = [5 x i8] c"help\00"
@.str.11 = [2 x i8] c"?\00"
@.str.12 = [9 x i8] c"showlist\00"
@.str.13 = [5 x i8] c"show\00"
@.str.14 = [5 x i8] c"play\00"
@.str.15 = [58 x i8] c"The songlist cannot be played.Please check the song list\0A\00"
@.str.16 = [8 x i8] c"playone\00"
@.str.17 = [3 x i8] c"%d\00"
@.str.18 = [5 x i8] c"save\00"
@.str.19 = [3 x i8] c"up\00"
@.str.20 = [5 x i8] c"down\00"
@.str.21 = [5 x i8] c"exit\00"
@.str.22 = [5 x i8] c"quit\00"
@.str.23 = [4 x i8] c"bye\00"
@.str.24 = [2 x i8] c"q\00"
@.str.25 = [1 x i8] zeroinitializer
@.str.26 = [6 x i8] c"%s%s\0A\00"
@.str.27 = [19 x i8] c"Command not found:\00"
define i32 @executer(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca [256 x i8]
%5 = alloca i32
store i8* %0, i8** %3
%6 = load i8*, i8** %3
%7 = call i64 @strcmp(i8* %6, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
%8 = icmp eq i64 %7, 0
br i1 %8, label %9, label %11
9: ; preds = %1
%10 = call i32 (...) @on_add()
br label %161
11: ; preds = %1
%12 = load i8*, i8** %3
%13 = call i64 @strcmp(i8* %12, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%14 = icmp eq i64 %13, 0
br i1 %14, label %15, label %17
15: ; preds = %11
%16 = call i32 (...) @on_addl()
br label %160
17: ; preds = %11
%18 = load i8*, i8** %3
%19 = call i64 @strcmp(i8* %18, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%20 = icmp eq i64 %19, 0
br i1 %20, label %21, label %26
21: ; preds = %17
%22 = getelementptr inbounds [256 x i8], [256 x i8]* %4, i64 0, i64 0
%23 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i8* %22)
%24 = getelementptr inbounds [256 x i8], [256 x i8]* %4, i64 0, i64 0
%25 = call i32 @on_import(i8* %24)
br label %159
26: ; preds = %17
%27 = load i8*, i8** %3
%28 = call i64 @strcmp(i8* %27, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
%29 = icmp eq i64 %28, 0
br i1 %29, label %30, label %35
30: ; preds = %26
%31 = getelementptr inbounds [256 x i8], [256 x i8]* %4, i64 0, i64 0
%32 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i8* %31)
%33 = getelementptr inbounds [256 x i8], [256 x i8]* %4, i64 0, i64 0
%34 = call i32 @on_importl(i8* %33)
br label %158
35: ; preds = %26
%36 = load i8*, i8** %3
%37 = call i64 @strcmp(i8* %36, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%38 = icmp eq i64 %37, 0
br i1 %38, label %39, label %41
39: ; preds = %35
%40 = call i32 (...) @on_order()
br label %157
41: ; preds = %35
%42 = load i8*, i8** %3
%43 = call i64 @strcmp(i8* %42, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%44 = icmp eq i64 %43, 0
br i1 %44, label %49, label %45
45: ; preds = %41
%46 = load i8*, i8** %3
%47 = call i64 @strcmp(i8* %46, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%48 = icmp eq i64 %47, 0
br i1 %48, label %49, label %51
49: ; preds = %45, %41
%50 = call i32 (...) @on_del()
br label %156
51: ; preds = %45
%52 = load i8*, i8** %3
%53 = call i64 @strcmp(i8* %52, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.8, i64 0, i64 0))
%54 = icmp eq i64 %53, 0
br i1 %54, label %59, label %55
55: ; preds = %51
%56 = load i8*, i8** %3
%57 = call i64 @strcmp(i8* %56, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.9, i64 0, i64 0))
%58 = icmp eq i64 %57, 0
br i1 %58, label %59, label %61
59: ; preds = %55, %51
%60 = call i32 (...) @on_delall()
br label %155
61: ; preds = %55
%62 = load i8*, i8** %3
%63 = call i64 @strcmp(i8* %62, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%64 = icmp eq i64 %63, 0
br i1 %64, label %69, label %65
65: ; preds = %61
%66 = load i8*, i8** %3
%67 = call i64 @strcmp(i8* %66, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.11, i64 0, i64 0))
%68 = icmp eq i64 %67, 0
br i1 %68, label %69, label %71
69: ; preds = %65, %61
%70 = call i32 (...) @on_help()
br label %154
71: ; preds = %65
%72 = load i8*, i8** %3
%73 = call i64 @strcmp(i8* %72, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.12, i64 0, i64 0))
%74 = icmp eq i64 %73, 0
br i1 %74, label %79, label %75
75: ; preds = %71
%76 = load i8*, i8** %3
%77 = call i64 @strcmp(i8* %76, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0))
%78 = icmp eq i64 %77, 0
br i1 %78, label %79, label %81
79: ; preds = %75, %71
%80 = call i32 (...) @on_showlist()
br label %153
81: ; preds = %75
%82 = load i8*, i8** %3
%83 = call i64 @strcmp(i8* %82, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0))
%84 = icmp eq i64 %83, 0
br i1 %84, label %85, label %91
85: ; preds = %81
%86 = call i64 @on_play(i8 signext 100, i32 0)
%87 = icmp ne i64 %86, 0
br i1 %87, label %88, label %90
88: ; preds = %85
%89 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.15, i64 0, i64 0))
br label %90
90: ; preds = %88, %85
br label %152
91: ; preds = %81
%92 = load i8*, i8** %3
%93 = call i64 @strcmp(i8* %92, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.16, i64 0, i64 0))
%94 = icmp eq i64 %93, 0
br i1 %94, label %95, label %103
95: ; preds = %91
%96 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.17, i64 0, i64 0), i32* %5)
%97 = load i32, i32* %5
%98 = call i64 @on_play(i8 signext 97, i32 %97)
%99 = icmp ne i64 %98, 0
br i1 %99, label %100, label %102
100: ; preds = %95
%101 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.15, i64 0, i64 0))
br label %102
102: ; preds = %100, %95
br label %151
103: ; preds = %91
%104 = load i8*, i8** %3
%105 = call i64 @strcmp(i8* %104, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.18, i64 0, i64 0))
%106 = icmp eq i64 %105, 0
br i1 %106, label %107, label %109
107: ; preds = %103
%108 = call i32 (...) @on_save_config()
br label %150
109: ; preds = %103
%110 = load i8*, i8** %3
%111 = call i64 @strcmp(i8* %110, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0))
%112 = icmp eq i64 %111, 0
br i1 %112, label %113, label %115
113: ; preds = %109
%114 = call i32 (...) @on_up()
br label %149
115: ; preds = %109
%116 = load i8*, i8** %3
%117 = call i64 @strcmp(i8* %116, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.20, i64 0, i64 0))
%118 = icmp eq i64 %117, 0
br i1 %118, label %119, label %121
119: ; preds = %115
%120 = call i32 (...) @on_down()
br label %148
121: ; preds = %115
%122 = load i8*, i8** %3
%123 = call i64 @strcmp(i8* %122, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.21, i64 0, i64 0))
%124 = icmp eq i64 %123, 0
br i1 %124, label %137, label %125
125: ; preds = %121
%126 = load i8*, i8** %3
%127 = call i64 @strcmp(i8* %126, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.22, i64 0, i64 0))
%128 = icmp eq i64 %127, 0
br i1 %128, label %137, label %129
129: ; preds = %125
%130 = load i8*, i8** %3
%131 = call i64 @strcmp(i8* %130, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i64 0, i64 0))
%132 = icmp eq i64 %131, 0
br i1 %132, label %137, label %133
133: ; preds = %129
%134 = load i8*, i8** %3
%135 = call i64 @strcmp(i8* %134, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.24, i64 0, i64 0))
%136 = icmp eq i64 %135, 0
br i1 %136, label %137, label %138
137: ; preds = %133, %129, %125, %121
store i32 1, i32* %2
br label %162
138: ; preds = %133
%139 = load i8*, i8** %3
%140 = call i64 @strcmp(i8* %139, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.25, i64 0, i64 0))
%141 = icmp eq i64 %140, 0
br i1 %141, label %142, label %143
142: ; preds = %138
store i32 1, i32* %2
br label %162
143: ; preds = %138
%144 = load i8*, i8** %3
%145 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.27, i64 0, i64 0), i8* %144)
br label %146
146: ; preds = %143
br label %147
147: ; preds = %146
br label %148
148: ; preds = %147, %119
br label %149
149: ; preds = %148, %113
br label %150
150: ; preds = %149, %107
br label %151
151: ; preds = %150, %102
br label %152
152: ; preds = %151, %90
br label %153
153: ; preds = %152, %79
br label %154
154: ; preds = %153, %69
br label %155
155: ; preds = %154, %59
br label %156
156: ; preds = %155, %49
br label %157
157: ; preds = %156, %39
br label %158
158: ; preds = %157, %30
br label %159
159: ; preds = %158, %21
br label %160
160: ; preds = %159, %15
br label %161
161: ; preds = %160, %9
store i32 0, i32* %2
br label %162
162: ; preds = %161, %142, %137
%163 = load i32, i32* %2
ret i32 %163
}

LLVM IR (-O2):
@.str = [4 x i8] c"add\00"
@.str.1 = [5 x i8] c"addl\00"
@.str.2 = [7 x i8] c"import\00"
@.str.3 = [7 x i8] c" %[^\0A]\00"
@.str.4 = [8 x i8] c"importl\00"
@.str.5 = [6 x i8] c"order\00"
@.str.6 = [4 x i8] c"del\00"
@.str.7 = [7 x i8] c"delete\00"
@.str.8 = [7 x i8] c"delall\00"
@.str.9 = [10 x i8] c"deleteall\00"
@.str.10 = [5 x i8] c"help\00"
@.str.11 = [2 x i8] c"?\00"
@.str.12 = [9 x i8] c"showlist\00"
@.str.13 = [5 x i8] c"show\00"
@.str.14 = [5 x i8] c"play\00"
@.str.16 = [8 x i8] c"playone\00"
@.str.17 = [3 x i8] c"%d\00"
@.str.18 = [5 x i8] c"save\00"
@.str.19 = [3 x i8] c"up\00"
@.str.20 = [5 x i8] c"down\00"
@.str.21 = [5 x i8] c"exit\00"
@.str.22 = [5 x i8] c"quit\00"
@.str.23 = [4 x i8] c"bye\00"
@.str.24 = [2 x i8] c"q\00"
@.str.25 = [1 x i8] zeroinitializer
@.str.26 = [6 x i8] c"%s%s\0A\00"
@.str.27 = [19 x i8] c"Command not found:\00"
@str.28 = [57 x i8] c"The songlist cannot be played.Please check the song list\00"
define i32 @executer(i8* %0) {
%2 = alloca [256 x i8]
%3 = alloca i32
%4 = getelementptr inbounds [256 x i8], [256 x i8]* %2, i64 0, i64 0
%5 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
%6 = icmp eq i64 %5, 0
br i1 %6, label %7, label %9
7: ; preds = %1
%8 = tail call i32 (...) @on_add()
br label %115
9: ; preds = %1
%10 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%11 = icmp eq i64 %10, 0
br i1 %11, label %12, label %14
12: ; preds = %9
%13 = tail call i32 (...) @on_addl()
br label %115
14: ; preds = %9
%15 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%16 = icmp eq i64 %15, 0
br i1 %16, label %17, label %20
17: ; preds = %14
%18 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i8* %4)
%19 = call i32 @on_import(i8* %4)
br label %115
20: ; preds = %14
%21 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
%22 = icmp eq i64 %21, 0
br i1 %22, label %23, label %26
23: ; preds = %20
%24 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i8* %4)
%25 = call i32 @on_importl(i8* %4)
br label %115
26: ; preds = %20
%27 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%28 = icmp eq i64 %27, 0
br i1 %28, label %29, label %31
29: ; preds = %26
%30 = tail call i32 (...) @on_order()
br label %115
31: ; preds = %26
%32 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%33 = icmp eq i64 %32, 0
br i1 %33, label %37, label %34
34: ; preds = %31
%35 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%36 = icmp eq i64 %35, 0
br i1 %36, label %37, label %39
37: ; preds = %34, %31
%38 = tail call i32 (...) @on_del()
br label %115
39: ; preds = %34
%40 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.8, i64 0, i64 0))
%41 = icmp eq i64 %40, 0
br i1 %41, label %45, label %42
42: ; preds = %39
%43 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.9, i64 0, i64 0))
%44 = icmp eq i64 %43, 0
br i1 %44, label %45, label %47
45: ; preds = %42, %39
%46 = tail call i32 (...) @on_delall()
br label %115
47: ; preds = %42
%48 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%49 = icmp eq i64 %48, 0
br i1 %49, label %53, label %50
50: ; preds = %47
%51 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.11, i64 0, i64 0))
%52 = icmp eq i64 %51, 0
br i1 %52, label %53, label %55
53: ; preds = %50, %47
%54 = tail call i32 (...) @on_help()
br label %115
55: ; preds = %50
%56 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.12, i64 0, i64 0))
%57 = icmp eq i64 %56, 0
br i1 %57, label %61, label %58
58: ; preds = %55
%59 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0))
%60 = icmp eq i64 %59, 0
br i1 %60, label %61, label %63
61: ; preds = %58, %55
%62 = tail call i32 (...) @on_showlist()
br label %115
63: ; preds = %58
%64 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0))
%65 = icmp eq i64 %64, 0
br i1 %65, label %66, label %71
66: ; preds = %63
%67 = tail call i64 @on_play(i8 signext 100, i32 0)
%68 = icmp eq i64 %67, 0
br i1 %68, label %115, label %69
69: ; preds = %66
%70 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @str.28, i64 0, i64 0))
br label %115
71: ; preds = %63
%72 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.16, i64 0, i64 0))
%73 = icmp eq i64 %72, 0
br i1 %73, label %74, label %83
74: ; preds = %71
%75 = bitcast i32* %3 to i8*
%76 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.17, i64 0, i64 0), i32* %3)
%77 = load i32, i32* %3
%78 = call i64 @on_play(i8 signext 97, i32 %77)
%79 = icmp eq i64 %78, 0
br i1 %79, label %82, label %80
80: ; preds = %74
%81 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @str.28, i64 0, i64 0))
br label %82
82: ; preds = %80, %74
br label %115
83: ; preds = %71
%84 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.18, i64 0, i64 0))
%85 = icmp eq i64 %84, 0
br i1 %85, label %86, label %88
86: ; preds = %83
%87 = tail call i32 (...) @on_save_config()
br label %115
88: ; preds = %83
%89 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0))
%90 = icmp eq i64 %89, 0
br i1 %90, label %91, label %93
91: ; preds = %88
%92 = tail call i32 (...) @on_up()
br label %115
93: ; preds = %88
%94 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.20, i64 0, i64 0))
%95 = icmp eq i64 %94, 0
br i1 %95, label %96, label %98
96: ; preds = %93
%97 = tail call i32 (...) @on_down()
br label %115
98: ; preds = %93
%99 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.21, i64 0, i64 0))
%100 = icmp eq i64 %99, 0
br i1 %100, label %115, label %101
101: ; preds = %98
%102 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.22, i64 0, i64 0))
%103 = icmp eq i64 %102, 0
br i1 %103, label %115, label %104
104: ; preds = %101
%105 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i64 0, i64 0))
%106 = icmp eq i64 %105, 0
br i1 %106, label %115, label %107
107: ; preds = %104
%108 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.24, i64 0, i64 0))
%109 = icmp eq i64 %108, 0
br i1 %109, label %115, label %110
110: ; preds = %107
%111 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.25, i64 0, i64 0))
%112 = icmp eq i64 %111, 0
br i1 %112, label %115, label %113
113: ; preds = %110
%114 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.27, i64 0, i64 0), i8* %0)
br label %115
115: ; preds = %7, %17, %29, %45, %61, %82, %91, %113, %96, %86, %66, %69, %53, %37, %23, %12, %110, %98, %101, %104, %107
%116 = phi i32 [ 1, %107 ], [ 1, %104 ], [ 1, %101 ], [ 1, %98 ], [ 1, %110 ], [ 0, %12 ], [ 0, %23 ], [ 0, %37 ], [ 0, %53 ], [ 0, %69 ], [ 0, %66 ], [ 0, %86 ], [ 0, %96 ], [ 0, %113 ], [ 0, %91 ], [ 0, %82 ], [ 0, %61 ], [ 0, %45 ], [ 0, %29 ], [ 0, %17 ], [ 0, %7 ]
ret i32 %116
}