#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*/ fprintf(int /*<<< orphan*/, char *, ...);
int /*<<< orphan*/ stdout;
void usage(const char *prog_name) {
  fprintf(stdout,
          "Usage: %s [OPTIONS]... [SOURCE [DESTINATION]]\n"
          "Transliterate Russian text in SOURCE typed in Latin into Cyrillic "
          "letters\n"
          "in DESTINATION. If SOURCE or DESTINATION are not given or -, assume "
          "stdin\n"
          "and stdout correspondingly.\n"
          "\n",
          prog_name);
  fprintf(
      stdout,
      "Options to select output encoding of generated Cyrillic letters:\n"
      "  -i             ISO8859-5\n"
      "  -k             KOI8-R\n"
      "  -u             UTF-8\n"
      "  -w             Windows-1251\n"
      "Default is KOI8-R unless string UTF-8 is present in the LC_ALL, "
      "LC_CTYPE,\n"
      "LANG or LESSCHARSET environroment variables, in which case it is UTF-8\n"
      "\n");
  fprintf(stdout,
          "Other options:\n"
          "  -l, --with-latin-escapes  process %c%c escapes, see bellow\n"
          "  -r, --no-latin-escapes    turn off processing of %c%c escapes "
          "(default)\n"
          "  -h, --help     display this help and exit\n"
          "  -v, --version  output version information and exit\n"
          "\n",
          ';', ';', ';', ';');
  fprintf(stdout,
          "When processing of %c%c is on, print characters after %c%c as is "
          "without\n"
          "transliteration until next %c%c. To have %c%c in the output, type "
          "%c%c%c.\n"
          "\n"
          "Reports bugs on suggestions to igor@bukanov.net\n"
          "\n",
          ';', ';', ';', ';', ';', ';', ';', ';', ';', ';', ';');
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    0x2ebd(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xed0(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2ea2(%rip),%rax
mov    (%rax),%edi
lea    0xf99(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2e8b(%rip),%rax
mov    (%rax),%edi
lea    0x10be(%rip),%rsi
mov    $0x3b,%r9d
mov    %r9d,%edx
mov    %r9d,%ecx
mov    %r9d,%r8d
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2e65(%rip),%rax
mov    (%rax),%edi
lea    0x1191(%rip),%rsi
mov    $0x3b,%r9d
mov    %r9d,%edx
mov    %r9d,%ecx
mov    %r9d,%r8d
movl   $0x3b,(%rsp)
movl   $0x3b,0x8(%rsp)
movl   $0x3b,0x10(%rsp)
movl   $0x3b,0x18(%rsp)
movl   $0x3b,0x20(%rsp)
movl   $0x3b,0x28(%rsp)
movl   $0x3b,0x30(%rsp)
mov    $0x0,%al
call   1030 <fprintf@plt>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rbx
mov    %rdi,%rdx
mov    0x2ec5(%rip),%rbx
mov    (%rbx),%edi
lea    0xedc(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0xfac(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0x10d8(%rip),%rsi
mov    $0x3b,%edx
mov    $0x3b,%ecx
mov    $0x3b,%r8d
mov    $0x3b,%r9d
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
sub    $0x8,%rsp
lea    0x11a7(%rip),%rsi
mov    $0x3b,%edx
mov    $0x3b,%ecx
mov    $0x3b,%r8d
mov    $0x3b,%r9d
xor    %eax,%eax
push   $0x3b
push   $0x3b
push   $0x3b
push   $0x3b
push   $0x3b
push   $0x3b
push   $0x3b
call   1030 <fprintf@plt>
add    $0x40,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@stdout = global i32 0
@.str = [224 x i8] c"Usage: %s [OPTIONS]... [SOURCE [DESTINATION]]\0ATransliterate Russian text in SOURCE typed in Latin into Cyrillic letters\0Ain DESTINATION. If SOURCE or DESTINATION are not given or -, assume stdin\0Aand stdout correspondingly.\0A\0A\00"
@.str.1 = [316 x i8] c"Options to select output encoding of generated Cyrillic letters:\0A -i ISO8859-5\0A -k KOI8-R\0A -u UTF-8\0A -w Windows-1251\0ADefault is KOI8-R unless string UTF-8 is present in the LC_ALL, LC_CTYPE,\0ALANG or LESSCHARSET environroment variables, in which case it is UTF-8\0A\0A\00"
@.str.2 = [249 x i8] c"Other options:\0A -l, --with-latin-escapes process %c%c escapes, see bellow\0A -r, --no-latin-escapes turn off processing of %c%c escapes (default)\0A -h, --help display this help and exit\0A -v, --version output version information and exit\0A\0A\00"
@.str.3 = [198 x i8] c"When processing of %c%c is on, print characters after %c%c as is without\0Atransliteration until next %c%c. To have %c%c in the output, type %c%c%c.\0A\0AReports bugs on suggestions to igor@bukanov.net\0A\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i32, i32* @stdout
%4 = load i8*, i8** %2
%5 = call i32 (i32, i8*, ...) @fprintf(i32 %3, i8* getelementptr inbounds ([224 x i8], [224 x i8]* @.str, i64 0, i64 0), i8* %4)
%6 = load i32, i32* @stdout
%7 = call i32 (i32, i8*, ...) @fprintf(i32 %6, i8* getelementptr inbounds ([316 x i8], [316 x i8]* @.str.1, i64 0, i64 0))
%8 = load i32, i32* @stdout
%9 = call i32 (i32, i8*, ...) @fprintf(i32 %8, i8* getelementptr inbounds ([249 x i8], [249 x i8]* @.str.2, i64 0, i64 0), i32 59, i32 59, i32 59, i32 59)
%10 = load i32, i32* @stdout
%11 = call i32 (i32, i8*, ...) @fprintf(i32 %10, i8* getelementptr inbounds ([198 x i8], [198 x i8]* @.str.3, i64 0, i64 0), i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59)
ret void
}

LLVM IR (-O2):
@stdout = global i32 0
@.str = [224 x i8] c"Usage: %s [OPTIONS]... [SOURCE [DESTINATION]]\0ATransliterate Russian text in SOURCE typed in Latin into Cyrillic letters\0Ain DESTINATION. If SOURCE or DESTINATION are not given or -, assume stdin\0Aand stdout correspondingly.\0A\0A\00"
@.str.1 = [316 x i8] c"Options to select output encoding of generated Cyrillic letters:\0A -i ISO8859-5\0A -k KOI8-R\0A -u UTF-8\0A -w Windows-1251\0ADefault is KOI8-R unless string UTF-8 is present in the LC_ALL, LC_CTYPE,\0ALANG or LESSCHARSET environroment variables, in which case it is UTF-8\0A\0A\00"
@.str.2 = [249 x i8] c"Other options:\0A -l, --with-latin-escapes process %c%c escapes, see bellow\0A -r, --no-latin-escapes turn off processing of %c%c escapes (default)\0A -h, --help display this help and exit\0A -v, --version output version information and exit\0A\0A\00"
@.str.3 = [198 x i8] c"When processing of %c%c is on, print characters after %c%c as is without\0Atransliteration until next %c%c. To have %c%c in the output, type %c%c%c.\0A\0AReports bugs on suggestions to igor@bukanov.net\0A\0A\00"
define void @usage(i8* %0) {
%2 = load i32, i32* @stdout
%3 = tail call i32 (i32, i8*, ...) @fprintf(i32 %2, i8* getelementptr inbounds ([224 x i8], [224 x i8]* @.str, i64 0, i64 0), i8* %0)
%4 = load i32, i32* @stdout
%5 = tail call i32 (i32, i8*, ...) @fprintf(i32 %4, i8* getelementptr inbounds ([316 x i8], [316 x i8]* @.str.1, i64 0, i64 0))
%6 = load i32, i32* @stdout
%7 = tail call i32 (i32, i8*, ...) @fprintf(i32 %6, i8* getelementptr inbounds ([249 x i8], [249 x i8]* @.str.2, i64 0, i64 0), i32 59, i32 59, i32 59, i32 59)
%8 = load i32, i32* @stdout
%9 = tail call i32 (i32, i8*, ...) @fprintf(i32 %8, i8* getelementptr inbounds ([198 x i8], [198 x i8]* @.str.3, i64 0, i64 0), i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59)
ret void
}