#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: huffpuff [OPTION...] FILE\n"
         "huffpuff encodes strings using Huffman compression.\n\n"
         "Options:\n\n"
         "  --character-map=FILE            Transform characters according to "
         "the rules in FILE before encoding\n"
         "  --table-output=FILE             Store Huffman decoder table "
         "definition in FILE\n"
         "  --data-output=FILE              Store Huffman string data "
         "definition in FILE\n"
         "  --table-label=LABEL             Create symbolic label LABEL for "
         "decoder table definition\n"
         "  --node-label-prefix=PREFIX      Prefix symbolic labels in decoder "
         "table definition by PREFIX\n"
         "  --string-label-prefix=PREFIX    Prefix symbolic labels in data "
         "definition by PREFIX\n"
         "  --generate-string-table         Generate string pointer table\n"
         "  --string-table-label=LABEL      Create symbolic label LABEL for "
         "string pointer table definition\n"
         "  --append-byte=VALUE             Append VALUE to every string "
         "before encoding\n"
         "  --ignore-case                   Convert characters to lower-case "
         "before processing\n"
         "  --verbose                       Print progress information to "
         "standard output\n"
         "  --help                          Give this help list\n"
         "  --usage                         Give a short usage message\n"
         "  --version                       Print program version\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 = [1208 x i8] c"Usage: huffpuff [OPTION...] FILE\0Ahuffpuff encodes strings using Huffman compression.\0A\0AOptions:\0A\0A --character-map=FILE Transform characters according to the rules in FILE before encoding\0A --table-output=FILE Store Huffman decoder table definition in FILE\0A --data-output=FILE Store Huffman string data definition in FILE\0A --table-label=LABEL Create symbolic label LABEL for decoder table definition\0A --node-label-prefix=PREFIX Prefix symbolic labels in decoder table definition by PREFIX\0A --string-label-prefix=PREFIX Prefix symbolic labels in data definition by PREFIX\0A --generate-string-table Generate string pointer table\0A --string-table-label=LABEL Create symbolic label LABEL for string pointer table definition\0A --append-byte=VALUE Append VALUE to every string before encoding\0A --ignore-case Convert characters to lower-case before processing\0A --verbose Print progress information to standard output\0A --help Give this help list\0A --usage Give a short usage message\0A --version Print program version\0A\00"
define void @help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([1208 x i8], [1208 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@str = [1207 x i8] c"Usage: huffpuff [OPTION...] FILE\0Ahuffpuff encodes strings using Huffman compression.\0A\0AOptions:\0A\0A --character-map=FILE Transform characters according to the rules in FILE before encoding\0A --table-output=FILE Store Huffman decoder table definition in FILE\0A --data-output=FILE Store Huffman string data definition in FILE\0A --table-label=LABEL Create symbolic label LABEL for decoder table definition\0A --node-label-prefix=PREFIX Prefix symbolic labels in decoder table definition by PREFIX\0A --string-label-prefix=PREFIX Prefix symbolic labels in data definition by PREFIX\0A --generate-string-table Generate string pointer table\0A --string-table-label=LABEL Create symbolic label LABEL for string pointer table definition\0A --append-byte=VALUE Append VALUE to every string before encoding\0A --ignore-case Convert characters to lower-case before processing\0A --verbose Print progress information to standard output\0A --help Give this help list\0A --usage Give a short usage message\0A --version Print program version\00"
define void @help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1207 x i8], [1207 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @exit(i32 0)
unreachable
}