#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*/ puts(char *);
void usage(int status) {
  if (status != 0) {
    puts("USAGE: tagger [OPTION] OPERATION [PARAMETERS]");
    puts("Try 'tagger --help' for more information.");
  } else {
    puts("USAGE: tagger [OPTION] OPERATION [PARAMETERS]");
    puts("OPTIONS:\n  --mode=           Specify on which elements operation is "
         "to apply\n                    Possible values: 'tags|'files'\n       "
         "             Default: 'tags'\n  --tags            Set mode to apply "
         "operation on 'tag' elements (default)\n  --files           Set mode "
         "to apply operation on 'file' elements\n\n  --env-path=       Force "
         "using a specific path for storing database\n                    "
         "Possible values: 'home|'current'|{custom path}\n                    "
         "Default: 'home'\n  --env-dir=        Force using a specific name for "
         "database folder\n                    Default '.tagger'\n  --local    "
         "       Force using current directory for database\n\n  --trash       "
         "    Restrict current operation to trashed elements only\n  "
         "--db-charset=     Specify database charset (default is UTF-8)\n  "
         "--db-node-syntax= Define how filenames are stored (relative or "
         "absolute path)\n\n  --quiet           Suppress all normal output\n  "
         "--debug           Output program trace and internal errors\n  --help "
         "           Display this help text\n  --version         Display "
         "version information");
    puts("OPERATIONS:\n  init          Setup tagger environment (create an "
         "empty database)\n  create        Create one or more new tag(s)\n  "
         "clone         Create a new element by copying all relations from "
         "another\n  delete        Delete one or more element(s) (all "
         "relations will be lost)\n  recover       Recover a previously "
         "deleted element\n  rename        Rename an element\n  merge         "
         "Merge two elements (existing relations will be applied to both)\n  "
         "tag           Add(+) or remove(-) tag(s) to/from one or more files\n "
         " list          Show all elements in database for specified mode\n  "
         "query         Retrieve all elements matching given criteria (depends "
         "on mode)\n  tags          Shorthand for \"tagger --tags list\"\n  "
         "files         Shorthand for \"tagger --files list\"");
    puts("Examples:\n  tagger create mp3 music\n  tagger tag +mp3 +music "
         "sound.mp3\n  tagger -music sound.mp3\n  tagger merge mp3 music\n  "
         "tagger query sound.mp3\n  tagger --files list");
  }
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
cmpl   $0x0,-0x4(%rbp)
je     1142 <usage+0x32>
lea    0xed4(%rip),%rdi
call   1030 <puts@plt>
lea    0xef6(%rip),%rdi
call   1030 <puts@plt>
jmp    1172 <usage+0x62>
lea    0xeb7(%rip),%rdi
call   1030 <puts@plt>
lea    0xf03(%rip),%rdi
call   1030 <puts@plt>
lea    0x1321(%rip),%rdi
call   1030 <puts@plt>
lea    0x160d(%rip),%rdi
call   1030 <puts@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rbx
mov    %edi,%ebx
lea    0xee6(%rip),%rdi
call   1030 <puts@plt>
test   %ebx,%ebx
je     1130 <usage+0x20>
lea    0xf04(%rip),%rdi
pop    %rbx
jmp    1030 <puts@plt>
lea    0xf21(%rip),%rdi
call   1030 <puts@plt>
lea    0x133f(%rip),%rdi
call   1030 <puts@plt>
lea    0x162b(%rip),%rdi
pop    %rbx
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [46 x i8] c"USAGE: tagger [OPTION] OPERATION [PARAMETERS]\00"
@.str.1 = [42 x i8] c"Try 'tagger --help' for more information.\00"
@.str.2 = [1066 x i8] c"OPTIONS:\0A --mode= Specify on which elements operation is to apply\0A Possible values: 'tags|'files'\0A Default: 'tags'\0A --tags Set mode to apply operation on 'tag' elements (default)\0A --files Set mode to apply operation on 'file' elements\0A\0A --env-path= Force using a specific path for storing database\0A Possible values: 'home|'current'|{custom path}\0A Default: 'home'\0A --env-dir= Force using a specific name for database folder\0A Default '.tagger'\0A --local Force using current directory for database\0A\0A --trash Restrict current operation to trashed elements only\0A --db-charset= Specify database charset (default is UTF-8)\0A --db-node-syntax= Define how filenames are stored (relative or absolute path)\0A\0A --quiet Suppress all normal output\0A --debug Output program trace and internal errors\0A --help Display this help text\0A --version Display version information\00"
@.str.3 = [760 x i8] c"OPERATIONS:\0A init Setup tagger environment (create an empty database)\0A create Create one or more new tag(s)\0A clone Create a new element by copying all relations from another\0A delete Delete one or more element(s) (all relations will be lost)\0A recover Recover a previously deleted element\0A rename Rename an element\0A merge Merge two elements (existing relations will be applied to both)\0A tag Add(+) or remove(-) tag(s) to/from one or more files\0A list Show all elements in database for specified mode\0A query Retrieve all elements matching given criteria (depends on mode)\0A tags Shorthand for \22tagger --tags list\22\0A files Shorthand for \22tagger --files list\22\00"
@.str.4 = [169 x i8] c"Examples:\0A tagger create mp3 music\0A tagger tag +mp3 +music sound.mp3\0A tagger -music sound.mp3\0A tagger merge mp3 music\0A tagger query sound.mp3\0A tagger --files list\00"
define void @usage(i32 %0) {
%2 = alloca i32
store i32 %0, i32* %2
%3 = load i32, i32* %2
%4 = icmp ne i32 %3, 0
br i1 %4, label %5, label %8
5: ; preds = %1
%6 = call i32 @puts(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str, i64 0, i64 0))
%7 = call i32 @puts(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.1, i64 0, i64 0))
br label %13
8: ; preds = %1
%9 = call i32 @puts(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str, i64 0, i64 0))
%10 = call i32 @puts(i8* getelementptr inbounds ([1066 x i8], [1066 x i8]* @.str.2, i64 0, i64 0))
%11 = call i32 @puts(i8* getelementptr inbounds ([760 x i8], [760 x i8]* @.str.3, i64 0, i64 0))
%12 = call i32 @puts(i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.4, i64 0, i64 0))
br label %13
13: ; preds = %8, %5
ret void
}

