#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 *, char const *,
                           char const *, char const *);
int usage(FILE *pOut, const char *argv0) {
  fprintf(
      pOut,
      "usage: %s [-[rwa+tb]<fd> <file>] [-c<fd>] [-Z] [-E <var=val>] [-C "
      "<dir>] [--wcc-brain-damage] -- <program> [args]\n"
      "   or: %s --help\n"
      "   or: %s --version\n"
      "\n"
      "The rwa+tb is like for fopen, if not specified it defaults to w+.\n"
      "The <fd> is either a number or an alias for the standard handles:\n"
      "   i = stdin\n"
      "   o = stdout\n"
      "   e = stderr\n"
      "\n"
      "The -c switch will close the specified file descriptor.\n"
      "\n"
      "The -Z switch zaps the environment.\n"
      "\n"
      "The -E switch is for making changes to the environment in a putenv\n"
      "fashion.\n"
      "\n"
      "The -C switch is for changing the current directory. This takes "
      "immediate\n"
      "effect, so be careful where you put it.\n"
      "\n"
      "The --wcc-brain-damage switch is to work around wcc and wcc386 (Open "
      "Watcom)\n"
      "not following normal quoting conventions on Windows, OS/2, and DOS.\n"
      "\n"
      "This command was originally just a quick hack to avoid invoking the "
      "shell\n"
      "on Windows (cygwin) where forking is very expensive and has exhibited\n"
      "stability issues on SMP machines.  It has since grown into something "
      "like\n"
      "/usr/bin/env on steroids.\n",
      argv0, argv0, argv0);
  return 1;
}


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

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    %rsi,%rcx
lea    0xee5(%rip),%rsi
mov    %rcx,%rdx
mov    %rcx,%r8
call   1030 <fprintf@plt>
mov    $0x1,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [1003 x i8] c"usage: %s [-[rwa+tb]<fd> <file>] [-c<fd>] [-Z] [-E <var=val>] [-C <dir>] [--wcc-brain-damage] -- <program> [args]\0A or: %s --help\0A or: %s --version\0A\0AThe rwa+tb is like for fopen, if not specified it defaults to w+.\0AThe <fd> is either a number or an alias for the standard handles:\0A i = stdin\0A o = stdout\0A e = stderr\0A\0AThe -c switch will close the specified file descriptor.\0A\0AThe -Z switch zaps the environment.\0A\0AThe -E switch is for making changes to the environment in a putenv\0Afashion.\0A\0AThe -C switch is for changing the current directory. This takes immediate\0Aeffect, so be careful where you put it.\0A\0AThe --wcc-brain-damage switch is to work around wcc and wcc386 (Open Watcom)\0Anot following normal quoting conventions on Windows, OS/2, and DOS.\0A\0AThis command was originally just a quick hack to avoid invoking the shell\0Aon Windows (cygwin) where forking is very expensive and has exhibited\0Astability issues on SMP machines. It has since grown into something like\0A/usr/bin/env on steroids.\0A\00"
define i32 @usage(i32* %0, i8* %1) {
%3 = alloca i32*
%4 = alloca i8*
store i32* %0, i32** %3
store i8* %1, i8** %4
%5 = load i32*, i32** %3
%6 = load i8*, i8** %4
%7 = load i8*, i8** %4
%8 = load i8*, i8** %4
%9 = call i32 @fprintf(i32* %5, i8* getelementptr inbounds ([1003 x i8], [1003 x i8]* @.str, i64 0, i64 0), i8* %6, i8* %7, i8* %8)
ret i32 1
}

LLVM IR (-O2):
@.str = [1003 x i8] c"usage: %s [-[rwa+tb]<fd> <file>] [-c<fd>] [-Z] [-E <var=val>] [-C <dir>] [--wcc-brain-damage] -- <program> [args]\0A or: %s --help\0A or: %s --version\0A\0AThe rwa+tb is like for fopen, if not specified it defaults to w+.\0AThe <fd> is either a number or an alias for the standard handles:\0A i = stdin\0A o = stdout\0A e = stderr\0A\0AThe -c switch will close the specified file descriptor.\0A\0AThe -Z switch zaps the environment.\0A\0AThe -E switch is for making changes to the environment in a putenv\0Afashion.\0A\0AThe -C switch is for changing the current directory. This takes immediate\0Aeffect, so be careful where you put it.\0A\0AThe --wcc-brain-damage switch is to work around wcc and wcc386 (Open Watcom)\0Anot following normal quoting conventions on Windows, OS/2, and DOS.\0A\0AThis command was originally just a quick hack to avoid invoking the shell\0Aon Windows (cygwin) where forking is very expensive and has exhibited\0Astability issues on SMP machines. It has since grown into something like\0A/usr/bin/env on steroids.\0A\00"
define i32 @usage(i32* nocapture %0, i8* %1) {
%3 = tail call i32 @fprintf(i32* %0, i8* getelementptr inbounds ([1003 x i8], [1003 x i8]* @.str, i64 0, i64 0), i8* %1, i8* %1, i8* %1)
ret i32 1
}