#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*/ print_info(char *, int /*<<< orphan*/);
void usage(void) {
  char *help[] = {
      "Usage: convbdf [options] [input-files]\n",
      "       convbdf [options] [-o output-file] [single-input-file]\n",
      "Options:\n",
      "    -c     Convert .bdf to .c source file\n",
      "    -h     Convert .bdf to .h header file (to create sysfont.h)\n",
      "    -f     Convert .bdf to .fnt font file\n",
      "    -s N   Start output at character encodings >= N\n",
      "    -l N   Limit output to character encodings <= N\n",
      "    -n     Don't generate bitmaps as comments in .c file\n",
      "    -a N[%][!] Allow the ascent to grow N pixels/% to avoid glyph "
      "clipping\n",
      "    -d N[%][!] Allow the descent to grow N pixels/% to avoid glyph "
      "clipping\n",
      "           An ! in the -a and -d options forces the growth; N may be "
      "negative\n",
      "    -v N   Verbosity level: 0=quite quiet, 1=more verbose, 2=even more, "
      "etc.\n",
      "    -t     Print internal tracing messages\n",
      NULL};
  char **p = help;
  while (*p != NULL)
    print_info("%s", *(p++));
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
lea    -0x80(%rbp),%rdi
lea    0x2c6a(%rip),%rsi
mov    $0x78,%edx
call   1030 <memcpy@plt>
lea    -0x80(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x88(%rbp),%rax
cmpq   $0x0,(%rax)
je     1187 <usage+0x67>
mov    -0x88(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x88(%rbp)
mov    (%rax),%rax
mov    %eax,%esi
lea    0x1191(%rip),%rdi
call   1040 <print_info@plt>
jmp    114b <usage+0x2b>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %r14
push   %rbx
sub    $0x78,%rsp
mov    0x2cf2(%rip),%rax
mov    %rax,0x70(%rsp)
movaps 0x2cd6(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0x2cba(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0x2c9e(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0x2c82(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0x2c66(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0x2c4a(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0x2c2e(%rip),%xmm0
movaps %xmm0,(%rsp)
lea    0x8(%rsp),%rbx
lea    0xe7e(%rip),%rsi
lea    0x1185(%rip),%r14
nopl   0x0(%rax)
mov    %r14,%rdi
call   1030 <print_info@plt>
mov    (%rbx),%rsi
add    $0x8,%rbx
test   %rsi,%rsi
jne    1190 <usage+0x80>
add    $0x78,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [40 x i8] c"Usage: convbdf [options] [input-files]\0A\00"
@.str.1 = [63 x i8] c" convbdf [options] [-o output-file] [single-input-file]\0A\00"
@.str.2 = [10 x i8] c"Options:\0A\00"
@.str.3 = [43 x i8] c" -c Convert .bdf to .c source file\0A\00"
@.str.4 = [65 x i8] c" -h Convert .bdf to .h header file (to create sysfont.h)\0A\00"
@.str.5 = [43 x i8] c" -f Convert .bdf to .fnt font file\0A\00"
@.str.6 = [53 x i8] c" -s N Start output at character encodings >= N\0A\00"
@.str.7 = [53 x i8] c" -l N Limit output to character encodings <= N\0A\00"
@.str.8 = [58 x i8] c" -n Don't generate bitmaps as comments in .c file\0A\00"
@.str.9 = [76 x i8] c" -a N[%][!] Allow the ascent to grow N pixels/% to avoid glyph clipping\0A\00"
@.str.10 = [77 x i8] c" -d N[%][!] Allow the descent to grow N pixels/% to avoid glyph clipping\0A\00"
@.str.11 = [79 x i8] c" An ! in the -a and -d options forces the growth; N may be negative\0A\00"
@.str.12 = [78 x i8] c" -v N Verbosity level: 0=quite quiet, 1=more verbose, 2=even more, etc.\0A\00"
@.str.13 = [44 x i8] c" -t Print internal tracing messages\0A\00"
@__const.usage.help = [15 x i8*] [i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.13, i32 0, i32 0), i8* null]
@.str.14 = [3 x i8] c"%s\00"
define void @usage() {
%1 = alloca [15 x i8*]
%2 = alloca i8**
%3 = bitcast [15 x i8*]* %1 to i8*
%4 = getelementptr inbounds [15 x i8*], [15 x i8*]* %1, i64 0, i64 0
store i8** %4, i8*** %2
br label %5
5: ; preds = %9, %0
%6 = load i8**, i8*** %2
%7 = load i8*, i8** %6
%8 = icmp ne i8* %7, null
br i1 %8, label %9, label %15
9: ; preds = %5
%10 = load i8**, i8*** %2
%11 = getelementptr inbounds i8*, i8** %10, i32 1
store i8** %11, i8*** %2
%12 = load i8*, i8** %10
%13 = ptrtoint i8* %12 to i32
%14 = call i32 @print_info(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 %13)
br label %5
15: ; preds = %5
ret void
}

LLVM IR (-O2):
@.str = [40 x i8] c"Usage: convbdf [options] [input-files]\0A\00"
@.str.1 = [63 x i8] c" convbdf [options] [-o output-file] [single-input-file]\0A\00"
@.str.2 = [10 x i8] c"Options:\0A\00"
@.str.3 = [43 x i8] c" -c Convert .bdf to .c source file\0A\00"
@.str.4 = [65 x i8] c" -h Convert .bdf to .h header file (to create sysfont.h)\0A\00"
@.str.5 = [43 x i8] c" -f Convert .bdf to .fnt font file\0A\00"
@.str.6 = [53 x i8] c" -s N Start output at character encodings >= N\0A\00"
@.str.7 = [53 x i8] c" -l N Limit output to character encodings <= N\0A\00"
@.str.8 = [58 x i8] c" -n Don't generate bitmaps as comments in .c file\0A\00"
@.str.9 = [76 x i8] c" -a N[%][!] Allow the ascent to grow N pixels/% to avoid glyph clipping\0A\00"
@.str.10 = [77 x i8] c" -d N[%][!] Allow the descent to grow N pixels/% to avoid glyph clipping\0A\00"
@.str.11 = [79 x i8] c" An ! in the -a and -d options forces the growth; N may be negative\0A\00"
@.str.12 = [78 x i8] c" -v N Verbosity level: 0=quite quiet, 1=more verbose, 2=even more, etc.\0A\00"
@.str.13 = [44 x i8] c" -t Print internal tracing messages\0A\00"
@__const.usage.help = [15 x i8*] [i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.13, i32 0, i32 0), i8* null]
@.str.14 = [3 x i8] c"%s\00"
define void @usage() {
%1 = alloca [15 x i8*]
%2 = bitcast [15 x i8*]* %1 to i8*
%3 = getelementptr inbounds [15 x i8*], [15 x i8*]* %1, i64 0, i64 0
br label %4
4: ; preds = %0, %4
%5 = phi i8* [ %11, %4 ], [ getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i64 0, i64 0), %0 ]
%6 = phi i8** [ %7, %4 ], [ %3, %0 ]
%7 = getelementptr inbounds i8*, i8** %6, i64 1
%8 = ptrtoint i8* %5 to i64
%9 = trunc i64 %8 to i32
%10 = tail call i32 @print_info(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 %9)
%11 = load i8*, i8** %7
%12 = icmp eq i8* %11, null
br i1 %12, label %13, label %4
13: ; preds = %4
ret void
}