#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 const *const, char const *const,
                          char const *const);
void Imp_printUsage(void) {
  const char *const intro = "\tImp - the programming language.";
  const char *const usage =
      "\tcommands:"
      "\n\t	--------------------------- Launch REPL."
      "\n\t	<path> -------------------- Interpret file."
      "\n\t	-i, --index <module> ------ Include local module in registry."
      "\n\t	-u, --unindex <module> ---- Remove package from registry."
      "\n\t	-h, --help ---------------- Display this text."
      "\n\t	-v, --version ------------- Check version and stuff.";
  const char *const options =
      "\toptions:"
      "\n\t	-r, --root <path> --------- Specify package registry location."
      "\n\t	-f, --from-root ----------- Prefix given filepath with "
      "${root}/index."
      "\n\t	-d, --destination <x> ----- Specify index/<x> destination.";
  printf("\n%s\n\n%s\n\n%s\n\n", intro, usage, options);
}


x86 assembly (clang, -O0):
<Imp_printUsage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
lea    0xee1(%rip),%rax
mov    %rax,-0x8(%rbp)
lea    0xef7(%rip),%rax
mov    %rax,-0x10(%rbp)
lea    0x1034(%rip),%rax
mov    %rax,-0x18(%rbp)
lea    0x10f9(%rip),%rdi
lea    0xeb9(%rip),%rsi
lea    0xed3(%rip),%rdx
lea    0x1014(%rip),%rcx
call   1030 <printf@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Imp_printUsage>:
lea    0x1122(%rip),%rdi
lea    0xee2(%rip),%rsi
lea    0xefc(%rip),%rdx
lea    0x103d(%rip),%rcx
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [33 x i8] c"\09Imp - the programming language.\00"
@.str.1 = [328 x i8] c"\09commands:\0A\09\09--------------------------- Launch REPL.\0A\09\09<path> -------------------- Interpret file.\0A\09\09-i, --index <module> ------ Include local module in registry.\0A\09\09-u, --unindex <module> ---- Remove package from registry.\0A\09\09-h, --help ---------------- Display this text.\0A\09\09-v, --version ------------- Check version and stuff.\00"
@.str.2 = [208 x i8] c"\09options:\0A\09\09-r, --root <path> --------- Specify package registry location.\0A\09\09-f, --from-root ----------- Prefix given filepath with ${root}/index.\0A\09\09-d, --destination <x> ----- Specify index/<x> destination.\00"
@.str.3 = [14 x i8] c"\0A%s\0A\0A%s\0A\0A%s\0A\0A\00"
define void @Imp_printUsage() {
%1 = alloca i8*
%2 = alloca i8*
%3 = alloca i8*
store i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0), i8** %1
store i8* getelementptr inbounds ([328 x i8], [328 x i8]* @.str.1, i64 0, i64 0), i8** %2
store i8* getelementptr inbounds ([208 x i8], [208 x i8]* @.str.2, i64 0, i64 0), i8** %3
%4 = call i32 @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([328 x i8], [328 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([208 x i8], [208 x i8]* @.str.2, i32 0, i32 0))
ret void
}

LLVM IR (-O2):
@.str = [33 x i8] c"\09Imp - the programming language.\00"
@.str.1 = [328 x i8] c"\09commands:\0A\09\09--------------------------- Launch REPL.\0A\09\09<path> -------------------- Interpret file.\0A\09\09-i, --index <module> ------ Include local module in registry.\0A\09\09-u, --unindex <module> ---- Remove package from registry.\0A\09\09-h, --help ---------------- Display this text.\0A\09\09-v, --version ------------- Check version and stuff.\00"
@.str.2 = [208 x i8] c"\09options:\0A\09\09-r, --root <path> --------- Specify package registry location.\0A\09\09-f, --from-root ----------- Prefix given filepath with ${root}/index.\0A\09\09-d, --destination <x> ----- Specify index/<x> destination.\00"
@.str.3 = [14 x i8] c"\0A%s\0A\0A%s\0A\0A%s\0A\0A\00"
define void @Imp_printUsage() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([328 x i8], [328 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([208 x i8], [208 x i8]* @.str.2, i64 0, i64 0))
ret void
}