LLVM IR (-O2):
@.str = [46 x i8] c"USAGE: tagger [OPTION] OPERATION [PARAMETERS]\00"
@.str.1 = [42 x i8] c"Try 'tagger --help' for more information.\00"
@.str.2 = [1066 x i8] c"OPTIONS:\0A --mode= Specify on which elements operation is to apply\0A Possible values: 'tags|'files'\0A Default: 'tags'\0A --tags Set mode to apply operation on 'tag' elements (default)\0A --files Set mode to apply operation on 'file' elements\0A\0A --env-path= Force using a specific path for storing database\0A Possible values: 'home|'current'|{custom path}\0A Default: 'home'\0A --env-dir= Force using a specific name for database folder\0A Default '.tagger'\0A --local Force using current directory for database\0A\0A --trash Restrict current operation to trashed elements only\0A --db-charset= Specify database charset (default is UTF-8)\0A --db-node-syntax= Define how filenames are stored (relative or absolute path)\0A\0A --quiet Suppress all normal output\0A --debug Output program trace and internal errors\0A --help Display this help text\0A --version Display version information\00"
@.str.3 = [760 x i8] c"OPERATIONS:\0A init Setup tagger environment (create an empty database)\0A create Create one or more new tag(s)\0A clone Create a new element by copying all relations from another\0A delete Delete one or more element(s) (all relations will be lost)\0A recover Recover a previously deleted element\0A rename Rename an element\0A merge Merge two elements (existing relations will be applied to both)\0A tag Add(+) or remove(-) tag(s) to/from one or more files\0A list Show all elements in database for specified mode\0A query Retrieve all elements matching given criteria (depends on mode)\0A tags Shorthand for \22tagger --tags list\22\0A files Shorthand for \22tagger --files list\22\00"
@.str.4 = [169 x i8] c"Examples:\0A tagger create mp3 music\0A tagger tag +mp3 +music sound.mp3\0A tagger -music sound.mp3\0A tagger merge mp3 music\0A tagger query sound.mp3\0A tagger --files list\00"
define void @usage(i32 %0) {
%2 = icmp eq i32 %0, 0
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @.str, i64 0, i64 0))
br i1 %2, label %4, label %7
4: ; preds = %1
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1066 x i8], [1066 x i8]* @.str.2, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([760 x i8], [760 x i8]* @.str.3, i64 0, i64 0))
br label %7
7: ; preds = %1, %4
%8 = phi i8* [ getelementptr inbounds ([169 x i8], [169 x i8]* @.str.4, i64 0, i64 0), %4 ], [ getelementptr inbounds ([42 x i8], [42 x i8]* @.str.1, i64 0, i64 0), %1 ]
%9 = tail call i32 @puts(i8* dereferenceable(1) %8)
ret void
}