#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 *);
void help(char *progname) {
  printf("Usage: %s [options] [FILE]...\n"
         "Options:\n"
         "-h or -help             show this message and exit\n"
         "-append                 append to the output file\n"
         "-o FILE or\n"
         "-output FILE            send output to FILE (default is stdout)\n"
         "-r or --rotate          rotate letters 13 positions (rot13)\n"
         "-rNUM or\n"
         "--rotate=NUM            rotate letters NUM positions\n"
         "-truncate               truncate the output file "
         "(this is the default)\n"
         "-v or -verbose          increase the level of verbosity by 1"
         "(the default is 0)\n"
         "-vNUM or\n"
         "-verbose=NUM            set the level of verbosity to NUM\n"
         "-V or -version          print program version and exit\n"
         "\n"
         "This program reads the specified FILEs "
         "(or stdin if none are given)\n"
         "and writes their bytes to the specified output FILE "
         "(or stdout if none is\n"
         "given.) It can optionally rotate letters.\n",
         progname);
}


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 = [795 x i8] c"Usage: %s [options] [FILE]...\0AOptions:\0A-h or -help show this message and exit\0A-append append to the output file\0A-o FILE or\0A-output FILE send output to FILE (default is stdout)\0A-r or --rotate rotate letters 13 positions (rot13)\0A-rNUM or\0A--rotate=NUM rotate letters NUM positions\0A-truncate truncate the output file (this is the default)\0A-v or -verbose increase the level of verbosity by 1(the default is 0)\0A-vNUM or\0A-verbose=NUM set the level of verbosity to NUM\0A-V or -version print program version and exit\0A\0AThis program reads the specified FILEs (or stdin if none are given)\0Aand writes their bytes to the specified output FILE (or stdout if none is\0Agiven.) It can optionally rotate letters.\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 ([795 x i8], [795 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [795 x i8] c"Usage: %s [options] [FILE]...\0AOptions:\0A-h or -help show this message and exit\0A-append append to the output file\0A-o FILE or\0A-output FILE send output to FILE (default is stdout)\0A-r or --rotate rotate letters 13 positions (rot13)\0A-rNUM or\0A--rotate=NUM rotate letters NUM positions\0A-truncate truncate the output file (this is the default)\0A-v or -verbose increase the level of verbosity by 1(the default is 0)\0A-vNUM or\0A-verbose=NUM set the level of verbosity to NUM\0A-V or -version print program version and exit\0A\0AThis program reads the specified FILEs (or stdin if none are given)\0Aand writes their bytes to the specified output FILE (or stdout if none is\0Agiven.) It can optionally rotate letters.\0A\00"
define void @help(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([795 x i8], [795 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}