#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 *);
int /*<<< orphan*/ puts(char *);
void printUsage(const char *command) {
  printf("Usage: %s [OPTION] [-i file.IFF] [-o file.IFF] file.ACBM\n\n",
         command);
  puts("The command `acbm2ilbm' converts all ACBM images inside an IFF file to "
       "ILBM\n"
       "images.\n\n"
       "This command only converts uncompressed ACBM forms. Compressed forms "
       "are\n"
       "automatically skipped.\n\n"
       "If needed, these forms can be uncompressed by running the `ilbmpack' "
       "command\n"
       "first, redirecting its output to the standard output and let "
       "`acbm2ilbm' read\n"
       "from the standard input.\n");
  puts("Options:\n\n"
       "  -i, --input-file=FILE   Specifies the input IFF file. If no input "
       "file is\n"
       "                          given, then data will be read from the "
       "standard input\n"
       "  -o, --output-file=FILE  Specifies the output IFF file. If no output "
       "file is\n"
       "                          given, then data will be written to the "
       "standard\n"
       "                          output.\n"
       "  -h, --help              Shows the usage of this command to the user\n"
       "  -v, --version           Shows the version of this command to the "
       "user");
}


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

x86 assembly (clang, -O2):
<printUsage>:
push   %rax
mov    %rdi,%rsi
lea    0xed5(%rip),%rdi
call   1040 <printf@plt>
lea    0xf04(%rip),%rdi
call   1030 <puts@plt>
lea    0x1063(%rip),%rdi
pop    %rax
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [59 x i8] c"Usage: %s [OPTION] [-i file.IFF] [-o file.IFF] file.ACBM\0A\0A\00"
@.str.1 = [363 x i8] c"The command `acbm2ilbm' converts all ACBM images inside an IFF file to ILBM\0Aimages.\0A\0AThis command only converts uncompressed ACBM forms. Compressed forms are\0Aautomatically skipped.\0A\0AIf needed, these forms can be uncompressed by running the `ilbmpack' command\0Afirst, redirecting its output to the standard output and let `acbm2ilbm' read\0Afrom the standard input.\0A\00"
@.str.2 = [495 x i8] c"Options:\0A\0A -i, --input-file=FILE Specifies the input IFF file. If no input file is\0A given, then data will be read from the standard input\0A -o, --output-file=FILE Specifies the output IFF file. If no output file is\0A given, then data will be written to the standard\0A output.\0A -h, --help Shows the usage of this command to the user\0A -v, --version Shows the version of this command to the user\00"
define void @printUsage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str, i64 0, i64 0), i8* %3)
%5 = call i32 @puts(i8* getelementptr inbounds ([363 x i8], [363 x i8]* @.str.1, i64 0, i64 0))
%6 = call i32 @puts(i8* getelementptr inbounds ([495 x i8], [495 x i8]* @.str.2, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [59 x i8] c"Usage: %s [OPTION] [-i file.IFF] [-o file.IFF] file.ACBM\0A\0A\00"
@.str.1 = [363 x i8] c"The command `acbm2ilbm' converts all ACBM images inside an IFF file to ILBM\0Aimages.\0A\0AThis command only converts uncompressed ACBM forms. Compressed forms are\0Aautomatically skipped.\0A\0AIf needed, these forms can be uncompressed by running the `ilbmpack' command\0Afirst, redirecting its output to the standard output and let `acbm2ilbm' read\0Afrom the standard input.\0A\00"
@.str.2 = [495 x i8] c"Options:\0A\0A -i, --input-file=FILE Specifies the input IFF file. If no input file is\0A given, then data will be read from the standard input\0A -o, --output-file=FILE Specifies the output IFF file. If no output file is\0A given, then data will be written to the standard\0A output.\0A -h, --help Shows the usage of this command to the user\0A -v, --version Shows the version of this command to the user\00"
define void @printUsage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str, i64 0, i64 0), i8* %0)
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([363 x i8], [363 x i8]* @.str.1, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([495 x i8], [495 x i8]* @.str.2, i64 0, i64 0))
ret void
}