#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 *, char const *);
void help(const char *cmd_name) {
  printf(
      "Usage: %s [OPTION]...\nRuns some threads and displays their "
      "schedule.\n\nMandatory arguments to long options are mandatory for "
      "short options too.\n  -h, --help            Display this help and "
      "exit.\n\n  -v, --verbose         Verbose output. Useful for debugging "
      "purposes.\n  -q, --quiet           Quiet mode: will only log warnings "
      "and fatal errors.\n  -g, --no-gui          Don't start the GUI.\n  -f, "
      "--taskfile=FILE   Read task definition from FILE (default or \"-\": "
      "stdin).\n  -t, --tracefile=FILE  Output trace to FILE (default or "
      "\"-\": stdout).\n      --no-trace        Disable output of the trace.\n "
      "     --trace-flush     Flush the output after writing each trace "
      "event.\n      --log-flush       Flush the logging output after each "
      "write.\n      --no-log-sync     Disable synchronization of logging "
      "statements \n                        (otherways enabled by default).\n  "
      "                      When disabled, the output might turn into a "
      "mess.\n\n  -W, --width=NUM       Set window width to NUM.\n  -H, "
      "--height=NUM      Set window height to NUM.\n\nControlling behaviour:\n "
      " -p  --protocol=PROTO  Use the specified protocol for the mutex "
      "variables\n                        that emulate shared resources.\n     "
      "                   PROTO can be NONE (default), INHERIT, or PROTECT.\n  "
      "                      See PTHREAD_MUTEXATTR_GETPROTOCOL(3P) for "
      "details.\n      --no-affinity     Don't set the CPU affinity of the "
      "running tasks.\n                        By default, tasks are forced to "
      "run on a single\n                        processor (the first available "
      "is chosen): this flag\n                        inhibits this "
      "constraint. Beware that this may result\n                        in "
      "drastically different behaviours on multi-processor\n                   "
      "     environments.\n      --idle-yield      If set, the idle job will "
      "invoke pthread_yield() at\n                        every operation.\n   "
      "   --idle-sleep      If set, the idle job will invoke clock_nanosleep() "
      "with\n                        a 1-ns sleep time at every operation.\n\n",
      cmd_name);
}


x86 assembly (clang, -O0):
<help>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<help>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [2015 x i8] c"Usage: %s [OPTION]...\0ARuns some threads and displays their schedule.\0A\0AMandatory arguments to long options are mandatory for short options too.\0A -h, --help Display this help and exit.\0A\0A -v, --verbose Verbose output. Useful for debugging purposes.\0A -q, --quiet Quiet mode: will only log warnings and fatal errors.\0A -g, --no-gui Don't start the GUI.\0A -f, --taskfile=FILE Read task definition from FILE (default or \22-\22: stdin).\0A -t, --tracefile=FILE Output trace to FILE (default or \22-\22: stdout).\0A --no-trace Disable output of the trace.\0A --trace-flush Flush the output after writing each trace event.\0A --log-flush Flush the logging output after each write.\0A --no-log-sync Disable synchronization of logging statements \0A (otherways enabled by default).\0A When disabled, the output might turn into a mess.\0A\0A -W, --width=NUM Set window width to NUM.\0A -H, --height=NUM Set window height to NUM.\0A\0AControlling behaviour:\0A -p --protocol=PROTO Use the specified protocol for the mutex variables\0A that emulate shared resources.\0A PROTO can be NONE (default), INHERIT, or PROTECT.\0A See PTHREAD_MUTEXATTR_GETPROTOCOL(3P) for details.\0A --no-affinity Don't set the CPU affinity of the running tasks.\0A By default, tasks are forced to run on a single\0A processor (the first available is chosen): this flag\0A inhibits this constraint. Beware that this may result\0A in drastically different behaviours on multi-processor\0A environments.\0A --idle-yield If set, the idle job will invoke pthread_yield() at\0A every operation.\0A --idle-sleep If set, the idle job will invoke clock_nanosleep() with\0A a 1-ns sleep time at every operation.\0A\0A\00"
define void @help(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([2015 x i8], [2015 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [2015 x i8] c"Usage: %s [OPTION]...\0ARuns some threads and displays their schedule.\0A\0AMandatory arguments to long options are mandatory for short options too.\0A -h, --help Display this help and exit.\0A\0A -v, --verbose Verbose output. Useful for debugging purposes.\0A -q, --quiet Quiet mode: will only log warnings and fatal errors.\0A -g, --no-gui Don't start the GUI.\0A -f, --taskfile=FILE Read task definition from FILE (default or \22-\22: stdin).\0A -t, --tracefile=FILE Output trace to FILE (default or \22-\22: stdout).\0A --no-trace Disable output of the trace.\0A --trace-flush Flush the output after writing each trace event.\0A --log-flush Flush the logging output after each write.\0A --no-log-sync Disable synchronization of logging statements \0A (otherways enabled by default).\0A When disabled, the output might turn into a mess.\0A\0A -W, --width=NUM Set window width to NUM.\0A -H, --height=NUM Set window height to NUM.\0A\0AControlling behaviour:\0A -p --protocol=PROTO Use the specified protocol for the mutex variables\0A that emulate shared resources.\0A PROTO can be NONE (default), INHERIT, or PROTECT.\0A See PTHREAD_MUTEXATTR_GETPROTOCOL(3P) for details.\0A --no-affinity Don't set the CPU affinity of the running tasks.\0A By default, tasks are forced to run on a single\0A processor (the first available is chosen): this flag\0A inhibits this constraint. Beware that this may result\0A in drastically different behaviours on multi-processor\0A environments.\0A --idle-yield If set, the idle job will invoke pthread_yield() at\0A every operation.\0A --idle-sleep If set, the idle job will invoke clock_nanosleep() with\0A a 1-ns sleep time at every operation.\0A\0A\00"
define void @help(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([2015 x i8], [2015 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}