#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*/ printf(char *, char *);
void printHelp(char *progname) {
  printf("Usage: %s -f filename [OPTIONS]\n"
         "OPTIONS:\n"
         "-b, --bench\t\tperform benchmark and exit\n"
         "-c, --charset=STRING\tUse the characters in STRING as charset\n"
         "-w, --wordlist=FILE\tUse FILE as source of passwords to try\n"
         "-n, --minpw=INTEGER\tSkip trying passwords shorter than this\n"
         "-m, --maxpw=INTEGER\tStop when reaching this passwordlength\n"
         "-l, --loadState=FILE\tContinue from the state saved in FILENAME\n"
         "-o, --owner\t\tWork with the ownerpassword\n"
         "-u, --user\t\tWork with the userpassword (default)\n"
         "-p, --password=STRING\tGive userpassword to speed up breaking\n"
         "\t\t\townerpassword (implies -o)\n"
         "-q, --quiet\t\tRun quietly\n"
         "-s, --permutate\t\tTry permutating the passwords (currently only\n"
         "\t\t\tsupports switching first character to uppercase)\n"
         "-v, --version\t\tPrint version and exit\n",
         progname);
}


x86 assembly (clang, -O0):
<printHelp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<printHelp>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [743 x i8] c"Usage: %s -f filename [OPTIONS]\0AOPTIONS:\0A-b, --bench\09\09perform benchmark and exit\0A-c, --charset=STRING\09Use the characters in STRING as charset\0A-w, --wordlist=FILE\09Use FILE as source of passwords to try\0A-n, --minpw=INTEGER\09Skip trying passwords shorter than this\0A-m, --maxpw=INTEGER\09Stop when reaching this passwordlength\0A-l, --loadState=FILE\09Continue from the state saved in FILENAME\0A-o, --owner\09\09Work with the ownerpassword\0A-u, --user\09\09Work with the userpassword (default)\0A-p, --password=STRING\09Give userpassword to speed up breaking\0A\09\09\09ownerpassword (implies -o)\0A-q, --quiet\09\09Run quietly\0A-s, --permutate\09\09Try permutating the passwords (currently only\0A\09\09\09supports switching first character to uppercase)\0A-v, --version\09\09Print version and exit\0A\00"
define void @printHelp(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([743 x i8], [743 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [743 x i8] c"Usage: %s -f filename [OPTIONS]\0AOPTIONS:\0A-b, --bench\09\09perform benchmark and exit\0A-c, --charset=STRING\09Use the characters in STRING as charset\0A-w, --wordlist=FILE\09Use FILE as source of passwords to try\0A-n, --minpw=INTEGER\09Skip trying passwords shorter than this\0A-m, --maxpw=INTEGER\09Stop when reaching this passwordlength\0A-l, --loadState=FILE\09Continue from the state saved in FILENAME\0A-o, --owner\09\09Work with the ownerpassword\0A-u, --user\09\09Work with the userpassword (default)\0A-p, --password=STRING\09Give userpassword to speed up breaking\0A\09\09\09ownerpassword (implies -o)\0A-q, --quiet\09\09Run quietly\0A-s, --permutate\09\09Try permutating the passwords (currently only\0A\09\09\09supports switching first character to uppercase)\0A-v, --version\09\09Print version and exit\0A\00"
define void @printHelp(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([743 x i8], [743 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}