#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*/ printf(char *);
void display_help(void) {
  printf("Cluster 3.0, command-line version.\n");
  printf("USAGE: cluster [options]\n");
  printf("options:\n");
  printf("  -v, --version Version information\n");
  printf("  -f filename   File loading\n");
  printf(
      "  -l            Specifies to log-transform the data before clustering\n"
      "                (default is no log-transform)\n");
  printf("  -cg a|m       Specifies whether to center each row (gene)\n"
         "                in the data\n"
         "                a: Subtract the mean of each row\n"
         "                m: Subtract the median of each row\n"
         "                (default is no centering)\n");
  printf("  -ng           Specifies to normalize each row (gene) in the data\n"
         "                (default is no normalization)\n");
  printf(
      "  -ca a|m       Specifies whether to center each column (microarray)\n"
      "                in the data\n"
      "                a: Subtract the mean of each column\n"
      "                m: Subtract the median of each column\n"
      "                (default is no centering)\n");
  printf("  -na           Specifies to normalize each column (microarray) in "
         "the data\n"
         "                (default is no normalization)\n");
  printf("  -u jobname    Allows you to specify a different name for the "
         "output files\n"
         "                (default is derived from the input file name)\n");
  printf(
      "  -g [0..8]     Specifies the distance measure for gene clustering\n");
  printf("                0: No gene clustering\n"
         "                1: Uncentered correlation\n"
         "                2: Pearson correlation\n"
         "                3: Uncentered correlation, absolute value\n"
         "                4: Pearson correlation, absolute value\n"
         "                5: Spearman's rank correlation\n"
         "                6: Kendall's tau\n"
         "                7: Euclidean distance\n"
         "                8: City-block distance\n"
         "                (default: 1)\n");
  printf("  -e [0..8]     Specifies the distance measure for microarray "
         "clustering\n");
  printf("                0: No clustering\n"
         "                1: Uncentered correlation\n"
         "                2: Pearson correlation\n"
         "                3: Uncentered correlation, absolute value\n"
         "                4: Pearson correlation, absolute value\n"
         "                5: Spearman's rank correlation\n"
         "                6: Kendall's tau\n"
         "                7: Euclidean distance\n"
         "                8: City-block distance\n"
         "                (default: 0)\n");
  printf(
      "  -m [msca]     Specifies which hierarchical clustering method to use\n"
      "                m: Pairwise complete-linkage\n"
      "                s: Pairwise single-linkage\n"
      "                c: Pairwise centroid-linkage\n"
      "                a: Pairwise average-linkage\n"
      "                (default: m)\n");
  printf("  -k number     Specifies whether to run k-means clustering\n"
         "                instead of hierarchical clustering, and the number\n"
         "                of clusters k to use\n");
  printf("  -r number     For k-means clustering, the number of times the\n"
         "                k-means clustering algorithm is run\n"
         "                (default: 1)\n");
  printf(
      "  -s            Specifies to calculate an SOM instead of hierarchical\n"
      "                clustering\n");
  printf("  -x number     Specifies the horizontal dimension of the SOM grid\n"
         "                (default: 2)\n");
  printf("  -y number     Specifies the vertical dimension of the SOM grid\n"
         "                (default: 1)\n");
  printf("  -minK number   Valor minimo de k para gerar cortes na arvore "
         "gerada com o hierarquico\n"
         "                (default: 2)\n");
  printf("  -maxK number   Valor maximo de k para gerar cortes na arvore "
         "gerada com o hierarquico\n"
         "                (default: 2)\n");
  return;
}


