#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*/ printf(char *, ...);
void usage(const char *name) {
  printf("Usage: %s [OPTIONS] training_images.srt training_output_prefix\n",
         name);
  printf("  Parameters\n");
  printf("    training_images.srt:   Input image names.\n");
  printf("    training_output_prefix Prefix which is used to save the "
         "subspaces\n");
  printf("  Options\n");
  printf("    -imDir <dir>:          Image directory.\n"
         "        DEFAULT = \".\"\n");
  printf("    -ni <n>:               Total number of interpersonal images.\n"
         "        DEFAULT = 100\n");
  printf("    -ne <n>:               Total number of extrapersonal images.\n"
         "        DEFAULT = 100\n");
  printf("    -distances <file>:     Sort images using this distance matrix.\n"
         "        DEFAULT = \"Random\"\n");
  printf("    -maxRank n             When sorting, take these many top-ranked "
         "images\n");
  printf("     -dropNVectors <int>: Drops the first N vectors which are "
         "normally lighting effects.\n        DEFAULT = 0\n");
  printf("     -cutOffMode <mode>:  Selects the method for eigen vector "
         "selection after PCA trianing\n");
  printf("                          and droping the first vectors.  DEFAULT = "
         "SIMPLE\n");
  printf("          NONE            Retain eigenvectors.\n");
  printf(
      "          SIMPLE          Retain a percentage of the eigenvectors. \n");
  printf("                          Expects value between 0.0 and 100.0, "
         "DEFAULT PERCENT = %f \n",
         60.0);
  printf("          ENERGY          Retain  eigenvectors accounting for a "
         "percentage of the total energy.\n");
  printf("                          Expects value between 0.0 and 100.0, "
         "DEFAULT PERCENT = %f\n",
         90.0);
  printf("          STRETCH         Retains all eigenvectors greater than a "
         "percentage of the largest eigenvector.\n");
  printf("                          Expects value between 0.0 and 100.0, "
         "DEFAULT PERCENT = %f\n",
         1.0);
  printf("          CLASSES         Retains as many eigenvectors as there LDA "
         "Classes: use only with LDA.\n");
  printf("                          Ignores cutOff value and uses number of "
         "classes instead\n");
  printf("     -cutOff <percent>:   Percentage of eigen vectors to retain (see "
         "cutOffMode).\n        DEFAULT = (See cutoff mode)\n");
  printf("    -quiet:                Turn off all messages.\n"
         "        DEFAULT = messages on\n");
  printf("    -debuglevel <int>:     Level of debug information to display"
         "        (automatically sets quiet to no).\n"
         "        DEFAULT = 0\n");
  exit(1);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xee1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf13(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf13(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf34(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf6d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf6a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf9f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfe9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1033(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1084(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10c2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1122(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1170(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11ae(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11d0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1207(%rip),%rdi
movsd  0xdff(%rip),%xmm0
mov    $0x1,%al
call   1030 <printf@plt>
lea    0x1247(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x129a(%rip),%rdi
movsd  0xdd3(%rip),%xmm0
mov    $0x1,%al
call   1030 <printf@plt>
lea    0x12d9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1276(%rip),%rdi
movsd  0xda7(%rip),%xmm0
mov    $0x1,%al
call   1030 <printf@plt>
lea    0x131f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1372(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13b7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1420(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1463(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rbx
mov    %rdi,%rsi
lea    0xedd(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfba(%rip),%rdi
call   1030 <puts@plt>
lea    0xfbb(%rip),%rdi
call   1030 <puts@plt>
lea    0xfdd(%rip),%rdi
call   1030 <puts@plt>
lea    0x1017(%rip),%rdi
call   1030 <puts@plt>
lea    0x1015(%rip),%rdi
call   1030 <puts@plt>
lea    0x104b(%rip),%rdi
call   1030 <puts@plt>
lea    0x1096(%rip),%rdi
call   1030 <puts@plt>
lea    0x10e1(%rip),%rdi
call   1030 <puts@plt>
lea    0x1133(%rip),%rdi
call   1030 <puts@plt>
lea    0x1172(%rip),%rdi
call   1030 <puts@plt>
lea    0x11d3(%rip),%rdi
call   1030 <puts@plt>
lea    0x1222(%rip),%rdi
call   1030 <puts@plt>
lea    0x1261(%rip),%rdi
call   1030 <puts@plt>
lea    0x1284(%rip),%rdi
call   1030 <puts@plt>
lea    0xe67(%rip),%rdi
movsd  0xe07(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x12a6(%rip),%rdi
call   1030 <puts@plt>
lea    0xe9b(%rip),%rbx
movsd  0xded(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x12e1(%rip),%rdi
call   1030 <puts@plt>
movsd  0xdd7(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x132c(%rip),%rdi
call   1030 <puts@plt>
lea    0x1380(%rip),%rdi
call   1030 <puts@plt>
lea    0x13c6(%rip),%rdi
call   1030 <puts@plt>
lea    0x1430(%rip),%rdi
call   1030 <puts@plt>
lea    0x1474(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%edi
call   1050 <exit@plt>

LLVM IR (-O0):
@.str = [64 x i8] c"Usage: %s [OPTIONS] training_images.srt training_output_prefix\0A\00"
@.str.1 = [14 x i8] c" Parameters\0A\00"
@.str.2 = [47 x i8] c" training_images.srt: Input image names.\0A\00"
@.str.3 = [71 x i8] c" training_output_prefix Prefix which is used to save the subspaces\0A\00"
@.str.4 = [11 x i8] c" Options\0A\00"
@.str.5 = [67 x i8] c" -imDir <dir>: Image directory.\0A DEFAULT = \22.\22\0A\00"
@.str.6 = [88 x i8] c" -ni <n>: Total number of interpersonal images.\0A DEFAULT = 100\0A\00"
@.str.7 = [88 x i8] c" -ne <n>: Total number of extrapersonal images.\0A DEFAULT = 100\0A\00"
@.str.8 = [95 x i8] c" -distances <file>: Sort images using this distance matrix.\0A DEFAULT = \22Random\22\0A\00"
@.str.9 = [76 x i8] c" -maxRank n When sorting, take these many top-ranked images\0A\00"
@.str.10 = [110 x i8] c" -dropNVectors <int>: Drops the first N vectors which are normally lighting effects.\0A DEFAULT = 0\0A\00"
@.str.11 = [92 x i8] c" -cutOffMode <mode>: Selects the method for eigen vector selection after PCA trianing\0A\00"
@.str.12 = [76 x i8] c" and droping the first vectors. DEFAULT = SIMPLE\0A\00"
@.str.13 = [48 x i8] c" NONE Retain eigenvectors.\0A\00"
@.str.14 = [69 x i8] c" SIMPLE Retain a percentage of the eigenvectors. \0A\00"
@.str.15 = [86 x i8] c" Expects value between 0.0 and 100.0, DEFAULT PERCENT = %f \0A\00"
@.str.16 = [97 x i8] c" ENERGY Retain eigenvectors accounting for a percentage of the total energy.\0A\00"
@.str.17 = [85 x i8] c" Expects value between 0.0 and 100.0, DEFAULT PERCENT = %f\0A\00"
@.str.18 = [106 x i8] c" STRETCH Retains all eigenvectors greater than a percentage of the largest eigenvector.\0A\00"
@.str.19 = [97 x i8] c" CLASSES Retains as many eigenvectors as there LDA Classes: use only with LDA.\0A\00"
@.str.20 = [83 x i8] c" Ignores cutOff value and uses number of classes instead\0A\00"
@.str.21 = [119 x i8] c" -cutOff <percent>: Percentage of eigen vectors to retain (see cutOffMode).\0A DEFAULT = (See cutoff mode)\0A\00"
@.str.22 = [81 x i8] c" -quiet: Turn off all messages.\0A DEFAULT = messages on\0A\00"
@.str.23 = [127 x i8] c" -debuglevel <int>: Level of debug information to display (automatically sets quiet to no).\0A DEFAULT = 0\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str, i64 0, i64 0), i8* %3)
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0))
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0))
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.3, i64 0, i64 0))
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.4, i64 0, i64 0))
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.5, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([88 x i8], [88 x i8]* @.str.6, i64 0, i64 0))
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([88 x i8], [88 x i8]* @.str.7, i64 0, i64 0))
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([95 x i8], [95 x i8]* @.str.8, i64 0, i64 0))
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.9, i64 0, i64 0))
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([110 x i8], [110 x i8]* @.str.10, i64 0, i64 0))
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([92 x i8], [92 x i8]* @.str.11, i64 0, i64 0))
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.12, i64 0, i64 0))
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.13, i64 0, i64 0))
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.14, i64 0, i64 0))
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([86 x i8], [86 x i8]* @.str.15, i64 0, i64 0), double 6.000000e+01)
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([97 x i8], [97 x i8]* @.str.16, i64 0, i64 0))
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([85 x i8], [85 x i8]* @.str.17, i64 0, i64 0), double 9.000000e+01)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([106 x i8], [106 x i8]* @.str.18, i64 0, i64 0))
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([85 x i8], [85 x i8]* @.str.17, i64 0, i64 0), double 1.000000e+00)
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([97 x i8], [97 x i8]* @.str.19, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([83 x i8], [83 x i8]* @.str.20, i64 0, i64 0))
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([119 x i8], [119 x i8]* @.str.21, i64 0, i64 0))
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.22, i64 0, i64 0))
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([127 x i8], [127 x i8]* @.str.23, i64 0, i64 0))
%29 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@.str = [64 x i8] c"Usage: %s [OPTIONS] training_images.srt training_output_prefix\0A\00"
@.str.15 = [86 x i8] c" Expects value between 0.0 and 100.0, DEFAULT PERCENT = %f \0A\00"
@.str.17 = [85 x i8] c" Expects value between 0.0 and 100.0, DEFAULT PERCENT = %f\0A\00"
@str = [13 x i8] c" Parameters\00"
@str.24 = [46 x i8] c" training_images.srt: Input image names.\00"
@str.25 = [70 x i8] c" training_output_prefix Prefix which is used to save the subspaces\00"
@str.26 = [10 x i8] c" Options\00"
@str.27 = [66 x i8] c" -imDir <dir>: Image directory.\0A DEFAULT = \22.\22\00"
@str.28 = [87 x i8] c" -ni <n>: Total number of interpersonal images.\0A DEFAULT = 100\00"
@str.29 = [87 x i8] c" -ne <n>: Total number of extrapersonal images.\0A DEFAULT = 100\00"
@str.30 = [94 x i8] c" -distances <file>: Sort images using this distance matrix.\0A DEFAULT = \22Random\22\00"
@str.31 = [75 x i8] c" -maxRank n When sorting, take these many top-ranked images\00"
@str.32 = [109 x i8] c" -dropNVectors <int>: Drops the first N vectors which are normally lighting effects.\0A DEFAULT = 0\00"
@str.33 = [91 x i8] c" -cutOffMode <mode>: Selects the method for eigen vector selection after PCA trianing\00"
@str.34 = [75 x i8] c" and droping the first vectors. DEFAULT = SIMPLE\00"
@str.35 = [47 x i8] c" NONE Retain eigenvectors.\00"
@str.36 = [68 x i8] c" SIMPLE Retain a percentage of the eigenvectors. \00"
@str.37 = [96 x i8] c" ENERGY Retain eigenvectors accounting for a percentage of the total energy.\00"
@str.38 = [105 x i8] c" STRETCH Retains all eigenvectors greater than a percentage of the largest eigenvector.\00"
@str.39 = [96 x i8] c" CLASSES Retains as many eigenvectors as there LDA Classes: use only with LDA.\00"
@str.40 = [82 x i8] c" Ignores cutOff value and uses number of classes instead\00"
@str.41 = [118 x i8] c" -cutOff <percent>: Percentage of eigen vectors to retain (see cutOffMode).\0A DEFAULT = (See cutoff mode)\00"
@str.42 = [80 x i8] c" -quiet: Turn off all messages.\0A DEFAULT = messages on\00"
@str.43 = [126 x i8] c" -debuglevel <int>: Level of debug information to display (automatically sets quiet to no).\0A DEFAULT = 0\00"
define void @usage(i8* %0) {
%2 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @.str, i64 0, i64 0), i8* %0)
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @str, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.24, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.25, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.26, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @str.27, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([87 x i8], [87 x i8]* @str.28, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([87 x i8], [87 x i8]* @str.29, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([94 x i8], [94 x i8]* @str.30, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([75 x i8], [75 x i8]* @str.31, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([109 x i8], [109 x i8]* @str.32, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([91 x i8], [91 x i8]* @str.33, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([75 x i8], [75 x i8]* @str.34, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @str.35, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([68 x i8], [68 x i8]* @str.36, i64 0, i64 0))
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @.str.15, i64 0, i64 0), double 6.000000e+01)
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([96 x i8], [96 x i8]* @str.37, i64 0, i64 0))
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([85 x i8], [85 x i8]* @.str.17, i64 0, i64 0), double 9.000000e+01)
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([105 x i8], [105 x i8]* @str.38, i64 0, i64 0))
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([85 x i8], [85 x i8]* @.str.17, i64 0, i64 0), double 1.000000e+00)
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([96 x i8], [96 x i8]* @str.39, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([82 x i8], [82 x i8]* @str.40, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([118 x i8], [118 x i8]* @str.41, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.42, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([126 x i8], [126 x i8]* @str.43, i64 0, i64 0))
%27 = tail call i32 @exit(i32 1)
unreachable
}