#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 /*<<< orphan*/);
int /*<<< orphan*/ printf(char *);
void help() {
  printf("Usage: vpp [-DCstvh] OriginalFile ConvertedFile\n"
         "Options:\n"
         "-D, --define=<label>\t\t Define <label>\n"
         "-C, --comment=<char>\t\t Comment out symbol character (default:'-')\n"
         "-s, --silent\t\t\t Print no message\n"
         "-t, --template\t\t\t Create a template file\n"
         "-v, --version\t\t\t Print version\n"
         "-h, --help\t\t\t Print help\n"
         "---------------------------------------------------------------------"
         "---------\n"
         "Preprocessor directives\t\t Effect\n"
         "---------------------------------------------------------------------"
         "---------\n"
         "/* ... */\t\t\t Comment out from /* to */\n"
         "#include \""
         "\x1b[1m"
         "FILENAME"
         "\x1b[0m"
         "\"\t\t Include another file whose file name is "
         "\x1b[1m"
         "FILENAME"
         "\x1b[0m"
         " here\n"
         "#define "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         "\t\t\t Define "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         " for #ifdef, #ifndef and #elif\n"
         "#define "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         " \""
         "\x1b[1m"
         "STRING"
         "\x1b[0m"
         "\"\t\t Replace "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         " which must be a single word, by "
         "\x1b[1m"
         "STRING"
         "\x1b[0m"
         "\n"
         "#rand "
         "\x1b[1m"
         "LABEL FORMAT"
         "\x1b[0m"
         "\t\t Replace "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         " by generated random characters according to "
         "\x1b[1m"
         "FORMAT"
         "\x1b[0m"
         "\n"
         "                       \t\t FORMAT has an alphabet for radix and a "
         "digit number to generating\n"
         "                       \t\t The radix character can be set by "
         "'B'(bin), 'D'(dec), 'H'(hex) and 'A'(alphabet)\n"
         "#undef "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         "\t\t\t Undefine "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         " by #define and #rand\n"
         "#ifdef "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         "\t\t\t If "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         " is defined, then following program is valid until #elif, #else or "
         "#endif (Depth of nest is less than 30)\n"
         "#ifndef "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         "\t\t\t If "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         " is not defined, then following program is valid until #elif, #else "
         "or #endif\n"
         "#elif\t\t\t\t Equal to describing #else and #ifdef\n"
         "#else\t\t\t\t Reverse condition for #ifdef, #ifndef and #elif\n"
         "#endif\t\t\t\t Terminator for #ifdef, #ifndef, #elif and #else\n"
         "#for "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         "\t\t\t Duplicate program code until #endfor "
         "\x1b[1m"
         "LABEL"
         "\x1b[0m"
         " times (Can't nest)\n"
         "#endfor\t\t\t\t Terminator for #for\n"
         "#message \""
         "\x1b[1m"
         "STRING"
         "\x1b[0m"
         "\"\t\t Print "
         "\x1b[1m"
         "STRING"
         "\x1b[0m"
         " to the standard output stream\n");
  exit(0);
}


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

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

