#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *);
int usage(FILE *pOut) {
  fprintf(pOut,
          "usage: md5sum [-bt] [-o list-file] file(s)\n"
          "   or: md5sum [-btwq] -c list-file(s)\n"
          "   or: md5sum [-btq] -C MD5 file\n"
          "\n"
          " -c, --check       Check MD5 and files found in the specified list "
          "file(s).\n"
          "                   The default is to compute MD5 sums of the "
          "specified files\n"
          "                   and print them to stdout in list form.\n"
          " -C, --check-file  This is followed by an MD5 sum and the file to "
          "check.\n"
          " -b, --binary      Read files in binary mode. (default)\n"
          " -t, --text        Read files in text mode.\n"
          " -p, --progress    Show progress indicator on large files.\n"
          " -o, --output      Name of the output list file. Useful with -p.\n"
          " -q, --status      Be quiet.\n"
          " -w, --warn        Ignored. Always warn, unless quiet.\n"
          " -h, --help        This usage info.\n"
          " -v, --version     Show version information and exit.\n");
  return 1;
}


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

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    %rdi,%rcx
lea    0xee5(%rip),%rdi
mov    $0x31d,%esi
mov    $0x1,%edx
call   1030 <fwrite@plt>
mov    $0x1,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [798 x i8] c"usage: md5sum [-bt] [-o list-file] file(s)\0A or: md5sum [-btwq] -c list-file(s)\0A or: md5sum [-btq] -C MD5 file\0A\0A -c, --check Check MD5 and files found in the specified list file(s).\0A The default is to compute MD5 sums of the specified files\0A and print them to stdout in list form.\0A -C, --check-file This is followed by an MD5 sum and the file to check.\0A -b, --binary Read files in binary mode. (default)\0A -t, --text Read files in text mode.\0A -p, --progress Show progress indicator on large files.\0A -o, --output Name of the output list file. Useful with -p.\0A -q, --status Be quiet.\0A -w, --warn Ignored. Always warn, unless quiet.\0A -h, --help This usage info.\0A -v, --version Show version information and exit.\0A\00"
define i32 @usage(i32* %0) {
%2 = alloca i32*
store i32* %0, i32** %2
%3 = load i32*, i32** %2
%4 = call i32 @fprintf(i32* %3, i8* getelementptr inbounds ([798 x i8], [798 x i8]* @.str, i64 0, i64 0))
ret i32 1
}

LLVM IR (-O2):
@.str = [798 x i8] c"usage: md5sum [-bt] [-o list-file] file(s)\0A or: md5sum [-btwq] -c list-file(s)\0A or: md5sum [-btq] -C MD5 file\0A\0A -c, --check Check MD5 and files found in the specified list file(s).\0A The default is to compute MD5 sums of the specified files\0A and print them to stdout in list form.\0A -C, --check-file This is followed by an MD5 sum and the file to check.\0A -b, --binary Read files in binary mode. (default)\0A -t, --text Read files in text mode.\0A -p, --progress Show progress indicator on large files.\0A -o, --output Name of the output list file. Useful with -p.\0A -q, --status Be quiet.\0A -w, --warn Ignored. Always warn, unless quiet.\0A -h, --help This usage info.\0A -v, --version Show version information and exit.\0A\00"
define i32 @usage(i32* nocapture %0) {
%2 = tail call i64 @fwrite(i8* getelementptr inbounds ([798 x i8], [798 x i8]* @.str, i64 0, i64 0), i64 797, i64 1, i32* %0)
ret i32 1
}