#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*/ fputs(char *, int /*<<< orphan*/);
int /*<<< orphan*/ stderr;
void printUsage(void) {
  fputs("Usage:  strerror [exit code]\n"
        " Prints the corrosponding POSIX-defined message for a given exit code "
        "( $? ).\n\n",
        stderr);
  fputs("  Options:\n\n     --help or --sau-help\t\tPrint this message.\n     "
        "--version or --sau-version\t\tPrint version and license "
        "information.\n\n",
        stderr);
  fputs("NOTE: Just because a program returns a code, does NOT mean the code "
        "matches the standard meaning.\n"
        "Programs are free to define their own exit codes and meanings.\n\n"
        "Standard utils are, however, likely to use the conventional exit "
        "codes.\n\n",
        stderr);
}


x86 assembly (clang, -O0):
<printUsage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ec5(%rip),%rax
mov    (%rax),%esi
lea    0xedc(%rip),%rdi
call   1030 <fputs@plt>
mov    0x2eb0(%rip),%rax
mov    (%rax),%esi
lea    0xf34(%rip),%rdi
call   1030 <fputs@plt>
mov    0x2e9b(%rip),%rax
mov    (%rax),%esi
lea    0xfa4(%rip),%rdi
call   1030 <fputs@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<printUsage>:
push   %rbx
mov    0x2ec8(%rip),%rbx
mov    (%rbx),%esi
lea    0xedf(%rip),%rdi
call   1030 <fputs@plt>
mov    (%rbx),%esi
lea    0xf3e(%rip),%rdi
call   1030 <fputs@plt>
mov    (%rbx),%esi
lea    0xfb5(%rip),%rdi
pop    %rbx
jmp    1030 <fputs@plt>

LLVM IR (-O0):
@.str = [109 x i8] c"Usage: strerror [exit code]\0A Prints the corrosponding POSIX-defined message for a given exit code ( $? ).\0A\0A\00"
@stderr = global i32 0
@.str.1 = [133 x i8] c" Options:\0A\0A --help or --sau-help\09\09Print this message.\0A --version or --sau-version\09\09Print version and license information.\0A\0A\00"
@.str.2 = [236 x i8] c"NOTE: Just because a program returns a code, does NOT mean the code matches the standard meaning.\0APrograms are free to define their own exit codes and meanings.\0A\0AStandard utils are, however, likely to use the conventional exit codes.\0A\0A\00"
define void @printUsage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fputs(i8* getelementptr inbounds ([109 x i8], [109 x i8]* @.str, i64 0, i64 0), i32 %1)
%3 = load i32, i32* @stderr
%4 = call i32 @fputs(i8* getelementptr inbounds ([133 x i8], [133 x i8]* @.str.1, i64 0, i64 0), i32 %3)
%5 = load i32, i32* @stderr
%6 = call i32 @fputs(i8* getelementptr inbounds ([236 x i8], [236 x i8]* @.str.2, i64 0, i64 0), i32 %5)
ret void
}

LLVM IR (-O2):
@.str = [109 x i8] c"Usage: strerror [exit code]\0A Prints the corrosponding POSIX-defined message for a given exit code ( $? ).\0A\0A\00"
@stderr = global i32 0
@.str.1 = [133 x i8] c" Options:\0A\0A --help or --sau-help\09\09Print this message.\0A --version or --sau-version\09\09Print version and license information.\0A\0A\00"
@.str.2 = [236 x i8] c"NOTE: Just because a program returns a code, does NOT mean the code matches the standard meaning.\0APrograms are free to define their own exit codes and meanings.\0A\0AStandard utils are, however, likely to use the conventional exit codes.\0A\0A\00"
define void @printUsage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fputs(i8* getelementptr inbounds ([109 x i8], [109 x i8]* @.str, i64 0, i64 0), i32 %1)
%3 = load i32, i32* @stderr
%4 = tail call i32 @fputs(i8* getelementptr inbounds ([133 x i8], [133 x i8]* @.str.1, i64 0, i64 0), i32 %3)
%5 = load i32, i32* @stderr
%6 = tail call i32 @fputs(i8* getelementptr inbounds ([236 x i8], [236 x i8]* @.str.2, i64 0, i64 0), i32 %5)
ret void
}