#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() {
  printf(
      "Usage: yc "
      "[-h] [-v] [-d] [-s SERVER] [-p PORT] [-c COMPRESS] COMMAND ...\n\n"
      "Options:\n"
      "  -h      print help and exit.\n"
      "  -v      print version information.\n"
      "  -d      turn on debug messages.\n"
      "  -q      Use quiet commands, if possible.\n"
      "  -s      connect to SERVER.      Default: localhost\n"
      "  -p      TCP port number.        Default: 11211\n"
      "  -c      compression threshold.  Default: 16384\n\n"
      "Commands:\n"
      "  noop\n"
      "          ping the server.\n"
      "  get KEY\n"
      "          get an object.\n"
      "  getk KEY\n"
      "          get an object with key.\n"
      "  gat KEY EXPIRE\n"
      "          get and touch an object.\n"
      "  gatk KEY EXPIRE\n"
      "          get and touch an object with key.\n"
      "  lag KEY\n"
      "          lock and get an object.\n"
      "  lagk KEY\n"
      "          lock and get an object with key.\n"
      "  touch KEY EXPIRE\n"
      "          touch an object.\n"
      "  set KEY FILE [EXPIRE [FLAGS [CAS]]]\n"
      "          store FILE data.  If FILE is \"-\", stdin is used.\n"
      "  replace KEY FILE [EXPIRE [FLAGS [CAS]]]\n"
      "          update an existing object. FILE is the same as set.\n"
      "  add KEY FILE [EXPIRE [FLAGS [CAS]]]\n"
      "          create a new object. FILE is the same as set.\n"
      "  rau KEY FILE [EXPIRE [FLAGS]]\n"
      "          replace a locked object then unlock it.\n"
      "          Since this command always fails, do not use this.\n"
      "  incr KEY VALUE [INITIAL [EXPIRE]]\n"
      "          increments an exiting object's value by VALUE.\n"
      "          If INITIAL is given, new object is created when KEY\n"
      "          is not found.  EXPIRE is used only when an object is\n"
      "          created.\n"
      "  decr KEY VALUE [INITIAL [EXPIRE]]\n"
      "          decrements an exiting object's value by VALUE.\n"
      "          If INITIAL is given, new object is created when KEY\n"
      "          is not found.  EXPIRE is used only when an object is\n"
      "          created.\n"
      "  append KEY FILE\n"
      "          append FILE data  FILE is the same as set.\n"
      "  prepend KEY FILE\n"
      "          prepend FILE data  FILE is the same as set.\n"
      "  delete KEY\n"
      "          delete an object.\n"
      "  lock KEY\n"
      "          locks an object.\n"
      "  unlock KEY\n"
      "          this command always fails.  Do not use this.\n"
      "  unlockall\n"
      "          this command has no effect.\n"
      "  flush [DELAY]\n"
      "          flush all unlocked items immediately or after DELAY seconds.\n"
      "  stat [settings|items|sizes]\n"
      "          obtain general or specified statistics.\n"
      "  version\n"
      "          shows the server version.\n"
      "  quit\n"
      "          just quits.  Not much interesting.\n");
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
lea    0xee9(%rip),%rdi
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [2280 x i8] c"Usage: yc [-h] [-v] [-d] [-s SERVER] [-p PORT] [-c COMPRESS] COMMAND ...\0A\0AOptions:\0A -h print help and exit.\0A -v print version information.\0A -d turn on debug messages.\0A -q Use quiet commands, if possible.\0A -s connect to SERVER. Default: localhost\0A -p TCP port number. Default: 11211\0A -c compression threshold. Default: 16384\0A\0ACommands:\0A noop\0A ping the server.\0A get KEY\0A get an object.\0A getk KEY\0A get an object with key.\0A gat KEY EXPIRE\0A get and touch an object.\0A gatk KEY EXPIRE\0A get and touch an object with key.\0A lag KEY\0A lock and get an object.\0A lagk KEY\0A lock and get an object with key.\0A touch KEY EXPIRE\0A touch an object.\0A set KEY FILE [EXPIRE [FLAGS [CAS]]]\0A store FILE data. If FILE is \22-\22, stdin is used.\0A replace KEY FILE [EXPIRE [FLAGS [CAS]]]\0A update an existing object. FILE is the same as set.\0A add KEY FILE [EXPIRE [FLAGS [CAS]]]\0A create a new object. FILE is the same as set.\0A rau KEY FILE [EXPIRE [FLAGS]]\0A replace a locked object then unlock it.\0A Since this command always fails, do not use this.\0A incr KEY VALUE [INITIAL [EXPIRE]]\0A increments an exiting object's value by VALUE.\0A If INITIAL is given, new object is created when KEY\0A is not found. EXPIRE is used only when an object is\0A created.\0A decr KEY VALUE [INITIAL [EXPIRE]]\0A decrements an exiting object's value by VALUE.\0A If INITIAL is given, new object is created when KEY\0A is not found. EXPIRE is used only when an object is\0A created.\0A append KEY FILE\0A append FILE data FILE is the same as set.\0A prepend KEY FILE\0A prepend FILE data FILE is the same as set.\0A delete KEY\0A delete an object.\0A lock KEY\0A locks an object.\0A unlock KEY\0A this command always fails. Do not use this.\0A unlockall\0A this command has no effect.\0A flush [DELAY]\0A flush all unlocked items immediately or after DELAY seconds.\0A stat [settings|items|sizes]\0A obtain general or specified statistics.\0A version\0A shows the server version.\0A quit\0A just quits. Not much interesting.\0A\00"
define void @usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([2280 x i8], [2280 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [2279 x i8] c"Usage: yc [-h] [-v] [-d] [-s SERVER] [-p PORT] [-c COMPRESS] COMMAND ...\0A\0AOptions:\0A -h print help and exit.\0A -v print version information.\0A -d turn on debug messages.\0A -q Use quiet commands, if possible.\0A -s connect to SERVER. Default: localhost\0A -p TCP port number. Default: 11211\0A -c compression threshold. Default: 16384\0A\0ACommands:\0A noop\0A ping the server.\0A get KEY\0A get an object.\0A getk KEY\0A get an object with key.\0A gat KEY EXPIRE\0A get and touch an object.\0A gatk KEY EXPIRE\0A get and touch an object with key.\0A lag KEY\0A lock and get an object.\0A lagk KEY\0A lock and get an object with key.\0A touch KEY EXPIRE\0A touch an object.\0A set KEY FILE [EXPIRE [FLAGS [CAS]]]\0A store FILE data. If FILE is \22-\22, stdin is used.\0A replace KEY FILE [EXPIRE [FLAGS [CAS]]]\0A update an existing object. FILE is the same as set.\0A add KEY FILE [EXPIRE [FLAGS [CAS]]]\0A create a new object. FILE is the same as set.\0A rau KEY FILE [EXPIRE [FLAGS]]\0A replace a locked object then unlock it.\0A Since this command always fails, do not use this.\0A incr KEY VALUE [INITIAL [EXPIRE]]\0A increments an exiting object's value by VALUE.\0A If INITIAL is given, new object is created when KEY\0A is not found. EXPIRE is used only when an object is\0A created.\0A decr KEY VALUE [INITIAL [EXPIRE]]\0A decrements an exiting object's value by VALUE.\0A If INITIAL is given, new object is created when KEY\0A is not found. EXPIRE is used only when an object is\0A created.\0A append KEY FILE\0A append FILE data FILE is the same as set.\0A prepend KEY FILE\0A prepend FILE data FILE is the same as set.\0A delete KEY\0A delete an object.\0A lock KEY\0A locks an object.\0A unlock KEY\0A this command always fails. Do not use this.\0A unlockall\0A this command has no effect.\0A flush [DELAY]\0A flush all unlocked items immediately or after DELAY seconds.\0A stat [settings|items|sizes]\0A obtain general or specified statistics.\0A version\0A shows the server version.\0A quit\0A just quits. Not much interesting.\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2279 x i8], [2279 x i8]* @str, i64 0, i64 0))
ret void
}