#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*/ puts(char *);
void help(void) {
  puts("icarus [command] [options]\n\n  command:\n    lex                      "
       "      : lex input file and output token from lexer\n    parse          "
       "                : parse input file and output parser view\n    check   "
       "                       : perform static analysis on input file\n    "
       "transform                      : transform input file\n    2c          "
       "                   : run 2c - compiles icarus code to C\n    pancake   "
       "                     : run pancake - the icarus interpreter\n    "
       "<default>                      : defaults to `pancake` if a command is "
       "omitted\n\n  options:\n    --debug                        : enable "
       "icarus internal debug output\n    --help,     -h                 : "
       "print this help message\n    --input,    -i     file        : input "
       "filename\n    --output,   -o     file        : output filename\n    "
       "--bytecode         file        : provide input file containing pancake "
       "bytecode - only valid with pancake backend\n    --version              "
       "        : print version of icarus\n    <default>                      "
       ": an argument will default to being an `input` file if the preceding "
       "option is omitted\n\n  examples:\n    icarus foo.ic                  # "
       "run file `foo.ic` through `pancake`\n    icarus check --input foo.ic   "
       " # perform static analysis on file `foo.ic`\n    icarus 2c -i foo.ic "
       "-o foo.c   # compile `foo.ic` to c and output that in new file "
       "`foo.c`\n    icarus pancake foo.ic --debug  # run `foo.ic` through "
       "pancake with debug output\n    icarus -h                      # print "
       "this help page\n\n");
}


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

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

LLVM IR (-O0):
@.str = [1513 x i8] c"icarus [command] [options]\0A\0A command:\0A lex : lex input file and output token from lexer\0A parse : parse input file and output parser view\0A check : perform static analysis on input file\0A transform : transform input file\0A 2c : run 2c - compiles icarus code to C\0A pancake : run pancake - the icarus interpreter\0A <default> : defaults to `pancake` if a command is omitted\0A\0A options:\0A --debug : enable icarus internal debug output\0A --help, -h : print this help message\0A --input, -i file : input filename\0A --output, -o file : output filename\0A --bytecode file : provide input file containing pancake bytecode - only valid with pancake backend\0A --version : print version of icarus\0A <default> : an argument will default to being an `input` file if the preceding option is omitted\0A\0A examples:\0A icarus foo.ic # run file `foo.ic` through `pancake`\0A icarus check --input foo.ic # perform static analysis on file `foo.ic`\0A icarus 2c -i foo.ic -o foo.c # compile `foo.ic` to c and output that in new file `foo.c`\0A icarus pancake foo.ic --debug # run `foo.ic` through pancake with debug output\0A icarus -h # print this help page\0A\0A\00"
define void @help() {
%1 = call i32 @puts(i8* getelementptr inbounds ([1513 x i8], [1513 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [1513 x i8] c"icarus [command] [options]\0A\0A command:\0A lex : lex input file and output token from lexer\0A parse : parse input file and output parser view\0A check : perform static analysis on input file\0A transform : transform input file\0A 2c : run 2c - compiles icarus code to C\0A pancake : run pancake - the icarus interpreter\0A <default> : defaults to `pancake` if a command is omitted\0A\0A options:\0A --debug : enable icarus internal debug output\0A --help, -h : print this help message\0A --input, -i file : input filename\0A --output, -o file : output filename\0A --bytecode file : provide input file containing pancake bytecode - only valid with pancake backend\0A --version : print version of icarus\0A <default> : an argument will default to being an `input` file if the preceding option is omitted\0A\0A examples:\0A icarus foo.ic # run file `foo.ic` through `pancake`\0A icarus check --input foo.ic # perform static analysis on file `foo.ic`\0A icarus 2c -i foo.ic -o foo.c # compile `foo.ic` to c and output that in new file `foo.c`\0A icarus pancake foo.ic --debug # run `foo.ic` through pancake with debug output\0A icarus -h # print this help page\0A\0A\00"
define void @help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1513 x i8], [1513 x i8]* @.str, i64 0, i64 0))
ret void
}