LLVM IR (-O0):
@.str = [1809 x i8] c"Usage: vpp [-DCstvh] OriginalFile ConvertedFile\0AOptions:\0A-D, --define=<label>\09\09 Define <label>\0A-C, --comment=<char>\09\09 Comment out symbol character (default:'-')\0A-s, --silent\09\09\09 Print no message\0A-t, --template\09\09\09 Create a template file\0A-v, --version\09\09\09 Print version\0A-h, --help\09\09\09 Print help\0A------------------------------------------------------------------------------\0APreprocessor directives\09\09 Effect\0A------------------------------------------------------------------------------\0A/* ... */\09\09\09 Comment out from /* to */\0A#include \22\1B[1mFILENAME\1B[0m\22\09\09 Include another file whose file name is \1B[1mFILENAME\1B[0m here\0A#define \1B[1mLABEL\1B[0m\09\09\09 Define \1B[1mLABEL\1B[0m for #ifdef, #ifndef and #elif\0A#define \1B[1mLABEL\1B[0m \22\1B[1mSTRING\1B[0m\22\09\09 Replace \1B[1mLABEL\1B[0m which must be a single word, by \1B[1mSTRING\1B[0m\0A#rand \1B[1mLABEL FORMAT\1B[0m\09\09 Replace \1B[1mLABEL\1B[0m by generated random characters according to \1B[1mFORMAT\1B[0m\0A \09\09 FORMAT has an alphabet for radix and a digit number to generating\0A \09\09 The radix character can be set by 'B'(bin), 'D'(dec), 'H'(hex) and 'A'(alphabet)\0A#undef \1B[1mLABEL\1B[0m\09\09\09 Undefine \1B[1mLABEL\1B[0m by #define and #rand\0A#ifdef \1B[1mLABEL\1B[0m\09\09\09 If \1B[1mLABEL\1B[0m is defined, then following program is valid until #elif, #else or #endif (Depth of nest is less than 30)\0A#ifndef \1B[1mLABEL\1B[0m\09\09\09 If \1B[1mLABEL\1B[0m is not defined, then following program is valid until #elif, #else or #endif\0A#elif\09\09\09\09 Equal to describing #else and #ifdef\0A#else\09\09\09\09 Reverse condition for #ifdef, #ifndef and #elif\0A#endif\09\09\09\09 Terminator for #ifdef, #ifndef, #elif and #else\0A#for \1B[1mLABEL\1B[0m\09\09\09 Duplicate program code until #endfor \1B[1mLABEL\1B[0m times (Can't nest)\0A#endfor\09\09\09\09 Terminator for #for\0A#message \22\1B[1mSTRING\1B[0m\22\09\09 Print \1B[1mSTRING\1B[0m to the standard output stream\0A\00"
define void @help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([1809 x i8], [1809 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@str = [1808 x i8] c"Usage: vpp [-DCstvh] OriginalFile ConvertedFile\0AOptions:\0A-D, --define=<label>\09\09 Define <label>\0A-C, --comment=<char>\09\09 Comment out symbol character (default:'-')\0A-s, --silent\09\09\09 Print no message\0A-t, --template\09\09\09 Create a template file\0A-v, --version\09\09\09 Print version\0A-h, --help\09\09\09 Print help\0A------------------------------------------------------------------------------\0APreprocessor directives\09\09 Effect\0A------------------------------------------------------------------------------\0A/* ... */\09\09\09 Comment out from /* to */\0A#include \22\1B[1mFILENAME\1B[0m\22\09\09 Include another file whose file name is \1B[1mFILENAME\1B[0m here\0A#define \1B[1mLABEL\1B[0m\09\09\09 Define \1B[1mLABEL\1B[0m for #ifdef, #ifndef and #elif\0A#define \1B[1mLABEL\1B[0m \22\1B[1mSTRING\1B[0m\22\09\09 Replace \1B[1mLABEL\1B[0m which must be a single word, by \1B[1mSTRING\1B[0m\0A#rand \1B[1mLABEL FORMAT\1B[0m\09\09 Replace \1B[1mLABEL\1B[0m by generated random characters according to \1B[1mFORMAT\1B[0m\0A \09\09 FORMAT has an alphabet for radix and a digit number to generating\0A \09\09 The radix character can be set by 'B'(bin), 'D'(dec), 'H'(hex) and 'A'(alphabet)\0A#undef \1B[1mLABEL\1B[0m\09\09\09 Undefine \1B[1mLABEL\1B[0m by #define and #rand\0A#ifdef \1B[1mLABEL\1B[0m\09\09\09 If \1B[1mLABEL\1B[0m is defined, then following program is valid until #elif, #else or #endif (Depth of nest is less than 30)\0A#ifndef \1B[1mLABEL\1B[0m\09\09\09 If \1B[1mLABEL\1B[0m is not defined, then following program is valid until #elif, #else or #endif\0A#elif\09\09\09\09 Equal to describing #else and #ifdef\0A#else\09\09\09\09 Reverse condition for #ifdef, #ifndef and #elif\0A#endif\09\09\09\09 Terminator for #ifdef, #ifndef, #elif and #else\0A#for \1B[1mLABEL\1B[0m\09\09\09 Duplicate program code until #endfor \1B[1mLABEL\1B[0m times (Can't nest)\0A#endfor\09\09\09\09 Terminator for #for\0A#message \22\1B[1mSTRING\1B[0m\22\09\09 Print \1B[1mSTRING\1B[0m to the standard output stream\00"
define void @help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1808 x i8], [1808 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @exit(i32 0)
unreachable
}