x86 assembly (clang, -O0):
<display_help>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
lea    0xefd(%rip),%rdi
call   1030 <printf@plt>
lea    0xf0b(%rip),%rdi
call   1030 <printf@plt>
lea    0xf09(%rip),%rdi
call   1030 <printf@plt>
lea    0xf22(%rip),%rdi
call   1030 <printf@plt>
lea    0xf34(%rip),%rdi
call   1030 <printf@plt>
lea    0xf9d(%rip),%rdi
call   1030 <printf@plt>
lea    0x1078(%rip),%rdi
call   1030 <printf@plt>
lea    0x10de(%rip),%rdi
call   1030 <printf@plt>
lea    0x11c8(%rip),%rdi
call   1030 <printf@plt>
lea    0x1237(%rip),%rdi
call   1030 <printf@plt>
lea    0x12b6(%rip),%rdi
call   1030 <printf@plt>
lea    0x12ee(%rip),%rdi
call   1030 <printf@plt>
lea    0x1485(%rip),%rdi
call   1030 <printf@plt>
lea    0x14c3(%rip),%rdi
call   1030 <printf@plt>
lea    0x1655(%rip),%rdi
call   1030 <printf@plt>
lea    0x175e(%rip),%rdi
call   1030 <printf@plt>
lea    0x17f7(%rip),%rdi
call   1030 <printf@plt>
lea    0x187d(%rip),%rdi
call   1030 <printf@plt>
lea    0x18d3(%rip),%rdi
call   1030 <printf@plt>
lea    0x1928(%rip),%rdi
call   1030 <printf@plt>
lea    0x197b(%rip),%rdi
call   1030 <printf@plt>
lea    0x19e5(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<display_help>:
push   %rax
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
lea    0xeff(%rip),%rdi
call   1030 <puts@plt>
lea    0xf0c(%rip),%rdi
call   1030 <puts@plt>
lea    0xf09(%rip),%rdi
call   1030 <puts@plt>
lea    0xf21(%rip),%rdi
call   1030 <puts@plt>
lea    0xf32(%rip),%rdi
call   1030 <puts@plt>
lea    0xf9a(%rip),%rdi
call   1030 <puts@plt>
lea    0x1074(%rip),%rdi
call   1030 <puts@plt>
lea    0x10d9(%rip),%rdi
call   1030 <puts@plt>
lea    0x11c2(%rip),%rdi
call   1030 <puts@plt>
lea    0x1230(%rip),%rdi
call   1030 <puts@plt>
lea    0x12ae(%rip),%rdi
call   1030 <puts@plt>
lea    0x12e5(%rip),%rdi
call   1030 <puts@plt>
lea    0x147b(%rip),%rdi
call   1030 <puts@plt>
lea    0x14b8(%rip),%rdi
call   1030 <puts@plt>
lea    0x1649(%rip),%rdi
call   1030 <puts@plt>
lea    0x1751(%rip),%rdi
call   1030 <puts@plt>
lea    0x17e9(%rip),%rdi
call   1030 <puts@plt>
lea    0x186e(%rip),%rdi
call   1030 <puts@plt>
lea    0x18c3(%rip),%rdi
call   1030 <puts@plt>
lea    0x1917(%rip),%rdi
call   1030 <puts@plt>
lea    0x1969(%rip),%rdi
call   1030 <puts@plt>
lea    0x19d2(%rip),%rdi
pop    %rax
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [36 x i8] c"Cluster 3.0, command-line version.\0A\00"
@.str.1 = [26 x i8] c"USAGE: cluster [options]\0A\00"
@.str.2 = [10 x i8] c"options:\0A\00"
@.str.3 = [37 x i8] c" -v, --version Version information\0A\00"
@.str.4 = [30 x i8] c" -f filename File loading\0A\00"
@.str.5 = [117 x i8] c" -l Specifies to log-transform the data before clustering\0A (default is no log-transform)\0A\00"
@.str.6 = [231 x i8] c" -cg a|m Specifies whether to center each row (gene)\0A in the data\0A a: Subtract the mean of each row\0A m: Subtract the median of each row\0A (default is no centering)\0A\00"
@.str.7 = [114 x i8] c" -ng Specifies to normalize each row (gene) in the data\0A (default is no normalization)\0A\00"
@.str.8 = [246 x i8] c" -ca a|m Specifies whether to center each column (microarray)\0A in the data\0A a: Subtract the mean of each column\0A m: Subtract the median of each column\0A (default is no centering)\0A\00"
@.str.9 = [123 x i8] c" -na Specifies to normalize each column (microarray) in the data\0A (default is no normalization)\0A\00"
@.str.10 = [139 x i8] c" -u jobname Allows you to specify a different name for the output files\0A (default is derived from the input file name)\0A\00"
@.str.11 = [68 x i8] c" -g [0..8] Specifies the distance measure for gene clustering\0A\00"
@.str.12 = [419 x i8] c" 0: No gene clustering\0A 1: Uncentered correlation\0A 2: Pearson correlation\0A 3: Uncentered correlation, absolute value\0A 4: Pearson correlation, absolute value\0A 5: Spearman's rank correlation\0A 6: Kendall's tau\0A 7: Euclidean distance\0A 8: City-block distance\0A (default: 1)\0A\00"
@.str.13 = [74 x i8] c" -e [0..8] Specifies the distance measure for microarray clustering\0A\00"
@.str.14 = [414 x i8] c" 0: No clustering\0A 1: Uncentered correlation\0A 2: Pearson correlation\0A 3: Uncentered correlation, absolute value\0A 4: Pearson correlation, absolute value\0A 5: Spearman's rank correlation\0A 6: Kendall's tau\0A 7: Euclidean distance\0A 8: City-block distance\0A (default: 0)\0A\00"
@.str.15 = [277 x i8] c" -m [msca] Specifies which hierarchical clustering method to use\0A m: Pairwise complete-linkage\0A s: Pairwise single-linkage\0A c: Pairwise centroid-linkage\0A a: Pairwise average-linkage\0A (default: m)\0A\00"
@.str.16 = [165 x i8] c" -k number Specifies whether to run k-means clustering\0A instead of hierarchical clustering, and the number\0A of clusters k to use\0A\00"
@.str.17 = [146 x i8] c" -r number For k-means clustering, the number of times the\0A k-means clustering algorithm is run\0A (default: 1)\0A\00"
@.str.18 = [98 x i8] c" -s Specifies to calculate an SOM instead of hierarchical\0A clustering\0A\00"
@.str.19 = [97 x i8] c" -x number Specifies the horizontal dimension of the SOM grid\0A (default: 2)\0A\00"
@.str.20 = [95 x i8] c" -y number Specifies the vertical dimension of the SOM grid\0A (default: 1)\0A\00"
@.str.21 = [118 x i8] c" -minK number Valor minimo de k para gerar cortes na arvore gerada com o hierarquico\0A (default: 2)\0A\00"
@.str.22 = [118 x i8] c" -maxK number Valor maximo de k para gerar cortes na arvore gerada com o hierarquico\0A (default: 2)\0A\00"
define void @display_help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.3, i64 0, i64 0))
%5 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.4, i64 0, i64 0))
%6 = call i32 @printf(i8* getelementptr inbounds ([117 x i8], [117 x i8]* @.str.5, i64 0, i64 0))
%7 = call i32 @printf(i8* getelementptr inbounds ([231 x i8], [231 x i8]* @.str.6, i64 0, i64 0))
%8 = call i32 @printf(i8* getelementptr inbounds ([114 x i8], [114 x i8]* @.str.7, i64 0, i64 0))
%9 = call i32 @printf(i8* getelementptr inbounds ([246 x i8], [246 x i8]* @.str.8, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([123 x i8], [123 x i8]* @.str.9, i64 0, i64 0))
%11 = call i32 @printf(i8* getelementptr inbounds ([139 x i8], [139 x i8]* @.str.10, i64 0, i64 0))
%12 = call i32 @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.11, i64 0, i64 0))
%13 = call i32 @printf(i8* getelementptr inbounds ([419 x i8], [419 x i8]* @.str.12, i64 0, i64 0))
%14 = call i32 @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.13, i64 0, i64 0))
%15 = call i32 @printf(i8* getelementptr inbounds ([414 x i8], [414 x i8]* @.str.14, i64 0, i64 0))
%16 = call i32 @printf(i8* getelementptr inbounds ([277 x i8], [277 x i8]* @.str.15, i64 0, i64 0))
%17 = call i32 @printf(i8* getelementptr inbounds ([165 x i8], [165 x i8]* @.str.16, i64 0, i64 0))
%18 = call i32 @printf(i8* getelementptr inbounds ([146 x i8], [146 x i8]* @.str.17, i64 0, i64 0))
%19 = call i32 @printf(i8* getelementptr inbounds ([98 x i8], [98 x i8]* @.str.18, i64 0, i64 0))
%20 = call i32 @printf(i8* getelementptr inbounds ([97 x i8], [97 x i8]* @.str.19, i64 0, i64 0))
%21 = call i32 @printf(i8* getelementptr inbounds ([95 x i8], [95 x i8]* @.str.20, i64 0, i64 0))
%22 = call i32 @printf(i8* getelementptr inbounds ([118 x i8], [118 x i8]* @.str.21, i64 0, i64 0))
%23 = call i32 @printf(i8* getelementptr inbounds ([118 x i8], [118 x i8]* @.str.22, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [35 x i8] c"Cluster 3.0, command-line version.\00"
@str.23 = [25 x i8] c"USAGE: cluster [options]\00"
@str.24 = [9 x i8] c"options:\00"
@str.25 = [36 x i8] c" -v, --version Version information\00"
@str.26 = [29 x i8] c" -f filename File loading\00"
@str.27 = [116 x i8] c" -l Specifies to log-transform the data before clustering\0A (default is no log-transform)\00"
@str.28 = [230 x i8] c" -cg a|m Specifies whether to center each row (gene)\0A in the data\0A a: Subtract the mean of each row\0A m: Subtract the median of each row\0A (default is no centering)\00"
@str.29 = [113 x i8] c" -ng Specifies to normalize each row (gene) in the data\0A (default is no normalization)\00"
@str.30 = [245 x i8] c" -ca a|m Specifies whether to center each column (microarray)\0A in the data\0A a: Subtract the mean of each column\0A m: Subtract the median of each column\0A (default is no centering)\00"
@str.31 = [122 x i8] c" -na Specifies to normalize each column (microarray) in the data\0A (default is no normalization)\00"
@str.32 = [138 x i8] c" -u jobname Allows you to specify a different name for the output files\0A (default is derived from the input file name)\00"
@str.33 = [67 x i8] c" -g [0..8] Specifies the distance measure for gene clustering\00"
@str.34 = [418 x i8] c" 0: No gene clustering\0A 1: Uncentered correlation\0A 2: Pearson correlation\0A 3: Uncentered correlation, absolute value\0A 4: Pearson correlation, absolute value\0A 5: Spearman's rank correlation\0A 6: Kendall's tau\0A 7: Euclidean distance\0A 8: City-block distance\0A (default: 1)\00"
@str.35 = [73 x i8] c" -e [0..8] Specifies the distance measure for microarray clustering\00"
@str.36 = [413 x i8] c" 0: No clustering\0A 1: Uncentered correlation\0A 2: Pearson correlation\0A 3: Uncentered correlation, absolute value\0A 4: Pearson correlation, absolute value\0A 5: Spearman's rank correlation\0A 6: Kendall's tau\0A 7: Euclidean distance\0A 8: City-block distance\0A (default: 0)\00"
@str.37 = [276 x i8] c" -m [msca] Specifies which hierarchical clustering method to use\0A m: Pairwise complete-linkage\0A s: Pairwise single-linkage\0A c: Pairwise centroid-linkage\0A a: Pairwise average-linkage\0A (default: m)\00"
@str.38 = [164 x i8] c" -k number Specifies whether to run k-means clustering\0A instead of hierarchical clustering, and the number\0A of clusters k to use\00"
@str.39 = [145 x i8] c" -r number For k-means clustering, the number of times the\0A k-means clustering algorithm is run\0A (default: 1)\00"
@str.40 = [97 x i8] c" -s Specifies to calculate an SOM instead of hierarchical\0A clustering\00"
@str.41 = [96 x i8] c" -x number Specifies the horizontal dimension of the SOM grid\0A (default: 2)\00"
@str.42 = [94 x i8] c" -y number Specifies the vertical dimension of the SOM grid\0A (default: 1)\00"
@str.43 = [117 x i8] c" -minK number Valor minimo de k para gerar cortes na arvore gerada com o hierarquico\0A (default: 2)\00"
@str.44 = [117 x i8] c" -maxK number Valor maximo de k para gerar cortes na arvore gerada com o hierarquico\0A (default: 2)\00"
define void @display_help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.23, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.24, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.25, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.26, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([116 x i8], [116 x i8]* @str.27, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([230 x i8], [230 x i8]* @str.28, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([113 x i8], [113 x i8]* @str.29, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([245 x i8], [245 x i8]* @str.30, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([122 x i8], [122 x i8]* @str.31, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([138 x i8], [138 x i8]* @str.32, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.33, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([418 x i8], [418 x i8]* @str.34, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.35, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([413 x i8], [413 x i8]* @str.36, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([276 x i8], [276 x i8]* @str.37, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([164 x i8], [164 x i8]* @str.38, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([145 x i8], [145 x i8]* @str.39, i64 0, i64 0))
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([97 x i8], [97 x i8]* @str.40, i64 0, i64 0))
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([96 x i8], [96 x i8]* @str.41, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([94 x i8], [94 x i8]* @str.42, i64 0, i64 0))
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([117 x i8], [117 x i8]* @str.43, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([117 x i8], [117 x i8]* @str.44, i64 0, i64 0))
ret void
}