#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 *prog) {
  printf("Usage: %s [OPTIONS] training_images.[list/srt] training_output\n",
         prog);
  printf("  Parameters\n");
  printf("    training_images: image names file\n");
  printf("    trainName: training output file\n");
  printf("  Options\n");
  printf("    -lda:                enable lda training. (Must use srt file)\n  "
         "      DEFAULT = PCA Only\n");
  printf(
      "    -imDir <dir>:        image directory.\n        DEFAULT = \".\"\n");
  printf(
      "    -vecLength <int>:    vector length.\n        DEFAULT = \"Auto\"\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("    -writeTextBasis:     Causes the program to print the basis "
         "vectors to text files.\n        DEFAULT = No\n");
  printf("    -writeTextValues:    Causes the program to print the basis "
         "values to text files.\n        DEFAULT = No\n");
  printf("    -writeTextInterm:    Causes the program to print intermediate "
         "matricies.\n        DEFAULT = No\n");
  printf("    -outputMatlabAscii:  Causes the program to print matricies in "
         "matlab format.\n        DEFAULT = Octave format\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    0xf2c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf43(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf40(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf90(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfc3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xff7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1056(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10a3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10e0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1101(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1137(%rip),%rdi
movsd  0xe1b(%rip),%xmm0
mov    $0x1,%al
call   1030 <printf@plt>
lea    0x1176(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11c8(%rip),%rdi
movsd  0xdef(%rip),%xmm0
mov    $0x1,%al
call   1030 <printf@plt>
lea    0x1206(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11a4(%rip),%rdi
movsd  0xdc3(%rip),%xmm0
mov    $0x1,%al
call   1030 <printf@plt>
lea    0x124b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x129d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12e1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1349(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13a7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1404(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1459(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x14bd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x14fe(%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    0xfb8(%rip),%rdi
call   1030 <puts@plt>
lea    0xfb9(%rip),%rdi
call   1030 <puts@plt>
lea    0xfd3(%rip),%rdi
call   1030 <puts@plt>
lea    0xfeb(%rip),%rdi
call   1030 <puts@plt>
lea    0xfe9(%rip),%rdi
call   1030 <puts@plt>
lea    0x103a(%rip),%rdi
call   1030 <puts@plt>
lea    0x106e(%rip),%rdi
call   1030 <puts@plt>
lea    0x10a3(%rip),%rdi
call   1030 <puts@plt>
lea    0x1103(%rip),%rdi
call   1030 <puts@plt>
lea    0x1151(%rip),%rdi
call   1030 <puts@plt>
lea    0x118f(%rip),%rdi
call   1030 <puts@plt>
lea    0x11b1(%rip),%rdi
call   1030 <puts@plt>
lea    0xe7f(%rip),%rdi
movsd  0xe1f(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x11d2(%rip),%rdi
call   1030 <puts@plt>
lea    0xeb2(%rip),%rbx
movsd  0xe05(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x120c(%rip),%rdi
call   1030 <puts@plt>
movsd  0xdef(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x1256(%rip),%rdi
call   1030 <puts@plt>
lea    0x12a9(%rip),%rdi
call   1030 <puts@plt>
lea    0x12ee(%rip),%rdi
call   1030 <puts@plt>
lea    0x1357(%rip),%rdi
call   1030 <puts@plt>
lea    0x13b6(%rip),%rdi
call   1030 <puts@plt>
lea    0x1414(%rip),%rdi
call   1030 <puts@plt>
lea    0x146a(%rip),%rdi
call   1030 <puts@plt>
lea    0x14cf(%rip),%rdi
call   1030 <puts@plt>
lea    0x1511(%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.[list/srt] training_output\0A\00"
@.str.1 = [14 x i8] c" Parameters\0A\00"
@.str.2 = [39 x i8] c" training_images: image names file\0A\00"
@.str.3 = [37 x i8] c" trainName: training output file\0A\00"
@.str.4 = [11 x i8] c" Options\0A\00"
@.str.5 = [94 x i8] c" -lda: enable lda training. (Must use srt file)\0A DEFAULT = PCA Only\0A\00"
@.str.6 = [65 x i8] c" -imDir <dir>: image directory.\0A DEFAULT = \22.\22\0A\00"
@.str.7 = [66 x i8] c" -vecLength <int>: vector length.\0A DEFAULT = \22Auto\22\0A\00"
@.str.8 = [109 x i8] c" -dropNVectors <int>: Drops the first N vectors which are normally lighting effects.\0A DEFAULT = 0\0A\00"
@.str.9 = [91 x i8] c" -cutOffMode <mode>: Selects the method for eigen vector selection after PCA trianing\0A\00"
@.str.10 = [75 x i8] c" and droping the first vectors. DEFAULT = SIMPLE\0A\00"
@.str.11 = [47 x i8] c" NONE Retain eigenvectors.\0A\00"
@.str.12 = [68 x i8] c" SIMPLE Retain a percentage of the eigenvectors. \0A\00"
@.str.13 = [85 x i8] c" Expects value between 0.0 and 100.0, DEFAULT PERCENT = %f \0A\00"
@.str.14 = [96 x i8] c" ENERGY Retain eigenvectors accounting for a percentage of the total energy.\0A\00"
@.str.15 = [84 x i8] c" Expects value between 0.0 and 100.0, DEFAULT PERCENT = %f\0A\00"
@.str.16 = [105 x i8] c" STRETCH Retains all eigenvectors greater than a percentage of the largest eigenvector.\0A\00"
@.str.17 = [96 x i8] c" CLASSES Retains as many eigenvectors as there LDA Classes: use only with LDA.\0A\00"
@.str.18 = [82 x i8] c" Ignores cutOff value and uses number of classes instead\0A\00"
@.str.19 = [118 x i8] c" -cutOff <percent>: Percentage of eigen vectors to retain (see cutOffMode).\0A DEFAULT = (See cutoff mode)\0A\00"
@.str.20 = [108 x i8] c" -writeTextBasis: Causes the program to print the basis vectors to text files.\0A DEFAULT = No\0A\00"
@.str.21 = [107 x i8] c" -writeTextValues: Causes the program to print the basis values to text files.\0A DEFAULT = No\0A\00"
@.str.22 = [99 x i8] c" -writeTextInterm: Causes the program to print intermediate matricies.\0A DEFAULT = No\0A\00"
@.str.23 = [114 x i8] c" -outputMatlabAscii: Causes the program to print matricies in matlab format.\0A DEFAULT = Octave format\0A\00"
@.str.24 = [79 x i8] c" -quiet: Turn off all messages.\0A DEFAULT = messages on\0A\00"
@.str.25 = [118 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 ([39 x i8], [39 x i8]* @.str.2, i64 0, i64 0))
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 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 ([94 x i8], [94 x i8]* @.str.5, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.6, i64 0, i64 0))
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.7, i64 0, i64 0))
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([109 x i8], [109 x i8]* @.str.8, i64 0, i64 0))
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([91 x i8], [91 x i8]* @.str.9, i64 0, i64 0))
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str.10, i64 0, i64 0))
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.11, i64 0, i64 0))
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.12, i64 0, i64 0))
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([85 x i8], [85 x i8]* @.str.13, i64 0, i64 0), double 6.000000e+01)
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([96 x i8], [96 x i8]* @.str.14, i64 0, i64 0))
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([84 x i8], [84 x i8]* @.str.15, i64 0, i64 0), double 9.000000e+01)
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([105 x i8], [105 x i8]* @.str.16, i64 0, i64 0))
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([84 x i8], [84 x i8]* @.str.15, i64 0, i64 0), double 1.000000e+00)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([96 x i8], [96 x i8]* @.str.17, i64 0, i64 0))
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.18, i64 0, i64 0))
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([118 x i8], [118 x i8]* @.str.19, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([108 x i8], [108 x i8]* @.str.20, i64 0, i64 0))
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([107 x i8], [107 x i8]* @.str.21, i64 0, i64 0))
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([99 x i8], [99 x i8]* @.str.22, i64 0, i64 0))
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([114 x i8], [114 x i8]* @.str.23, i64 0, i64 0))
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.24, i64 0, i64 0))
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([118 x i8], [118 x i8]* @.str.25, i64 0, i64 0))
%31 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@.str = [64 x i8] c"Usage: %s [OPTIONS] training_images.[list/srt] training_output\0A\00"
@.str.13 = [85 x i8] c" Expects value between 0.0 and 100.0, DEFAULT PERCENT = %f \0A\00"
@.str.15 = [84 x i8] c" Expects value between 0.0 and 100.0, DEFAULT PERCENT = %f\0A\00"
@str = [13 x i8] c" Parameters\00"
@str.26 = [38 x i8] c" training_images: image names file\00"
@str.27 = [36 x i8] c" trainName: training output file\00"
@str.28 = [10 x i8] c" Options\00"
@str.29 = [93 x i8] c" -lda: enable lda training. (Must use srt file)\0A DEFAULT = PCA Only\00"
@str.30 = [64 x i8] c" -imDir <dir>: image directory.\0A DEFAULT = \22.\22\00"
@str.31 = [65 x i8] c" -vecLength <int>: vector length.\0A DEFAULT = \22Auto\22\00"
@str.32 = [108 x i8] c" -dropNVectors <int>: Drops the first N vectors which are normally lighting effects.\0A DEFAULT = 0\00"
@str.33 = [90 x i8] c" -cutOffMode <mode>: Selects the method for eigen vector selection after PCA trianing\00"
@str.34 = [74 x i8] c" and droping the first vectors. DEFAULT = SIMPLE\00"
@str.35 = [46 x i8] c" NONE Retain eigenvectors.\00"
@str.36 = [67 x i8] c" SIMPLE Retain a percentage of the eigenvectors. \00"
@str.37 = [95 x i8] c" ENERGY Retain eigenvectors accounting for a percentage of the total energy.\00"
@str.38 = [104 x i8] c" STRETCH Retains all eigenvectors greater than a percentage of the largest eigenvector.\00"
@str.39 = [95 x i8] c" CLASSES Retains as many eigenvectors as there LDA Classes: use only with LDA.\00"
@str.40 = [81 x i8] c" Ignores cutOff value and uses number of classes instead\00"
@str.41 = [117 x i8] c" -cutOff <percent>: Percentage of eigen vectors to retain (see cutOffMode).\0A DEFAULT = (See cutoff mode)\00"
@str.42 = [107 x i8] c" -writeTextBasis: Causes the program to print the basis vectors to text files.\0A DEFAULT = No\00"
@str.43 = [106 x i8] c" -writeTextValues: Causes the program to print the basis values to text files.\0A DEFAULT = No\00"
@str.44 = [98 x i8] c" -writeTextInterm: Causes the program to print intermediate matricies.\0A DEFAULT = No\00"
@str.45 = [113 x i8] c" -outputMatlabAscii: Causes the program to print matricies in matlab format.\0A DEFAULT = Octave format\00"
@str.46 = [78 x i8] c" -quiet: Turn off all messages.\0A DEFAULT = messages on\00"
@str.47 = [117 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 ([38 x i8], [38 x i8]* @str.26, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.27, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.28, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([93 x i8], [93 x i8]* @str.29, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.30, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([65 x i8], [65 x i8]* @str.31, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([108 x i8], [108 x i8]* @str.32, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([90 x i8], [90 x i8]* @str.33, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([74 x i8], [74 x i8]* @str.34, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.35, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.36, i64 0, i64 0))
%15 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([85 x i8], [85 x i8]* @.str.13, i64 0, i64 0), double 6.000000e+01)
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([95 x i8], [95 x i8]* @str.37, i64 0, i64 0))
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([84 x i8], [84 x i8]* @.str.15, i64 0, i64 0), double 9.000000e+01)
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([104 x i8], [104 x i8]* @str.38, i64 0, i64 0))
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([84 x i8], [84 x i8]* @.str.15, i64 0, i64 0), double 1.000000e+00)
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([95 x i8], [95 x i8]* @str.39, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.40, i64 0, i64 0))
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([117 x i8], [117 x i8]* @str.41, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([107 x i8], [107 x i8]* @str.42, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([106 x i8], [106 x i8]* @str.43, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([98 x i8], [98 x i8]* @str.44, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([113 x i8], [113 x i8]* @str.45, i64 0, i64 0))
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([78 x i8], [78 x i8]* @str.46, i64 0, i64 0))
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([117 x i8], [117 x i8]* @str.47, i64 0, i64 0))
%29 = tail call i32 @exit(i32 1)
unreachable
}