#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*/ exit(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char const *const, char *,
                           char *, char *);
int /*<<< orphan*/ stderr;
void usage(void) {
  static const char *const format =
      "%s %s: extract FreeType API names from header files\n\n"
      "this program is used to extract the list of public FreeType API\n"
      "functions. It receives the list of header files as argument and\n"
      "generates a sorted list of unique identifiers\n\n"
      "usage: %s header1 [options] [header2 ...]\n\n"
      "options:   -      : parse the content of stdin, ignore arguments\n"
      "           -v     : verbose mode, output sent to standard error\n"
      "           -oFILE : write output to FILE instead of standard output\n"
      "           -dNAME : indicate DLL file name, 'freetype.dll' by default\n"
      "           -w     : output .DEF file for Visual C++ and Mingw\n"
      "           -wB    : output .DEF file for Borland C++\n"
      "           -wW    : output Watcom Linker Response File\n"
      "           -wN    : output NetWare Import File\n"
      "\n";
  fprintf(stderr, format, "apinames", "0.2", "apinames");
  exit(1);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2eb5(%rip),%rax
mov    (%rax),%edi
lea    0xecc(%rip),%rsi
lea    0x11ba(%rip),%r8
lea    0x11bc(%rip),%rcx
mov    %r8,%rdx
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    0x2eb8(%rip),%rax
mov    (%rax),%edi
lea    0xecf(%rip),%rsi
lea    0x11c6(%rip),%rcx
lea    0x11b6(%rip),%rdx
mov    %rdx,%r8
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@usage.format = internal constant i8* getelementptr inbounds ([757 x i8], [757 x i8]* @.str, i32 0, i32 0)
@.str = [757 x i8] c"%s %s: extract FreeType API names from header files\0A\0Athis program is used to extract the list of public FreeType API\0Afunctions. It receives the list of header files as argument and\0Agenerates a sorted list of unique identifiers\0A\0Ausage: %s header1 [options] [header2 ...]\0A\0Aoptions: - : parse the content of stdin, ignore arguments\0A -v : verbose mode, output sent to standard error\0A -oFILE : write output to FILE instead of standard output\0A -dNAME : indicate DLL file name, 'freetype.dll' by default\0A -w : output .DEF file for Visual C++ and Mingw\0A -wB : output .DEF file for Borland C++\0A -wW : output Watcom Linker Response File\0A -wN : output NetWare Import File\0A\0A\00"
@stderr = global i32 0
@.str.1 = [9 x i8] c"apinames\00"
@.str.2 = [4 x i8] c"0.2\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([757 x i8], [757 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@.str = [757 x i8] c"%s %s: extract FreeType API names from header files\0A\0Athis program is used to extract the list of public FreeType API\0Afunctions. It receives the list of header files as argument and\0Agenerates a sorted list of unique identifiers\0A\0Ausage: %s header1 [options] [header2 ...]\0A\0Aoptions: - : parse the content of stdin, ignore arguments\0A -v : verbose mode, output sent to standard error\0A -oFILE : write output to FILE instead of standard output\0A -dNAME : indicate DLL file name, 'freetype.dll' by default\0A -w : output .DEF file for Visual C++ and Mingw\0A -wB : output .DEF file for Borland C++\0A -wW : output Watcom Linker Response File\0A -wN : output NetWare Import File\0A\0A\00"
@stderr = global i32 0
@.str.1 = [9 x i8] c"apinames\00"
@.str.2 = [4 x i8] c"0.2\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([757 x i8], [757 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @exit(i32 1)
unreachable
}