#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*/ exit(int);
int /*<<< orphan*/ printf(char *);
void usage(void) {
  printf("Usage: flat [options] GRAMMAR INPUT\n"
         "\n"
         "Options:\n"
         "\n"
         "  -b, --builtin   Use the built-in grammar instead of a "
         "user-supplied one\n"
         "  -e, --exprtree  Print expressions as trees (only relevant if -g "
         "also given)\n"
         "  -g, --grammar   Don't parse input; just show the grammar that "
         "would be used\n"
         "  -h, --help      Print this message\n"
         "\n"
         "Arguments:\n"
         "\n"
         "  GRAMMAR         A file written in the Flat syntax that defines the "
         "syntax of\n"
         "                  the language to be parsed. Should be omitted if -b "
         "is used.\n"
         "  INPUT           A file written in the syntax of the language "
         "defined by\n"
         "                  GRAMMAR. Should be omitted if -s is used.\n"
         "\n"
         "Examples:\n"
         "\n"
         "  flat -b -s      Print out the built-in grammar\n"
         "  flat arithmetic.flat test.exp\n"
         "                  Parse the file test.exp using the language defined "
         "in\n"
         "                  arithmetic.flat\n");
  exit(1);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
lea    0xed8(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@.str = [818 x i8] c"Usage: flat [options] GRAMMAR INPUT\0A\0AOptions:\0A\0A -b, --builtin Use the built-in grammar instead of a user-supplied one\0A -e, --exprtree Print expressions as trees (only relevant if -g also given)\0A -g, --grammar Don't parse input; just show the grammar that would be used\0A -h, --help Print this message\0A\0AArguments:\0A\0A GRAMMAR A file written in the Flat syntax that defines the syntax of\0A the language to be parsed. Should be omitted if -b is used.\0A INPUT A file written in the syntax of the language defined by\0A GRAMMAR. Should be omitted if -s is used.\0A\0AExamples:\0A\0A flat -b -s Print out the built-in grammar\0A flat arithmetic.flat test.exp\0A Parse the file test.exp using the language defined in\0A arithmetic.flat\0A\00"
define void @usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([818 x i8], [818 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@str = [817 x i8] c"Usage: flat [options] GRAMMAR INPUT\0A\0AOptions:\0A\0A -b, --builtin Use the built-in grammar instead of a user-supplied one\0A -e, --exprtree Print expressions as trees (only relevant if -g also given)\0A -g, --grammar Don't parse input; just show the grammar that would be used\0A -h, --help Print this message\0A\0AArguments:\0A\0A GRAMMAR A file written in the Flat syntax that defines the syntax of\0A the language to be parsed. Should be omitted if -b is used.\0A INPUT A file written in the syntax of the language defined by\0A GRAMMAR. Should be omitted if -s is used.\0A\0AExamples:\0A\0A flat -b -s Print out the built-in grammar\0A flat arithmetic.flat test.exp\0A Parse the file test.exp using the language defined in\0A arithmetic.flat\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([817 x i8], [817 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @exit(i32 1)
unreachable
}