#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(
      "Usage: beegetopt [options] -- [arguments and options to be parsed]\n\n"
      "  -o | --option=OPTION[,OPTION]   options to be recognized\n"
      "\n"
      "  -n | --name=NAME                set program name\n"
      "  -N | --stop-on-no-option        stop parsing when argument\n"
      "                                  is not an option\n"
      "  -U | --stop-on-unknown-option   stop parsing when argument\n"
      "                                  is an unknown option\n"
      "  -S | --no-skip-unknown-option   carp on unknown options\n"
      "                                  by default unknown options are "
      "skipped\n"
      "                                  and handled as non-option argument.\n"
      "                                  -S is ignored if -U is given.\n"
      "  -k | --keep-option-end          respect but keep '--' at it's "
      "position\n"
      "\n"
      "  -h | --help                     print this little help\n"
      "  -V | --version                  print version\n"
      "\n"
      " OPTION may be a short or a long option or a combination of long and\n"
      " short options seperated by a slash (/). In this case the second to "
      "last\n"
      " option are considered aliases for the first. Only the first option is\n"
      " returned as a new commandline argument: e.g.\n"
      "    --option long/alias/a/b  will always return --long\n"
      "    --option a/b/long        will always return -a\n"
      "\n"
      " If the last character of OPTION is '=' this option will require an\n"
      " argument. "
      " If it is ':' this option takes an optional argument: e.g.\n"
      "    --option name/n=\n"
      "\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 = [1379 x i8] c"Usage: beegetopt [options] -- [arguments and options to be parsed]\0A\0A -o | --option=OPTION[,OPTION] options to be recognized\0A\0A -n | --name=NAME set program name\0A -N | --stop-on-no-option stop parsing when argument\0A is not an option\0A -U | --stop-on-unknown-option stop parsing when argument\0A is an unknown option\0A -S | --no-skip-unknown-option carp on unknown options\0A by default unknown options are skipped\0A and handled as non-option argument.\0A -S is ignored if -U is given.\0A -k | --keep-option-end respect but keep '--' at it's position\0A\0A -h | --help print this little help\0A -V | --version print version\0A\0A OPTION may be a short or a long option or a combination of long and\0A short options seperated by a slash (/). In this case the second to last\0A option are considered aliases for the first. Only the first option is\0A returned as a new commandline argument: e.g.\0A --option long/alias/a/b will always return --long\0A --option a/b/long will always return -a\0A\0A If the last character of OPTION is '=' this option will require an\0A argument. If it is ':' this option takes an optional argument: e.g.\0A --option name/n=\0A\0A\00"
define void @usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([1379 x i8], [1379 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [1378 x i8] c"Usage: beegetopt [options] -- [arguments and options to be parsed]\0A\0A -o | --option=OPTION[,OPTION] options to be recognized\0A\0A -n | --name=NAME set program name\0A -N | --stop-on-no-option stop parsing when argument\0A is not an option\0A -U | --stop-on-unknown-option stop parsing when argument\0A is an unknown option\0A -S | --no-skip-unknown-option carp on unknown options\0A by default unknown options are skipped\0A and handled as non-option argument.\0A -S is ignored if -U is given.\0A -k | --keep-option-end respect but keep '--' at it's position\0A\0A -h | --help print this little help\0A -V | --version print version\0A\0A OPTION may be a short or a long option or a combination of long and\0A short options seperated by a slash (/). In this case the second to last\0A option are considered aliases for the first. Only the first option is\0A returned as a new commandline argument: e.g.\0A --option long/alias/a/b will always return --long\0A --option a/b/long will always return -a\0A\0A If the last character of OPTION is '=' this option will require an\0A argument. If it is ':' this option takes an optional argument: e.g.\0A --option name/n=\0A\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1378 x i8], [1378 x i8]* @str, i64 0, i64 0))
ret void
}