#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] trianingFile imageNamesFile.[list/srt] "
         "[distanceDirectory distName]+\n",
         prog);
  printf("  Parameters:\n");
  printf("     trainingFile ....  Name of file containing subspace generated "
         "by training.\n");
  printf("     imageNamesFile...  Name of file containing test images: union "
         "of possible probe and gallery sets.\n");
  printf(
      "  List of distance measures and corresponding distance directories: \n");
  printf("     distDirectory ...  Directory where distances files are to be "
         "written\n");
  printf(
      "     distName ........  The distance measure to use, must be one of:\n");
  printf(
      "        Euclidean ....  Standard Euclidean Distance, i.e. L2 norm.\n");
  printf("        Cityblock ....  Standard L1 norm.\n");
  printf("        Covariance ...  Sometimes called angle in FERET: dot product "
         "after unit normalization.\n");
  printf("        Correlation ..  Normalize images to mean zero and standard "
         "deviation one, then take dot product.\n");
  printf("        MahCosine ....  This measure is the cosine of the angle "
         "between the two feature vectors in Mahlinobis space.\n");
  printf("        MahL1 ........  L1 norm distance in Mahalanobis space.\n");
  printf("        MahL2 ........  L2 norm distance in Mahalanobis space.\n");
  printf(
      "        YamborAngle ..  This is the same measure as \"MahAngle\" in \n"
      "                        version 4.0 and before.  It has been depricated "
      "\n"
      "                        because the measure is not properly formulated. "
      " \n"
      "                        MahCosine has replaced it in newer versions. "
      "\n");
  printf("        YamborDist ...  This is the distance measure presented as \n"
         "                        \"Mahalinobis Distance\" in Wendy Yambor's \n"
         "                        Thesis.  It is included here for "
         "completness.\n");
  printf("        ldaSoft ......  For LDA only, a variant of L2 use by Wenyi "
         "Zhao that weights dimensions by lambda.\n");
  printf("    -imDir <dir>:       image directory. DEFAULT = \".\"\n");
  printf("    -debuglevel <int>:  Level of debug information to display. "
         "DEFAULT = 0\n");
  printf(
      "    -quiet:             Turn off all messages. DEFAULT = messages on\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    0xec9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf15(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf16(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf59(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfb3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfeb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1028(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1060(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1096(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10b3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1105(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1161(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11c9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11fb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x122d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x133c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13fa(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1458(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1482(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x14c0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    %rdi,%rsi
lea    0xec5(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf11(%rip),%rdi
call   1030 <puts@plt>
lea    0xf13(%rip),%rdi
call   1030 <puts@plt>
lea    0xf57(%rip),%rdi
call   1030 <puts@plt>
lea    0xfb2(%rip),%rdi
call   1030 <puts@plt>
lea    0xfeb(%rip),%rdi
call   1030 <puts@plt>
lea    0x1029(%rip),%rdi
call   1030 <puts@plt>
lea    0x1062(%rip),%rdi
call   1030 <puts@plt>
lea    0x1099(%rip),%rdi
call   1030 <puts@plt>
lea    0x10b7(%rip),%rdi
call   1030 <puts@plt>
lea    0x110a(%rip),%rdi
call   1030 <puts@plt>
lea    0x1167(%rip),%rdi
call   1030 <puts@plt>
lea    0x11d0(%rip),%rdi
call   1030 <puts@plt>
lea    0x1203(%rip),%rdi
call   1030 <puts@plt>
lea    0x1236(%rip),%rdi
call   1030 <puts@plt>
lea    0x1346(%rip),%rdi
call   1030 <puts@plt>
lea    0x1405(%rip),%rdi
call   1030 <puts@plt>
lea    0x1464(%rip),%rdi
call   1030 <puts@plt>
lea    0x148f(%rip),%rdi
call   1030 <puts@plt>
lea    0x14ce(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%edi
call   1050 <exit@plt>

LLVM IR (-O0):
@.str = [90 x i8] c"Usage: %s [OPTIONS] trianingFile imageNamesFile.[list/srt] [distanceDirectory distName]+\0A\00"
@.str.1 = [15 x i8] c" Parameters:\0A\00"
@.str.2 = [81 x i8] c" trainingFile .... Name of file containing subspace generated by training.\0A\00"
@.str.3 = [104 x i8] c" imageNamesFile... Name of file containing test images: union of possible probe and gallery sets.\0A\00"
@.str.4 = [70 x i8] c" List of distance measures and corresponding distance directories: \0A\00"
@.str.5 = [75 x i8] c" distDirectory ... Directory where distances files are to be written\0A\00"
@.str.6 = [70 x i8] c" distName ........ The distance measure to use, must be one of:\0A\00"
@.str.7 = [68 x i8] c" Euclidean .... Standard Euclidean Distance, i.e. L2 norm.\0A\00"
@.str.8 = [43 x i8] c" Cityblock .... Standard L1 norm.\0A\00"
@.str.9 = [96 x i8] c" Covariance ... Sometimes called angle in FERET: dot product after unit normalization.\0A\00"
@.str.10 = [106 x i8] c" Correlation .. Normalize images to mean zero and standard deviation one, then take dot product.\0A\00"
@.str.11 = [118 x i8] c" MahCosine .... This measure is the cosine of the angle between the two feature vectors in Mahlinobis space.\0A\00"
@.str.12 = [64 x i8] c" MahL1 ........ L1 norm distance in Mahalanobis space.\0A\00"
@.str.13 = [64 x i8] c" MahL2 ........ L2 norm distance in Mahalanobis space.\0A\00"
@.str.14 = [285 x i8] c" YamborAngle .. This is the same measure as \22MahAngle\22 in \0A version 4.0 and before. It has been depricated \0A because the measure is not properly formulated. \0A MahCosine has replaced it in newer versions. \0A\00"
@.str.15 = [204 x i8] c" YamborDist ... This is the distance measure presented as \0A \22Mahalinobis Distance\22 in Wendy Yambor's \0A Thesis. It is included here for completness.\0A\00"
@.str.16 = [108 x i8] c" ldaSoft ...... For LDA only, a variant of L2 use by Wenyi Zhao that weights dimensions by lambda.\0A\00"
@.str.17 = [56 x i8] c" -imDir <dir>: image directory. DEFAULT = \22.\22\0A\00"
@.str.18 = [76 x i8] c" -debuglevel <int>: Level of debug information to display. DEFAULT = 0\0A\00"
@.str.19 = [70 x i8] c" -quiet: Turn off all messages. DEFAULT = messages on\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 ([90 x i8], [90 x i8]* @.str, i64 0, i64 0), i8* %3)
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0))
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.2, i64 0, i64 0))
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([104 x i8], [104 x i8]* @.str.3, i64 0, i64 0))
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.4, i64 0, i64 0))
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str.5, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.6, i64 0, i64 0))
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.7, i64 0, i64 0))
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.8, i64 0, i64 0))
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([96 x i8], [96 x i8]* @.str.9, i64 0, i64 0))
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([106 x i8], [106 x i8]* @.str.10, i64 0, i64 0))
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([118 x i8], [118 x i8]* @.str.11, i64 0, i64 0))
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.12, i64 0, i64 0))
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.13, i64 0, i64 0))
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([285 x i8], [285 x i8]* @.str.14, i64 0, i64 0))
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([204 x i8], [204 x i8]* @.str.15, i64 0, i64 0))
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([108 x i8], [108 x i8]* @.str.16, i64 0, i64 0))
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.17, i64 0, i64 0))
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.18, i64 0, i64 0))
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.19, i64 0, i64 0))
%24 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@.str = [90 x i8] c"Usage: %s [OPTIONS] trianingFile imageNamesFile.[list/srt] [distanceDirectory distName]+\0A\00"
@str = [14 x i8] c" Parameters:\00"
@str.20 = [80 x i8] c" trainingFile .... Name of file containing subspace generated by training.\00"
@str.21 = [103 x i8] c" imageNamesFile... Name of file containing test images: union of possible probe and gallery sets.\00"
@str.22 = [69 x i8] c" List of distance measures and corresponding distance directories: \00"
@str.23 = [74 x i8] c" distDirectory ... Directory where distances files are to be written\00"
@str.24 = [69 x i8] c" distName ........ The distance measure to use, must be one of:\00"
@str.25 = [67 x i8] c" Euclidean .... Standard Euclidean Distance, i.e. L2 norm.\00"
@str.26 = [42 x i8] c" Cityblock .... Standard L1 norm.\00"
@str.27 = [95 x i8] c" Covariance ... Sometimes called angle in FERET: dot product after unit normalization.\00"
@str.28 = [105 x i8] c" Correlation .. Normalize images to mean zero and standard deviation one, then take dot product.\00"
@str.29 = [117 x i8] c" MahCosine .... This measure is the cosine of the angle between the two feature vectors in Mahlinobis space.\00"
@str.30 = [63 x i8] c" MahL1 ........ L1 norm distance in Mahalanobis space.\00"
@str.31 = [63 x i8] c" MahL2 ........ L2 norm distance in Mahalanobis space.\00"
@str.32 = [284 x i8] c" YamborAngle .. This is the same measure as \22MahAngle\22 in \0A version 4.0 and before. It has been depricated \0A because the measure is not properly formulated. \0A MahCosine has replaced it in newer versions. \00"
@str.33 = [203 x i8] c" YamborDist ... This is the distance measure presented as \0A \22Mahalinobis Distance\22 in Wendy Yambor's \0A Thesis. It is included here for completness.\00"
@str.34 = [107 x i8] c" ldaSoft ...... For LDA only, a variant of L2 use by Wenyi Zhao that weights dimensions by lambda.\00"
@str.35 = [55 x i8] c" -imDir <dir>: image directory. DEFAULT = \22.\22\00"
@str.36 = [75 x i8] c" -debuglevel <int>: Level of debug information to display. DEFAULT = 0\00"
@str.37 = [69 x i8] c" -quiet: Turn off all messages. DEFAULT = messages on\00"
define void @usage(i8* %0) {
%2 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([90 x i8], [90 x i8]* @.str, i64 0, i64 0), i8* %0)
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.20, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([103 x i8], [103 x i8]* @str.21, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([69 x i8], [69 x i8]* @str.22, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([74 x i8], [74 x i8]* @str.23, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([69 x i8], [69 x i8]* @str.24, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.25, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @str.26, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([95 x i8], [95 x i8]* @str.27, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([105 x i8], [105 x i8]* @str.28, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([117 x i8], [117 x i8]* @str.29, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.30, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.31, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([284 x i8], [284 x i8]* @str.32, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([203 x i8], [203 x i8]* @str.33, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([107 x i8], [107 x i8]* @str.34, i64 0, i64 0))
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([55 x i8], [55 x i8]* @str.35, i64 0, i64 0))
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([75 x i8], [75 x i8]* @str.36, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([69 x i8], [69 x i8]* @str.37, i64 0, i64 0))
%22 = tail call i32 @exit(i32 1)
unreachable
}