#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*/ printf(char *);
void usage(void) {
  printf("kmemcache"
         " "
         "0.4"
         "\n");
  printf(
      "-p <num>      TCP port number to listen on (default: 11211)\n"
      "-U <num>      UDP port number to listen on (default: 11211, 0 is off)\n"
      "-s <file>     UNIX socket path to listen on (disables network support)\n"
      "              XXX: must be absolute path\n"
      "-A            enable ascii \"shutdown\" command\n"
      "-a <mask>     access mask for UNIX socket, in octal (default: 0700)\n"
      "-l <addr>     interface to listen on (default: INADDR_ANY, all "
      "addresses)\n"
      "              <addr> may be specified as host:port. If you don't "
      "specify\n"
      "              a port number, the value you specified with -p or -U is\n"
      "              used. You may specify multiple addresses separated by "
      "comma\n"
      "              or by using -l multiple times\n"
      "-r            maximize core file limit\n"
      "-m <num>      max memory to use for items in megabytes (default: 64 "
      "MB)\n"
      "-M            return error on memory exhausted (rather than removing "
      "items)\n"
      "-c <num>      max simultaneous connections (default: 1024)\n"
      "-v            verbose (print errors/warnings while in event loop)\n"
      "-vv           very verbose (also print client commands/reponses)\n"
      "-vvv          extremely verbose (also print internal state "
      "transitions)\n"
      "-h            print this help and exit\n"
      "-i            print memcached and libevent license\n"
      "-f <factor>   chunk size growth factor (default: 1.25)\n"
      "-n <bytes>    minimum space allocated for key+value+flags (default: "
      "48)\n");
  printf(
      "-L            Try to use large memory pages (if available). Increasing\n"
      "              the memory page size could reduce the number of TLB "
      "misses\n"
      "              and improve the performance. In order to get large pages\n"
      "              from the OS, memcached will allocate the total "
      "item-cache\n"
      "              in one large chunk.\n");
  printf("-D <char>     Use <char> as the delimiter between key prefixes and "
         "IDs.\n"
         "              This is used for per-prefix stats reporting. The "
         "default is\n"
         "              \":\" (colon). If this option is specified, stats "
         "collection\n"
         "              is turned on automatically; if not, then it may be "
         "turned on\n"
         "              by sending the \"stats detail on\" command to the "
         "server.\n");
  printf("-R            Maximum number of requests per event, limits the "
         "number of\n"
         "              requests process for a given connection to prevent \n"
         "              starvation (default: 20)\n");
  printf("-C            Disable use of CAS\n");
  printf("-b            Set the backlog queue limit (default: 1024)\n");
  printf("-B            Binding protocol - one of ascii, binary, or auto "
         "(default)\n");
  printf("-I            Override the size of each slab page. Adjusts max item "
         "size\n"
         "              (default: 1mb, min: 1k, max: 128m)\n");
  printf(
      "-o            Comma separated list of extended or experimental options\n"
      "              - (EXPERIMENTAL) maxconns_fast: immediately close new\n"
      "                connections if over maxconns limit\n"
      "              - hashpower: An integer multiplier for how large the "
      "hash\n"
      "                table should be. Can be grown at runtime if not big "
      "enough.\n"
      "                Set this based on \"STAT hash_power_level\" before a \n"
      "                restart.\n");
  return;
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
lea    0xee8(%rip),%rdi
call   1030 <printf@plt>
lea    0x142a(%rip),%rdi
call   1030 <printf@plt>
lea    0x1560(%rip),%rdi
call   1030 <printf@plt>
lea    0x16c1(%rip),%rdi
call   1030 <printf@plt>
lea    0x1768(%rip),%rdi
call   1030 <printf@plt>
lea    0x177e(%rip),%rdi
call   1030 <printf@plt>
lea    0x17ad(%rip),%rdi
call   1030 <printf@plt>
lea    0x17eb(%rip),%rdi
call   1030 <printf@plt>
lea    0x185a(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rax
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
lea    0xeea(%rip),%rdi
call   1030 <puts@plt>
lea    0x142b(%rip),%rdi
call   1030 <puts@plt>
lea    0x1560(%rip),%rdi
call   1030 <puts@plt>
lea    0x16c0(%rip),%rdi
call   1030 <puts@plt>
lea    0x1766(%rip),%rdi
call   1030 <puts@plt>
lea    0x177b(%rip),%rdi
call   1030 <puts@plt>
lea    0x17a9(%rip),%rdi
call   1030 <puts@plt>
lea    0x17e6(%rip),%rdi
call   1030 <puts@plt>
lea    0x1854(%rip),%rdi
pop    %rax
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [15 x i8] c"kmemcache 0.4\0A\00"
@.str.1 = [1358 x i8] c"-p <num> TCP port number to listen on (default: 11211)\0A-U <num> UDP port number to listen on (default: 11211, 0 is off)\0A-s <file> UNIX socket path to listen on (disables network support)\0A XXX: must be absolute path\0A-A enable ascii \22shutdown\22 command\0A-a <mask> access mask for UNIX socket, in octal (default: 0700)\0A-l <addr> interface to listen on (default: INADDR_ANY, all addresses)\0A <addr> may be specified as host:port. If you don't specify\0A a port number, the value you specified with -p or -U is\0A used. You may specify multiple addresses separated by comma\0A or by using -l multiple times\0A-r maximize core file limit\0A-m <num> max memory to use for items in megabytes (default: 64 MB)\0A-M return error on memory exhausted (rather than removing items)\0A-c <num> max simultaneous connections (default: 1024)\0A-v verbose (print errors/warnings while in event loop)\0A-vv very verbose (also print client commands/reponses)\0A-vvv extremely verbose (also print internal state transitions)\0A-h print this help and exit\0A-i print memcached and libevent license\0A-f <factor> chunk size growth factor (default: 1.25)\0A-n <bytes> minimum space allocated for key+value+flags (default: 48)\0A\00"
@.str.2 = [322 x i8] c"-L Try to use large memory pages (if available). Increasing\0A the memory page size could reduce the number of TLB misses\0A and improve the performance. In order to get large pages\0A from the OS, memcached will allocate the total item-cache\0A in one large chunk.\0A\00"
@.str.3 = [365 x i8] c"-D <char> Use <char> as the delimiter between key prefixes and IDs.\0A This is used for per-prefix stats reporting. The default is\0A \22:\22 (colon). If this option is specified, stats collection\0A is turned on automatically; if not, then it may be turned on\0A by sending the \22stats detail on\22 command to the server.\0A\00"
@.str.4 = [179 x i8] c"-R Maximum number of requests per event, limits the number of\0A requests process for a given connection to prevent \0A starvation (default: 20)\0A\00"
@.str.5 = [34 x i8] c"-C Disable use of CAS\0A\00"
@.str.6 = [59 x i8] c"-b Set the backlog queue limit (default: 1024)\0A\00"
@.str.7 = [74 x i8] c"-B Binding protocol - one of ascii, binary, or auto (default)\0A\00"
@.str.8 = [123 x i8] c"-I Override the size of each slab page. Adjusts max item size\0A (default: 1mb, min: 1k, max: 128m)\0A\00"
@.str.9 = [432 x i8] c"-o Comma separated list of extended or experimental options\0A - (EXPERIMENTAL) maxconns_fast: immediately close new\0A connections if over maxconns limit\0A - hashpower: An integer multiplier for how large the hash\0A table should be. Can be grown at runtime if not big enough.\0A Set this based on \22STAT hash_power_level\22 before a \0A restart.\0A\00"
define void @usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([1358 x i8], [1358 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([322 x i8], [322 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([365 x i8], [365 x i8]* @.str.3, i64 0, i64 0))
%5 = call i32 @printf(i8* getelementptr inbounds ([179 x i8], [179 x i8]* @.str.4, i64 0, i64 0))
%6 = call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.5, i64 0, i64 0))
%7 = call i32 @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.6, i64 0, i64 0))
%8 = call i32 @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.7, i64 0, i64 0))
%9 = call i32 @printf(i8* getelementptr inbounds ([123 x i8], [123 x i8]* @.str.8, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([432 x i8], [432 x i8]* @.str.9, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [14 x i8] c"kmemcache 0.4\00"
@str.10 = [1357 x i8] c"-p <num> TCP port number to listen on (default: 11211)\0A-U <num> UDP port number to listen on (default: 11211, 0 is off)\0A-s <file> UNIX socket path to listen on (disables network support)\0A XXX: must be absolute path\0A-A enable ascii \22shutdown\22 command\0A-a <mask> access mask for UNIX socket, in octal (default: 0700)\0A-l <addr> interface to listen on (default: INADDR_ANY, all addresses)\0A <addr> may be specified as host:port. If you don't specify\0A a port number, the value you specified with -p or -U is\0A used. You may specify multiple addresses separated by comma\0A or by using -l multiple times\0A-r maximize core file limit\0A-m <num> max memory to use for items in megabytes (default: 64 MB)\0A-M return error on memory exhausted (rather than removing items)\0A-c <num> max simultaneous connections (default: 1024)\0A-v verbose (print errors/warnings while in event loop)\0A-vv very verbose (also print client commands/reponses)\0A-vvv extremely verbose (also print internal state transitions)\0A-h print this help and exit\0A-i print memcached and libevent license\0A-f <factor> chunk size growth factor (default: 1.25)\0A-n <bytes> minimum space allocated for key+value+flags (default: 48)\00"
@str.11 = [321 x i8] c"-L Try to use large memory pages (if available). Increasing\0A the memory page size could reduce the number of TLB misses\0A and improve the performance. In order to get large pages\0A from the OS, memcached will allocate the total item-cache\0A in one large chunk.\00"
@str.12 = [364 x i8] c"-D <char> Use <char> as the delimiter between key prefixes and IDs.\0A This is used for per-prefix stats reporting. The default is\0A \22:\22 (colon). If this option is specified, stats collection\0A is turned on automatically; if not, then it may be turned on\0A by sending the \22stats detail on\22 command to the server.\00"
@str.13 = [178 x i8] c"-R Maximum number of requests per event, limits the number of\0A requests process for a given connection to prevent \0A starvation (default: 20)\00"
@str.14 = [33 x i8] c"-C Disable use of CAS\00"
@str.15 = [58 x i8] c"-b Set the backlog queue limit (default: 1024)\00"
@str.16 = [73 x i8] c"-B Binding protocol - one of ascii, binary, or auto (default)\00"
@str.17 = [122 x i8] c"-I Override the size of each slab page. Adjusts max item size\0A (default: 1mb, min: 1k, max: 128m)\00"
@str.18 = [431 x i8] c"-o Comma separated list of extended or experimental options\0A - (EXPERIMENTAL) maxconns_fast: immediately close new\0A connections if over maxconns limit\0A - hashpower: An integer multiplier for how large the hash\0A table should be. Can be grown at runtime if not big enough.\0A Set this based on \22STAT hash_power_level\22 before a \0A restart.\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1357 x i8], [1357 x i8]* @str.10, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([321 x i8], [321 x i8]* @str.11, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([364 x i8], [364 x i8]* @str.12, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([178 x i8], [178 x i8]* @str.13, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.14, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @str.15, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.16, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([122 x i8], [122 x i8]* @str.17, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([431 x i8], [431 x i8]* @str.18, i64 0, i64 0))
ret void
}