#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*/ fprintf(int /*<<< orphan*/, char *, char *);
int /*<<< orphan*/ stderr;
void print_help_string(char *prog) {
  fprintf(stderr,
          "Usage: %s [switches] [--] [programfile] [arguments]\n"
          "  -a          Convert arguments to their ASCII codepoint values and "
          "output in\n"
          "                decimal. This overrides previous -A and -c flags.\n"
          "  -A          Treat arguments as decimal numbers and convert output "
          "to ASCII\n"
          "                text, modding by 256 before doing so. This "
          "overrides previous -a\n"
          "                and -c flags.\n"
          "  -c          Convert arguments to their ASCII codepoint values and "
          "convert\n"
          "                output to ASCII text, modding by 256 before doing "
          "so. This\n"
          "                overrides previous -a and -A flags.\n"
          "  -e program  Runs specified program instead of reading from the "
          "source file.\n"
          "  -f file     Read arguments for Brain-Flak program from the "
          "specified file,\n"
          "                ignore arguments from command line.\n"
          "  -h          Display this information.\n"
          "  -v          Display interpreter version info.\n",
          prog);
}


x86 assembly (clang, -O0):
<print_help_string>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    0x2ebd(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xed0(%rip),%rsi
call   1030 <fprintf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_help_string>:
mov    %rdi,%rdx
mov    0x2ec6(%rip),%rax
mov    (%rax),%edi
lea    0xedd(%rip),%rsi
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [883 x i8] c"Usage: %s [switches] [--] [programfile] [arguments]\0A -a Convert arguments to their ASCII codepoint values and output in\0A decimal. This overrides previous -A and -c flags.\0A -A Treat arguments as decimal numbers and convert output to ASCII\0A text, modding by 256 before doing so. This overrides previous -a\0A and -c flags.\0A -c Convert arguments to their ASCII codepoint values and convert\0A output to ASCII text, modding by 256 before doing so. This\0A overrides previous -a and -A flags.\0A -e program Runs specified program instead of reading from the source file.\0A -f file Read arguments for Brain-Flak program from the specified file,\0A ignore arguments from command line.\0A -h Display this information.\0A -v Display interpreter version info.\0A\00"
define void @print_help_string(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i32, i32* @stderr
%4 = load i8*, i8** %2
%5 = call i32 @fprintf(i32 %3, i8* getelementptr inbounds ([883 x i8], [883 x i8]* @.str, i64 0, i64 0), i8* %4)
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [883 x i8] c"Usage: %s [switches] [--] [programfile] [arguments]\0A -a Convert arguments to their ASCII codepoint values and output in\0A decimal. This overrides previous -A and -c flags.\0A -A Treat arguments as decimal numbers and convert output to ASCII\0A text, modding by 256 before doing so. This overrides previous -a\0A and -c flags.\0A -c Convert arguments to their ASCII codepoint values and convert\0A output to ASCII text, modding by 256 before doing so. This\0A overrides previous -a and -A flags.\0A -e program Runs specified program instead of reading from the source file.\0A -f file Read arguments for Brain-Flak program from the specified file,\0A ignore arguments from command line.\0A -h Display this information.\0A -v Display interpreter version info.\0A\00"
define void @print_help_string(i8* %0) {
%2 = load i32, i32* @stderr
%3 = tail call i32 @fprintf(i32 %2, i8* getelementptr inbounds ([883 x i8], [883 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}