#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*/ get_da_func(int /*<<< orphan*/ *);
int /*<<< orphan*/ printf(char *);
void help_menu() {
  printf("deglupta: Password mutator so serious it may break your hard drive!\n"
         "\t-h:                 help menu\n"
         "\t-i <file>:          input file (required)\n"
         "\t-o <file>:          output file to append to (default: stdout)\n"
         "\t-r <pass>:          resume output after \"pass\"\n"
         "\t-f  <str>:          list of functions to Travers, (default: "
         "3,1,2,4,6,6,5)\n"
         "\t-m <num>:           aprox max output size (default: 4294967296 ie: "
         "4G)\n"
         "\t                    Will be off by at most the length of the "
         "current password\n"
         "\t                    -m -1 results in: 18446744073709551615 byte "
         "file size limit\n"
         "\n");
  get_da_func(NULL);
  exit(1);
}


x86 assembly (clang, -O0):
<help_menu>:
push   %rbp
mov    %rsp,%rbp
lea    0xec5(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
mov    %eax,%edi
call   1040 <get_da_func@plt>
mov    $0x1,%edi
call   1050 <exit@plt>

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

LLVM IR (-O0):
@.str = [564 x i8] c"deglupta: Password mutator so serious it may break your hard drive!\0A\09-h: help menu\0A\09-i <file>: input file (required)\0A\09-o <file>: output file to append to (default: stdout)\0A\09-r <pass>: resume output after \22pass\22\0A\09-f <str>: list of functions to Travers, (default: 3,1,2,4,6,6,5)\0A\09-m <num>: aprox max output size (default: 4294967296 ie: 4G)\0A\09 Will be off by at most the length of the current password\0A\09 -m -1 results in: 18446744073709551615 byte file size limit\0A\0A\00"
define void @help_menu() {
%1 = call i32 @printf(i8* getelementptr inbounds ([564 x i8], [564 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @get_da_func(i32* null)
%3 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@str = [563 x i8] c"deglupta: Password mutator so serious it may break your hard drive!\0A\09-h: help menu\0A\09-i <file>: input file (required)\0A\09-o <file>: output file to append to (default: stdout)\0A\09-r <pass>: resume output after \22pass\22\0A\09-f <str>: list of functions to Travers, (default: 3,1,2,4,6,6,5)\0A\09-m <num>: aprox max output size (default: 4294967296 ie: 4G)\0A\09 Will be off by at most the length of the current password\0A\09 -m -1 results in: 18446744073709551615 byte file size limit\0A\00"
define void @help_menu() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([563 x i8], [563 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @get_da_func(i32* null)
%3 = tail call i32 @exit(i32 1)
unreachable
}