int proba_pair_wise(char *s1, char *s2, int *lib) {
  int NumInsertStates = 2;
  int NumMatrixTypes = 5;
  float initDistribMat[] = {0.6814756989f, 8.615339902e-05f, 8.615339902e-05f,
                            0.1591759622f, 0.1591759622f};
  float gapOpen[] = {0.0119511066f, 0.0119511066f, 0.008008334786f,
                     0.008008334786f};
  float gapExtend[] = {0.3965826333f, 0.3965826333f, 0.8988758326f,
                       0.8988758326f};
  char alphabetDefault[] = "ARNDCQEGHILKMFPSTWYV";
  float emitSingleDefault[20] = {
      0.07831005f, 0.05246024f, 0.04433257f, 0.05130349f, 0.02189704f,
      0.03585766f, 0.05615771f, 0.07783433f, 0.02601093f, 0.06511648f,
      0.09716489f, 0.05877077f, 0.02438117f, 0.04463228f, 0.03940142f,
      0.05849916f, 0.05115306f, 0.01203523f, 0.03124726f, 0.07343426f};
  float emitPairsDefault[20][20] = {
      {0.02373072f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
       0.0f,        0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f},
      {0.00244502f, 0.01775118f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
       0.0f,        0.0f,        0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
       0.0f,        0.0f,        0.0f, 0.0f, 0.0f, 0.0f},
      {0.00210228f, 0.00207782f, 0.01281864f, 0.0f, 0.0f, 0.0f, 0.0f,
       0.0f,        0.0f,        0.0f,        0.0f, 0.0f, 0.0f, 0.0f,
       0.0f,        0.0f,        0.0f,        0.0f, 0.0f, 0.0f},
      {0.00223549f, 0.00161657f, 0.00353540f, 0.01911178f, 0.0f, 0.0f, 0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f, 0.0f, 0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f, 0.0f},
      {0.00145515f, 0.00044701f, 0.00042479f, 0.00036798f, 0.01013470f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00219102f, 0.00253532f, 0.00158223f, 0.00176784f, 0.00032102f,
       0.00756604f, 0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00332218f, 0.00268865f, 0.00224738f, 0.00496800f, 0.00037956f,
       0.00345128f, 0.01676565f, 0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00597898f, 0.00194865f, 0.00288882f, 0.00235249f, 0.00071206f,
       0.00142432f, 0.00214860f, 0.04062876f, 0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00114353f, 0.00132105f, 0.00141205f, 0.00097077f, 0.00026421f,
       0.00113901f, 0.00131767f, 0.00103704f, 0.00867996f, 0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00318853f, 0.00138145f, 0.00104273f, 0.00105355f, 0.00094040f,
       0.00100883f, 0.00124207f, 0.00142520f, 0.00059716f, 0.01778263f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00449576f, 0.00246811f, 0.00160275f, 0.00161966f, 0.00138494f,
       0.00180553f, 0.00222063f, 0.00212853f, 0.00111754f, 0.01071834f,
       0.03583921f, 0.0f,        0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00331693f, 0.00595650f, 0.00257310f, 0.00252518f, 0.00046951f,
       0.00312308f, 0.00428420f, 0.00259311f, 0.00121376f, 0.00157852f,
       0.00259626f, 0.01612228f, 0.0f,        0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00148878f, 0.00076734f, 0.00063401f, 0.00047808f, 0.00037421f,
       0.00075546f, 0.00076105f, 0.00066504f, 0.00042237f, 0.00224097f,
       0.00461939f, 0.00096120f, 0.00409522f, 0.0f,        0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00165004f, 0.00090768f, 0.00084658f, 0.00069041f, 0.00052274f,
       0.00059248f, 0.00078814f, 0.00115204f, 0.00072545f, 0.00279948f,
       0.00533369f, 0.00087222f, 0.00116111f, 0.01661038f, 0.0f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00230618f, 0.00106268f, 0.00100282f, 0.00125381f, 0.00034766f,
       0.00090111f, 0.00151550f, 0.00155601f, 0.00049078f, 0.00103767f,
       0.00157310f, 0.00154836f, 0.00046718f, 0.00060701f, 0.01846071f,
       0.0f,        0.0f,        0.0f,        0.0f,        0.0f},
      {0.00631752f, 0.00224540f, 0.00301397f, 0.00285226f, 0.00094867f,
       0.00191155f, 0.00293898f, 0.00381962f, 0.00116422f, 0.00173565f,
       0.00250962f, 0.00312633f, 0.00087787f, 0.00119036f, 0.00180037f,
       0.01346609f, 0.0f,        0.0f,        0.0f,        0.0f},
      {0.00389995f, 0.00186053f, 0.00220144f, 0.00180488f, 0.00073798f,
       0.00154526f, 0.00216760f, 0.00214841f, 0.00077747f, 0.00248968f,
       0.00302273f, 0.00250862f, 0.00093371f, 0.00107595f, 0.00147982f,
       0.00487295f, 0.01299436f, 0.0f,        0.0f,        0.0f},
      {0.00039119f, 0.00029139f, 0.00021006f, 0.00016015f, 0.00010666f,
       0.00020592f, 0.00023815f, 0.00038786f, 0.00019097f, 0.00039549f,
       0.00076736f, 0.00028448f, 0.00016253f, 0.00085751f, 0.00015674f,
       0.00026525f, 0.00024961f, 0.00563625f, 0.0f,        0.0f},
      {0.00131840f, 0.00099430f, 0.00074960f, 0.00066005f, 0.00036626f,
       0.00070192f, 0.00092548f, 0.00089301f, 0.00131038f, 0.00127857f,
       0.00219713f, 0.00100817f, 0.00054105f, 0.00368739f, 0.00047608f,
       0.00102648f, 0.00094759f, 0.00069226f, 0.00999315f, 0.0f},
      {0.00533241f, 0.00169359f, 0.00136609f, 0.00127915f, 0.00119152f,
       0.00132844f, 0.00178697f, 0.00194579f, 0.00071553f, 0.01117956f,
       0.00914460f, 0.00210897f, 0.00197461f, 0.00256159f, 0.00135781f,
       0.00241601f, 0.00343452f, 0.00038538f, 0.00148001f, 0.02075171f}};
  float thr = 0.01;
  int I = strlen(s1);
  int J = strlen(s2);
  int l, i, j;
  float *emitSingle, *s, **emitPairs, **p;
  l = strlen(alphabetDefault);
  p = declare_float(l, l);
  emitPairs = declare_float(256, 256);
  s = (float *)calloc(l, sizeof(float));
  emitSingle = (float *)calloc(256, sizeof(float));
  for (i = 0; i < l; i++) {
    s[i] = emitSingleDefault[i];
    for (j = 0; j < l; j++) {
      p[i][j] = emitPairsDefault[i][j];
    }
  }
  for (i = 0; i < 256; i++) {
    emitSingle[i] = 1;
    for (j = 0; j < 256; j++) {
      emitPairs[i][j] = 1;
    }
  }
  for (i = 0; i < l; i++) {
    int C1, c1, C2, c2;
    c1 = tolower(alphabetDefault[i]);
    C1 = toupper(alphabetDefault[i]);
    emitSingle[c1] = s[i];
    emitSingle[C1] = s[i];
    for (j = 0; j <= i; j++) {
      c2 = tolower(alphabetDefault[j]);
      C2 = toupper(alphabetDefault[j]);
      emitPairs[c1][c2] = p[i][j];
      emitPairs[C1][c2] = p[i][j];
      emitPairs[C1][C2] = p[i][j];
      emitPairs[c1][C2] = p[i][j];
      emitPairs[c2][c1] = p[i][j];
      emitPairs[C2][c1] = p[i][j];
      emitPairs[C2][C1] = p[i][j];
      emitPairs[c2][C1] = p[i][j];
    }
  }
  float **transMat, **insProb, **matchProb, *initialDistribution, **transProb;
  transMat = declare_float(2 * NumInsertStates + 1, 2 * NumInsertStates + 1);
  transProb = declare_float(2 * NumInsertStates + 1, 2 * NumInsertStates + 1);
  insProb = declare_float(256, NumMatrixTypes);
  matchProb = declare_float(256, 256);
  initialDistribution = (float *)calloc(2 * NumMatrixTypes + 1, sizeof(float));
  ProbabilisticModel(NumMatrixTypes, NumInsertStates, initDistribMat,
                     emitSingle, emitPairs, gapOpen, gapExtend, transMat,
                     insProb, matchProb, initialDistribution, transProb);
  float ***TinsProb, *TmatchProb;
  l = (I + 1) * (J + 1);
  TmatchProb = (float *)calloc(l, sizeof(float));
  l = (((I) > (J)) ? (I) : (J)) + 1;
  TinsProb = declare_arrayN(2, NumMatrixTypes, l);
  float *F, *B;
  get_tot_prob2(s1, s2, NumMatrixTypes, matchProb, insProb, TmatchProb,
                TinsProb);
  F = forward_proba_pair_wise(I, J, NumMatrixTypes, NumInsertStates, transMat,
                              initialDistribution, TmatchProb, TinsProb,
                              transProb);
  B = backward_proba_pair_wise(I, J, NumMatrixTypes, NumInsertStates, transMat,
                               initialDistribution, TmatchProb, TinsProb,
                               transProb);
  int list_n =
      ProbaMatrix2CL(I, J, NumMatrixTypes, NumInsertStates, F, B, thr, lib);
  free(emitSingle);
  free(s);
  free(initialDistribution);
  free(TmatchProb);
  free(F);
  free(B);
  deallocate2D_float(emitPairs, 256);
  deallocate2D_float(p, strlen(alphabetDefault));
  deallocate2D_float(transMat, 2 * NumInsertStates + 1);
  deallocate2D_float(transProb, 2 * NumInsertStates + 1);
  deallocate2D_float(insProb, 256);
  deallocate2D_float(matchProb, 256);
  deallocate3D_float(TinsProb, 2, NumMatrixTypes);
  return list_n;
}


x86 assembly (clang, -O0):
<proba_pair_wise>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %rbx
sub    $0x7d8,%rsp
mov    %rdi,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
mov    %rdx,-0x30(%rbp)
movl   $0x2,-0x34(%rbp)
movl   $0x5,-0x38(%rbp)
mov    0xdef(%rip),%rax
mov    %rax,-0x50(%rbp)
mov    0xdec(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    0xdea(%rip),%eax
mov    %eax,-0x40(%rbp)
mov    0x1480(%rip),%rax
mov    %rax,-0x60(%rbp)
mov    0x147d(%rip),%rax
mov    %rax,-0x58(%rbp)
mov    0x147a(%rip),%rax
mov    %rax,-0x70(%rbp)
mov    0x1477(%rip),%rax
mov    %rax,-0x68(%rbp)
mov    0x1474(%rip),%rax
mov    %rax,-0x90(%rbp)
mov    0x146e(%rip),%rax
mov    %rax,-0x88(%rbp)
mov    0x1469(%rip),%eax
mov    %eax,-0x80(%rbp)
mov    0x1464(%rip),%al
mov    %al,-0x7c(%rbp)
lea    -0xe0(%rbp),%rdi
lea    0xd8f(%rip),%rsi
mov    $0x50,%edx
call   10e0 <memcpy@plt>
lea    -0x720(%rbp),%rdi
lea    0xdc7(%rip),%rsi
mov    $0x640,%edx
call   10e0 <memcpy@plt>
movss  0xd35(%rip),%xmm0
movss  %xmm0,-0x724(%rbp)
ff
mov    -0x20(%rbp),%rdi
call   1080 <strlen@plt>
mov    %eax,-0x728(%rbp)
mov    -0x28(%rbp),%rdi
call   1080 <strlen@plt>
mov    %eax,-0x72c(%rbp)
lea    -0x90(%rbp),%rdi
call   1080 <strlen@plt>
mov    %eax,-0x730(%rbp)
mov    -0x730(%rbp),%edi
mov    -0x730(%rbp),%esi
mov    $0x0,%al
call   1090 <declare_float@plt>
cltq
mov    %rax,-0x758(%rbp)
mov    $0x100,%esi
mov    %esi,%edi
mov    $0x0,%al
call   1090 <declare_float@plt>
cltq
mov    %rax,-0x750(%rbp)
movslq -0x730(%rbp),%rdi
mov    $0x4,%esi
call   10b0 <calloc@plt>
mov    %rax,-0x748(%rbp)
mov    $0x100,%edi
mov    $0x4,%esi
call   10b0 <calloc@plt>
mov    %rax,-0x740(%rbp)
movl   $0x0,-0x734(%rbp)
mov    -0x734(%rbp),%eax
cmp    -0x730(%rbp),%eax
jge    142b <proba_pair_wise+0x23b>
movslq -0x734(%rbp),%rax
movss  -0xe0(%rbp,%rax,4),%xmm0
ff ff
mov    -0x748(%rbp),%rax
movslq -0x734(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movl   $0x0,-0x738(%rbp)
mov    -0x738(%rbp),%eax
cmp    -0x730(%rbp),%eax
jge    1412 <proba_pair_wise+0x222>
movslq -0x734(%rbp),%rcx
lea    -0x720(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x738(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x738(%rbp)
jmp    13ad <proba_pair_wise+0x1bd>
jmp    1417 <proba_pair_wise+0x227>
mov    -0x734(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x734(%rbp)
jmp    136e <proba_pair_wise+0x17e>
movl   $0x0,-0x734(%rbp)
cmpl   $0x100,-0x734(%rbp)
jge    14cd <proba_pair_wise+0x2dd>
mov    -0x740(%rbp),%rax
movslq -0x734(%rbp),%rcx
movss  0xba9(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
movl   $0x0,-0x738(%rbp)
cmpl   $0x100,-0x738(%rbp)
jge    14b4 <proba_pair_wise+0x2c4>
mov    -0x750(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  0xb69(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x738(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x738(%rbp)
jmp    146a <proba_pair_wise+0x27a>
jmp    14b9 <proba_pair_wise+0x2c9>
mov    -0x734(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x734(%rbp)
jmp    1435 <proba_pair_wise+0x245>
movl   $0x0,-0x734(%rbp)
mov    -0x734(%rbp),%eax
cmp    -0x730(%rbp),%eax
jge    17c6 <proba_pair_wise+0x5d6>
movslq -0x734(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%edi
ff
call   1100 <tolower@plt>
mov    %eax,-0x760(%rbp)
movslq -0x734(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%edi
ff
call   1040 <toupper@plt>
mov    %eax,-0x75c(%rbp)
mov    -0x748(%rbp),%rax
movslq -0x734(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x740(%rbp),%rax
movslq -0x760(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x748(%rbp),%rax
movslq -0x734(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x740(%rbp),%rax
movslq -0x75c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movl   $0x0,-0x738(%rbp)
mov    -0x738(%rbp),%eax
cmp    -0x734(%rbp),%eax
jg     17ad <proba_pair_wise+0x5bd>
movslq -0x738(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%edi
ff
call   1100 <tolower@plt>
mov    %eax,-0x768(%rbp)
movslq -0x738(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%edi
ff
call   1040 <toupper@plt>
mov    %eax,-0x764(%rbp)
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x750(%rbp),%rax
movslq -0x760(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x768(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x750(%rbp),%rax
movslq -0x75c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x768(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x750(%rbp),%rax
movslq -0x75c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x764(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x750(%rbp),%rax
movslq -0x760(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x764(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x750(%rbp),%rax
movslq -0x768(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x760(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x750(%rbp),%rax
movslq -0x764(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x760(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x750(%rbp),%rax
movslq -0x764(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x75c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x758(%rbp),%rax
movslq -0x734(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x738(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x750(%rbp),%rax
movslq -0x768(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x75c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x738(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x738(%rbp)
jmp    1573 <proba_pair_wise+0x383>
jmp    17b2 <proba_pair_wise+0x5c2>
mov    -0x734(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x734(%rbp)
jmp    14d7 <proba_pair_wise+0x2e7>
mov    -0x34(%rbp),%edi
shl    $0x1,%edi
add    $0x1,%edi
mov    -0x34(%rbp),%esi
shl    $0x1,%esi
add    $0x1,%esi
mov    $0x0,%al
call   1090 <declare_float@plt>
cltq
mov    %rax,-0x770(%rbp)
mov    -0x34(%rbp),%edi
shl    $0x1,%edi
add    $0x1,%edi
mov    -0x34(%rbp),%esi
shl    $0x1,%esi
add    $0x1,%esi
mov    $0x0,%al
call   1090 <declare_float@plt>
cltq
mov    %rax,-0x790(%rbp)
mov    -0x38(%rbp),%esi
mov    $0x100,%edi
mov    $0x0,%al
call   1090 <declare_float@plt>
cltq
mov    %rax,-0x778(%rbp)
mov    $0x100,%esi
mov    %esi,%edi
mov    $0x0,%al
call   1090 <declare_float@plt>
cltq
mov    %rax,-0x780(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
movslq %eax,%rdi
mov    $0x4,%esi
call   10b0 <calloc@plt>
mov    %rax,-0x788(%rbp)
mov    -0x38(%rbp),%edi
mov    -0x34(%rbp),%esi
lea    -0x50(%rbp),%rdx
mov    -0x740(%rbp),%rcx
mov    -0x750(%rbp),%r8
lea    -0x60(%rbp),%r9
lea    -0x70(%rbp),%r15
mov    -0x770(%rbp),%r14
mov    -0x778(%rbp),%rbx
mov    -0x780(%rbp),%r11
mov    -0x788(%rbp),%r10
mov    -0x790(%rbp),%rax
mov    %r15,(%rsp)
mov    %r14,0x8(%rsp)
mov    %rbx,0x10(%rsp)
mov    %r11,0x18(%rsp)
mov    %r10,0x20(%rsp)
mov    %rax,0x28(%rsp)
mov    $0x0,%al
call   10f0 <ProbabilisticModel@plt>
mov    -0x728(%rbp),%eax
add    $0x1,%eax
mov    -0x72c(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    %eax,-0x730(%rbp)
movslq -0x730(%rbp),%rdi
mov    $0x4,%esi
call   10b0 <calloc@plt>
mov    %rax,-0x7a0(%rbp)
mov    -0x728(%rbp),%eax
cmp    -0x72c(%rbp),%eax
jle    1913 <proba_pair_wise+0x723>
mov    -0x728(%rbp),%eax
mov    %eax,-0x7b8(%rbp)
jmp    191f <proba_pair_wise+0x72f>
mov    -0x72c(%rbp),%eax
mov    %eax,-0x7b8(%rbp)
mov    -0x7b8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x730(%rbp)
mov    -0x38(%rbp),%esi
mov    -0x730(%rbp),%edx
mov    $0x2,%edi
mov    $0x0,%al
call   10a0 <declare_arrayN@plt>
cltq
mov    %rax,-0x798(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%rsi
mov    -0x38(%rbp),%edx
mov    -0x780(%rbp),%rcx
mov    -0x778(%rbp),%r8
mov    -0x7a0(%rbp),%r9
mov    -0x798(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x0,%al
call   10d0 <get_tot_prob2@plt>
mov    -0x728(%rbp),%edi
mov    -0x72c(%rbp),%esi
mov    -0x38(%rbp),%edx
mov    -0x34(%rbp),%ecx
mov    -0x770(%rbp),%r8
mov    -0x788(%rbp),%r9
mov    -0x7a0(%rbp),%r11
mov    -0x798(%rbp),%r10
mov    -0x790(%rbp),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x0,%al
call   10c0 <forward_proba_pair_wise@plt>
cltq
mov    %rax,-0x7a8(%rbp)
mov    -0x728(%rbp),%edi
mov    -0x72c(%rbp),%esi
mov    -0x38(%rbp),%edx
mov    -0x34(%rbp),%ecx
mov    -0x770(%rbp),%r8
mov    -0x788(%rbp),%r9
mov    -0x7a0(%rbp),%r11
mov    -0x798(%rbp),%r10
mov    -0x790(%rbp),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x0,%al
call   1110 <backward_proba_pair_wise@plt>
cltq
mov    %rax,-0x7b0(%rbp)
mov    -0x728(%rbp),%edi
mov    -0x72c(%rbp),%esi
mov    -0x38(%rbp),%edx
mov    -0x34(%rbp),%ecx
mov    -0x7a8(%rbp),%r8
mov    -0x7b0(%rbp),%r9
movss  -0x724(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
mov    -0x30(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x1,%al
call   1070 <ProbaMatrix2CL@plt>
mov    %eax,-0x7b4(%rbp)
mov    -0x740(%rbp),%rdi
call   1030 <free@plt>
mov    -0x748(%rbp),%rdi
call   1030 <free@plt>
mov    -0x788(%rbp),%rdi
call   1030 <free@plt>
mov    -0x7a0(%rbp),%rdi
call   1030 <free@plt>
mov    -0x7a8(%rbp),%rdi
call   1030 <free@plt>
mov    -0x7b0(%rbp),%rdi
call   1030 <free@plt>
mov    -0x750(%rbp),%rdi
mov    $0x100,%esi
mov    $0x0,%al
call   1050 <deallocate2D_float@plt>
mov    -0x758(%rbp),%rax
mov    %rax,-0x7c0(%rbp)
lea    -0x90(%rbp),%rdi
call   1080 <strlen@plt>
mov    -0x7c0(%rbp),%rdi
mov    %rax,%rsi
mov    $0x0,%al
call   1050 <deallocate2D_float@plt>
mov    -0x770(%rbp),%rdi
mov    -0x34(%rbp),%esi
shl    $0x1,%esi
add    $0x1,%esi
mov    $0x0,%al
call   1050 <deallocate2D_float@plt>
mov    -0x790(%rbp),%rdi
mov    -0x34(%rbp),%esi
shl    $0x1,%esi
add    $0x1,%esi
mov    $0x0,%al
call   1050 <deallocate2D_float@plt>
mov    -0x778(%rbp),%rdi
mov    $0x100,%esi
mov    $0x0,%al
call   1050 <deallocate2D_float@plt>
mov    -0x780(%rbp),%rdi
mov    $0x100,%esi
mov    $0x0,%al
call   1050 <deallocate2D_float@plt>
mov    -0x798(%rbp),%rdi
mov    -0x38(%rbp),%edx
mov    $0x2,%esi
mov    $0x0,%al
call   1060 <deallocate3D_float@plt>
mov    -0x7b4(%rbp),%eax
add    $0x7d8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<proba_pair_wise>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc8,%rsp
mov    %rdx,0x78(%rsp)
mov    %rsi,%rbx
mov    0xe51(%rip),%eax
mov    %eax,0x90(%rsp)
movaps 0xe33(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
movaps 0xdf4(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
movaps 0xdf5(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
mov    %rdi,0x68(%rsp)
call   1080 <strlen@plt>
mov    %rax,0x70(%rsp)
mov    %rbx,0x10(%rsp)
mov    %rbx,%rdi
call   1080 <strlen@plt>
mov    %rax,0x38(%rsp)
xor    %ebx,%ebx
mov    $0x14,%edi
mov    $0x14,%esi
xor    %eax,%eax
call   1090 <declare_float@plt>
movslq %eax,%r14
mov    $0x100,%edi
mov    $0x100,%esi
xor    %eax,%eax
call   1090 <declare_float@plt>
movslq %eax,%r12
mov    $0x14,%edi
mov    $0x4,%esi
call   10b0 <calloc@plt>
mov    %rax,%rbp
mov    $0x100,%edi
mov    $0x4,%esi
call   10b0 <calloc@plt>
mov    %rax,%r15
movaps 0xdb7(%rip),%xmm0
movups %xmm0,0x0(%rbp)
movaps 0xdbc(%rip),%xmm0
movups %xmm0,0x10(%rbp)
movaps 0xdc1(%rip),%xmm0
movups %xmm0,0x20(%rbp)
movaps 0xdc6(%rip),%xmm0
movups %xmm0,0x30(%rbp)
movaps 0xdcb(%rip),%xmm0
mov    %rbp,0x40(%rsp)
movups %xmm0,0x40(%rbp)
lea    0xe17(%rip),%rax
cs nopw 0x0(%rax,%rax,1)
nop
mov    (%r14,%rbx,8),%rcx
movss  -0x4c(%rax),%xmm0
movss  %xmm0,(%rcx)
movss  -0x48(%rax),%xmm0
movss  %xmm0,0x4(%rcx)
movss  -0x44(%rax),%xmm0
movss  %xmm0,0x8(%rcx)
movss  -0x40(%rax),%xmm0
movss  %xmm0,0xc(%rcx)
movss  -0x3c(%rax),%xmm0
movss  %xmm0,0x10(%rcx)
movss  -0x38(%rax),%xmm0
movss  %xmm0,0x14(%rcx)
movss  -0x34(%rax),%xmm0
movss  %xmm0,0x18(%rcx)
movss  -0x30(%rax),%xmm0
movss  %xmm0,0x1c(%rcx)
movss  -0x2c(%rax),%xmm0
movss  %xmm0,0x20(%rcx)
movss  -0x28(%rax),%xmm0
movss  %xmm0,0x24(%rcx)
movss  -0x24(%rax),%xmm0
movss  %xmm0,0x28(%rcx)
movss  -0x20(%rax),%xmm0
movss  %xmm0,0x2c(%rcx)
movss  -0x1c(%rax),%xmm0
movss  %xmm0,0x30(%rcx)
movss  -0x18(%rax),%xmm0
movss  %xmm0,0x34(%rcx)
movss  -0x14(%rax),%xmm0
movss  %xmm0,0x38(%rcx)
movss  -0x10(%rax),%xmm0
movss  %xmm0,0x3c(%rcx)
movss  -0xc(%rax),%xmm0
movss  %xmm0,0x40(%rcx)
movss  -0x8(%rax),%xmm0
movss  %xmm0,0x44(%rcx)
movss  -0x4(%rax),%xmm0
movss  %xmm0,0x48(%rcx)
movss  (%rax),%xmm0
movss  %xmm0,0x4c(%rcx)
add    $0x1,%rbx
add    $0x50,%rax
cmp    $0x14,%rbx
jne    12f0 <proba_pair_wise+0x110>
xor    %eax,%eax
movaps 0xc2b(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nop
movl   $0x3f800000,(%r15,%rax,4)
3f
mov    (%r12,%rax,8),%rcx
movups %xmm0,(%rcx)
movups %xmm0,0x10(%rcx)
movups %xmm0,0x20(%rcx)
movups %xmm0,0x30(%rcx)
movups %xmm0,0x40(%rcx)
movups %xmm0,0x50(%rcx)
movups %xmm0,0x60(%rcx)
movups %xmm0,0x70(%rcx)
movups %xmm0,0x80(%rcx)
movups %xmm0,0x90(%rcx)
movups %xmm0,0xa0(%rcx)
movups %xmm0,0xb0(%rcx)
movups %xmm0,0xc0(%rcx)
movups %xmm0,0xd0(%rcx)
movups %xmm0,0xe0(%rcx)
movups %xmm0,0xf0(%rcx)
movups %xmm0,0x100(%rcx)
movups %xmm0,0x110(%rcx)
movups %xmm0,0x120(%rcx)
movups %xmm0,0x130(%rcx)
movups %xmm0,0x140(%rcx)
movups %xmm0,0x150(%rcx)
movups %xmm0,0x160(%rcx)
movups %xmm0,0x170(%rcx)
movups %xmm0,0x180(%rcx)
movups %xmm0,0x190(%rcx)
movups %xmm0,0x1a0(%rcx)
movups %xmm0,0x1b0(%rcx)
movups %xmm0,0x1c0(%rcx)
movups %xmm0,0x1d0(%rcx)
movups %xmm0,0x1e0(%rcx)
movups %xmm0,0x1f0(%rcx)
movups %xmm0,0x200(%rcx)
movups %xmm0,0x210(%rcx)
movups %xmm0,0x220(%rcx)
movups %xmm0,0x230(%rcx)
movups %xmm0,0x240(%rcx)
movups %xmm0,0x250(%rcx)
movups %xmm0,0x260(%rcx)
movups %xmm0,0x270(%rcx)
movups %xmm0,0x280(%rcx)
movups %xmm0,0x290(%rcx)
movups %xmm0,0x2a0(%rcx)
movups %xmm0,0x2b0(%rcx)
movups %xmm0,0x2c0(%rcx)
movups %xmm0,0x2d0(%rcx)
movups %xmm0,0x2e0(%rcx)
movups %xmm0,0x2f0(%rcx)
movups %xmm0,0x300(%rcx)
movups %xmm0,0x310(%rcx)
movups %xmm0,0x320(%rcx)
movups %xmm0,0x330(%rcx)
movups %xmm0,0x340(%rcx)
movups %xmm0,0x350(%rcx)
movups %xmm0,0x360(%rcx)
movups %xmm0,0x370(%rcx)
movups %xmm0,0x380(%rcx)
movups %xmm0,0x390(%rcx)
movups %xmm0,0x3a0(%rcx)
movups %xmm0,0x3b0(%rcx)
movups %xmm0,0x3c0(%rcx)
movups %xmm0,0x3d0(%rcx)
movups %xmm0,0x3e0(%rcx)
movups %xmm0,0x3f0(%rcx)
add    $0x1,%rax
cmp    $0x100,%rax
jne    13e0 <proba_pair_wise+0x200>
mov    $0x1,%eax
mov    %rax,0x8(%rsp)
movss  0xa7b(%rip),%xmm0
movss  %xmm0,(%rsp)
xor    %ebx,%ebx
lea    0x112d(%rip),%rcx
mov    %r14,0x48(%rsp)
mov    %r15,0x18(%rsp)
nopl   (%rax)
movsbl (%rbx,%rcx,1),%ebp
mov    %ebp,%edi
call   10f0 <tolower@plt>
mov    %eax,%r13d
mov    %ebp,%edi
call   1040 <toupper@plt>
movslq %r13d,%rcx
movss  (%rsp),%xmm0
movss  %xmm0,(%r15,%rcx,4)
cltq
movss  %xmm0,(%r15,%rax,4)
mov    %rbx,0x20(%rsp)
mov    (%r14,%rbx,8),%r13
mov    %rcx,(%rsp)
mov    (%r12,%rcx,8),%rcx
mov    %rcx,0x28(%rsp)
mov    %rax,0x30(%rsp)
mov    (%r12,%rax,8),%r14
mov    %r12,%r15
xor    %r12d,%r12d
lea    0x10c9(%rip),%rax
movsbl (%r12,%rax,1),%ebp
mov    %ebp,%edi
call   10f0 <tolower@plt>
mov    %eax,%ebx
mov    %ebp,%edi
call   1040 <toupper@plt>
movss  0x0(%r13,%r12,4),%xmm0
movslq %ebx,%rcx
mov    0x28(%rsp),%rdx
movss  %xmm0,(%rdx,%rcx,4)
movss  0x0(%r13,%r12,4),%xmm0
movss  %xmm0,(%r14,%rcx,4)
movss  0x0(%r13,%r12,4),%xmm0
cltq
movss  %xmm0,(%r14,%rax,4)
movss  0x0(%r13,%r12,4),%xmm0
movss  %xmm0,(%rdx,%rax,4)
movss  0x0(%r13,%r12,4),%xmm0
mov    (%r15,%rcx,8),%rcx
mov    (%rsp),%rdx
movss  %xmm0,(%rcx,%rdx,4)
movss  0x0(%r13,%r12,4),%xmm0
mov    (%r15,%rax,8),%rax
movss  %xmm0,(%rax,%rdx,4)
movss  0x0(%r13,%r12,4),%xmm0
mov    0x30(%rsp),%rdx
movss  %xmm0,(%rax,%rdx,4)
movss  0x0(%r13,%r12,4),%xmm0
movss  %xmm0,(%rcx,%rdx,4)
add    $0x1,%r12
cmp    %r12,0x8(%rsp)
jne    1620 <proba_pair_wise+0x440>
lea    0x1021(%rip),%rcx
mov    %r15,%r12
mov    0x20(%rsp),%rbx
add    $0x1,%rbx
cmp    $0x14,%rbx
mov    0x8(%rsp),%rax
je     170d <proba_pair_wise+0x52d>
add    $0x1,%rax
mov    %rax,0x8(%rsp)
mov    0x40(%rsp),%rax
movss  (%rax,%rbx,4),%xmm0
movss  %xmm0,(%rsp)
mov    0x48(%rsp),%r14
mov    0x18(%rsp),%r15
jmp    15d0 <proba_pair_wise+0x3f0>
mov    $0x5,%edi
mov    $0x5,%esi
xor    %eax,%eax
call   1090 <declare_float@plt>
movslq %eax,%r13
mov    %r13,0x8(%rsp)
mov    $0x5,%edi
mov    $0x5,%esi
xor    %eax,%eax
call   1090 <declare_float@plt>
movslq %eax,%r15
mov    %r15,(%rsp)
mov    $0x100,%edi
mov    $0x5,%esi
xor    %eax,%eax
call   1090 <declare_float@plt>
movslq %eax,%r14
mov    $0x100,%edi
mov    $0x100,%esi
xor    %eax,%eax
call   1090 <declare_float@plt>
movslq %eax,%rbx
mov    $0xb,%edi
mov    $0x4,%esi
call   10b0 <calloc@plt>
mov    %rax,%rbp
mov    %rax,0x58(%rsp)
lea    0xa0(%rsp),%r10
lea    0x80(%rsp),%rdx
lea    0xb0(%rsp),%r9
mov    $0x5,%edi
mov    $0x2,%esi
mov    0x18(%rsp),%rcx
mov    %r12,%r8
mov    %r12,0x60(%rsp)
mov    $0x0,%eax
push   %r15
push   %rbp
push   %rbx
mov    %rbx,%r15
mov    %rbx,0x48(%rsp)
push   %r14
mov    %r14,%rbx
mov    %r14,0x48(%rsp)
push   %r13
push   %r10
call   10e0 <ProbabilisticModel@plt>
add    $0x30,%rsp
mov    0x38(%rsp),%r12
mov    %r12,%rax
add    $0x1,%rax
mov    0x70(%rsp),%r14
mov    %r14,%rcx
shl    $0x20,%rcx
movabs $0x100000000,%rdi
add    %rcx,%rdi
imul   %rax,%rdi
sar    $0x20,%rdi
mov    $0x4,%esi
call   10b0 <calloc@plt>
mov    %rax,%r13
cmp    %r12d,%r14d
mov    %r12d,%edx
cmovg  %r14d,%edx
add    $0x1,%edx
mov    $0x2,%edi
mov    $0x5,%esi
xor    %eax,%eax
call   10a0 <declare_arrayN@plt>
movslq %eax,%rbp
sub    $0x8,%rsp
mov    0x70(%rsp),%rdi
mov    0x18(%rsp),%rsi
mov    $0x5,%edx
mov    %r15,%rcx
mov    %rbx,%r8
mov    %r13,%r9
mov    %r13,0x58(%rsp)
xor    %eax,%eax
push   %rbp
mov    %rbp,%rbx
call   10d0 <get_tot_prob2@plt>
add    $0x8,%rsp
mov    %r14d,%edi
mov    %r12d,%esi
mov    $0x5,%edx
mov    $0x2,%ecx
mov    0x10(%rsp),%rbp
mov    %rbp,%r8
mov    0x60(%rsp),%r12
mov    %r12,%r9
xor    %eax,%eax
mov    0x8(%rsp),%r15
push   %r15
push   %rbx
mov    %rbx,0x38(%rsp)
push   %r13
call   10c0 <forward_proba_pair_wise@plt>
add    $0x20,%rsp
cltq
mov    %rax,0x10(%rsp)
sub    $0x8,%rsp
mov    %r14d,%edi
mov    0x40(%rsp),%r13
mov    %r13d,%esi
mov    $0x5,%edx
mov    $0x2,%ecx
mov    %rbp,%r8
mov    %r12,%r9
xor    %eax,%eax
push   %r15
push   %rbx
mov    0x68(%rsp),%rbp
push   %rbp
call   1100 <backward_proba_pair_wise@plt>
add    $0x20,%rsp
movslq %eax,%r15
sub    $0x8,%rsp
movsd  0x756(%rip),%xmm0
mov    %r14d,%edi
mov    %r13d,%esi
mov    $0x5,%edx
mov    $0x2,%ecx
mov    0x18(%rsp),%rbx
mov    %rbx,%r8
mov    %r15,%r9
mov    $0x1,%al
push   0x80(%rsp)
call   1070 <ProbaMatrix2CL@plt>
add    $0x10,%rsp
mov    %eax,%r14d
mov    0x18(%rsp),%rdi
call   1030 <free@plt>
mov    0x40(%rsp),%rdi
call   1030 <free@plt>
mov    %r12,%rdi
call   1030 <free@plt>
mov    %rbp,%rdi
call   1030 <free@plt>
mov    %rbx,%rdi
call   1030 <free@plt>
mov    %r15,%rdi
call   1030 <free@plt>
mov    0x60(%rsp),%rdi
mov    $0x100,%esi
xor    %eax,%eax
call   1050 <deallocate2D_float@plt>
mov    $0x14,%esi
mov    0x48(%rsp),%rdi
xor    %eax,%eax
call   1050 <deallocate2D_float@plt>
mov    0x8(%rsp),%rdi
mov    $0x5,%esi
xor    %eax,%eax
call   1050 <deallocate2D_float@plt>
mov    (%rsp),%rdi
mov    $0x5,%esi
xor    %eax,%eax
call   1050 <deallocate2D_float@plt>
mov    0x28(%rsp),%rdi
mov    $0x100,%esi
xor    %eax,%eax
call   1050 <deallocate2D_float@plt>
mov    0x30(%rsp),%rdi
mov    $0x100,%esi
xor    %eax,%eax
call   1050 <deallocate2D_float@plt>
mov    0x20(%rsp),%rdi
mov    $0x2,%esi
mov    $0x5,%edx
xor    %eax,%eax
call   1060 <deallocate3D_float@plt>
mov    %r14d,%eax
add    $0xc8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.proba_pair_wise.initDistribMat = [5 x float] [float 0x3FE5CEA620000000, float 0x3F1695A820000000, float 0x3F1695A820000000, float 0x3FC45FE0C0000000, float 0x3FC45FE0C0000000]
@__const.proba_pair_wise.gapOpen = [4 x float] [float 0x3F8879D260000000, float 0x3F8879D260000000, float 0x3F8066AC80000000, float 0x3F8066AC80000000]
@__const.proba_pair_wise.gapExtend = [4 x float] [float 0x3FD9619C20000000, float 0x3FD9619C20000000, float 0x3FECC39740000000, float 0x3FECC39740000000]
@__const.proba_pair_wise.alphabetDefault = [21 x i8] c"ARNDCQEGHILKMFPSTWYV\00"
@__const.proba_pair_wise.emitSingleDefault = [20 x float] [float 0x3FB40C20A0000000, float 0x3FAADC1180000000, float 0x3FA6B2C240000000, float 0x3FAA447380000000, float 0x3F966C2D80000000, float 0x3FA25BEF60000000, float 0x3FACC0B400000000, float 0x3FB3ECF360000000, float 0x3F9AA29C00000000, float 0x3FB0AB7940000000, float 0x3FB8DFCC60000000, float 0x3FAE1733C0000000, float 0x3F98F760A0000000, float 0x3FA6DA0AC0000000, float 0x3FA42C6C40000000, float 0x3FADF39A20000000, float 0x3FAA30BBE0000000, float 0x3F88A5ED40000000, float 0x3F9FFF4820000000, float 0x3FB2CC9680000000]
@__const.proba_pair_wise.emitPairsDefault = <{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }> <{ <{ float, [19 x float] }> <{ float 0x3F984CDDA0000000, [19 x float] zeroinitializer }>, <{ float, float, [18 x float] }> <{ float 0x3F64079420000000, float 0x3F922D5D80000000, [18 x float] zeroinitializer }>, <{ float, float, float, [17 x float] }> <{ float 0x3F6138CD00000000, float 0x3F61058120000000, float 0x3F8A40A8C0000000, [17 x float] zeroinitializer }>, <{ float, float, float, float, [16 x float] }> <{ float 0x3F62502980000000, float 0x3F5A7C62E0000000, float 0x3F6CF64560000000, float 0x3F939209E0000000, [16 x float] zeroinitializer }>, <{ float, float, float, float, float, [15 x float] }> <{ float 0x3F57D75760000000, float 0x3F3D4B9560000000, float 0x3F3BD6CB20000000, float 0x3F381DAE20000000, float 0x3F84C18060000000, [15 x float] zeroinitializer }>, <{ float, float, float, float, float, float, [14 x float] }> <{ float 0x3F61F2E6E0000000, float 0x3F64C4F380000000, float 0x3F59EC5A80000000, float 0x3F5CF6DBC0000000, float 0x3F3509D260000000, float 0x3F7EFD9160000000, [14 x float] zeroinitializer }>, <{ float, float, float, float, float, float, float, [13 x float] }> <{ float 0x3F6B371DC0000000, float 0x3F66068200000000, float 0x3F62691900000000, float 0x3F74595360000000, float 0x3F38DFF5C0000000, float 0x3F6C45DBE0000000, float 0x3F912B03C0000000, [13 x float] zeroinitializer }>, <{ [8 x float], [12 x float] }> <{ [8 x float] [float 0x3F787D6A40000000, float 0x3F5FED3B00000000, float 0x3F67AA4B60000000, float 0x3F63458780000000, float 0x3F47553140000000, float 0x3F57560800000000, float 0x3F6199F0E0000000, float 0x3FA4CD4B00000000], [12 x float] zeroinitializer }>, <{ [9 x float], [11 x float] }> <{ [9 x float] [float 0x3F52BC5000000000, float 0x3F55A4E2A0000000, float 0x3F57229120000000, float 0x3F4FCF68C0000000, float 0x3F3150B540000000, float 0x3F52A95AA0000000, float 0x3F5596B560000000, float 0x3F50FDA940000000, float 0x3F81C6CC80000000], [11 x float] zeroinitializer }>, <{ [10 x float], [10 x float] }> <{ [10 x float] [float 0x3F6A1ED500000000, float 0x3F56A238A0000000, float 0x3F511586C0000000, float 0x3F5142E8C0000000, float 0x3F4ED0A5A0000000, float 0x3F50875700000000, float 0x3F54599E80000000, float 0x3F5759B8E0000000, float 0x3F43915760000000, float 0x3F92359C20000000], [10 x float] zeroinitializer }>, <{ [11 x float], [9 x float] }> <{ [11 x float] [float 0x3F726A2560000000, float 0x3F64380080000000, float 0x3F5A426BC0000000, float 0x3F5A8958A0000000, float 0x3F56B0DC00000000, float 0x3F5D94F120000000, float 0x3F6230FFA0000000, float 0x3F616FD9E0000000, float 0x3F524F4D80000000, float 0x3F85F37F40000000, float 0x3FA2598460000000], [9 x float] zeroinitializer }>, <{ [12 x float], [8 x float] }> <{ [12 x float] [float 0x3F6B2C1B40000000, float 0x3F7865D7C0000000, float 0x3F65142E80000000, float 0x3F64AFAFC0000000, float 0x3F3EC51220000000, float 0x3F699592C0000000, float 0x3F718C4F20000000, float 0x3F653E2560000000, float 0x3F53E2E0E0000000, float 0x3F59DCCB00000000, float 0x3F6544C080000000, float 0x3F90825BE0000000], [8 x float] zeroinitializer }>, [20 x float] [float 0x3F58646560000000, float 0x3F4924EA20000000, float 0x3F44C67620000000, float 0x3F3F54DA00000000, float 0x3F388633C0000000, float 0x3F48C14200000000, float 0x3F48F02660000000, float 0x3F45CAC280000000, float 0x3F3BAE3160000000, float 0x3F625BA7A0000000, float 0x3F72EBC800000000, float 0x3F4F7F2140000000, float 0x3F70C62640000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F5B08C500000000, float 0x3F4DBE2C00000000, float 0x3F4BBDA0C0000000, float 0x3F469F9420000000, float 0x3F41210FA0000000, float 0x3F436A1520000000, float 0x3F49D365C0000000, float 0x3F52E00180000000, float 0x3F47C58400000000, float 0x3F66EEEF60000000, float 0x3F75D8C780000000, float 0x3F4C94B620000000, float 0x3F53060C60000000, float 0x3F91024FC0000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F62E46900000000, float 0x3F51693400000000, float 0x3F506E21C0000000, float 0x3F548ADC40000000, float 0x3F36C8C460000000, float 0x3F4D870F00000000, float 0x3F58D477C0000000, float 0x3F597E6100000000, float 0x3F4014F600000000, float 0x3F51004DA0000000, float 0x3F59C60F40000000, float 0x3F595E4AE0000000, float 0x3F3E9DFAE0000000, float 0x3F43E3F800000000, float 0x3F92E75D40000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F79E06660000000, float 0x3F6264F200000000, float 0x3F68B0C0E0000000, float 0x3F675D9F60000000, float 0x3F4F160540000000, float 0x3F5F519F20000000, float 0x3F68137CE0000000, float 0x3F6F4A52E0000000, float 0x3F531317C0000000, float 0x3F5C6FD800000000, float 0x3F648F0E00000000, float 0x3F699C63A0000000, float 0x3F4CC41B80000000, float 0x3F5380BB60000000, float 0x3F5D7F4CA0000000, float 0x3F8B941C00000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F6FF2C9C0000000, float 0x3F5E7BA0E0000000, float 0x3F6208C120000000, float 0x3F5D923720000000, float 0x3F482EA000000000, float 0x3F59514A40000000, float 0x3F61C1C960000000, float 0x3F61998AE0000000, float 0x3F4979E420000000, float 0x3F64653CC0000000, float 0x3F68C31FC0000000, float 0x3F648CF520000000, float 0x3F4E988700000000, float 0x3F51A0DC80000000, float 0x3F583ED0A0000000, float 0x3F73F5A880000000, float 0x3F8A9CC980000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F39A31440000000, float 0x3F3318B680000000, float 0x3F2B8871A0000000, float 0x3F24FDBE00000000, float 0x3F1BF5D4E0000000, float 0x3F2AFD8760000000, float 0x3F2F36FCE0000000, float 0x3F396B3600000000, float 0x3F2907E3C0000000, float 0x3F39EB38A0000000, float 0x3F49251500000000, float 0x3F32A4C840000000, float 0x3F254D9A20000000, float 0x3F4C1950C0000000, float 0x3F248B5260000000, float 0x3F31622820000000, float 0x3F305BC2C0000000, float 0x3F77160960000000, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F5599C540000000, float 0x3F504A6580000000, float 0x3F489019C0000000, float 0x3F45A0E6A0000000, float 0x3F3800D2C0000000, float 0x3F470021C0000000, float 0x3F4E537D20000000, float 0x3F4D431C60000000, float 0x3F557821C0000000, float 0x3F54F2B620000000, float 0x3F61FFB720000000, float 0x3F50849240000000, float 0x3F41BAA800000000, float 0x3F6E350460000000, float 0x3F3F334C00000000, float 0x3F50D15E80000000, float 0x3F4F0CF600000000, float 0x3F46AF1900000000, float 0x3F847749E0000000, float 0.000000e+00], [20 x float] [float 0x3F75D76FE0000000, float 0x3F5BBF6E60000000, float 0x3F5661CC00000000, float 0x3F54F524E0000000, float 0x3F538598E0000000, float 0x3F55C3E1A0000000, float 0x3F5D471860000000, float 0x3F5FE13C20000000, float 0x3F47724D00000000, float 0x3F86E54F20000000, float 0x3F82BA6760000000, float 0x3F6146D4A0000000, float 0x3F602D0EA0000000, float 0x3F64FC0B20000000, float 0x3F563F1160000000, float 0x3F63CABD80000000, float 0x3F6C22B5E0000000, float 0x3F39419A80000000, float 0x3F583F9CA0000000, float 0x3F953FEFA0000000] }>
define i32 @proba_pair_wise(i8* %0, i8* %1, i32* %2) {
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i32*
%7 = alloca i32
%8 = alloca i32
%9 = alloca [5 x float]
%10 = alloca [4 x float]
%11 = alloca [4 x float]
%12 = alloca [21 x i8]
%13 = alloca [20 x float]
%14 = alloca [20 x [20 x float]]
%15 = alloca float
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca float*
%22 = alloca float*
%23 = alloca float**
%24 = alloca float**
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca float**
%30 = alloca float**
%31 = alloca float**
%32 = alloca float*
%33 = alloca float**
%34 = alloca float***
%35 = alloca float*
%36 = alloca float*
%37 = alloca float*
%38 = alloca i32
store i8* %0, i8** %4
store i8* %1, i8** %5
store i32* %2, i32** %6
store i32 2, i32* %7
store i32 5, i32* %8
%39 = bitcast [5 x float]* %9 to i8*
%40 = bitcast [4 x float]* %10 to i8*
%41 = bitcast [4 x float]* %11 to i8*
%42 = bitcast [21 x i8]* %12 to i8*
%43 = bitcast [20 x float]* %13 to i8*
%44 = bitcast [20 x [20 x float]]* %14 to i8*
store float 0x3F847AE140000000, float* %15
%45 = load i8*, i8** %4
%46 = call i64 @strlen(i8* %45)
%47 = trunc i64 %46 to i32
store i32 %47, i32* %16
%48 = load i8*, i8** %5
%49 = call i64 @strlen(i8* %48)
%50 = trunc i64 %49 to i32
store i32 %50, i32* %17
%51 = getelementptr inbounds [21 x i8], [21 x i8]* %12, i64 0, i64 0
%52 = call i64 @strlen(i8* %51)
%53 = trunc i64 %52 to i32
store i32 %53, i32* %18
%54 = load i32, i32* %18
%55 = load i32, i32* %18
%56 = call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 %54, i32 %55)
%57 = sext i32 %56 to i64
%58 = inttoptr i64 %57 to float**
store float** %58, float*** %24
%59 = call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 256, i32 256)
%60 = sext i32 %59 to i64
%61 = inttoptr i64 %60 to float**
store float** %61, float*** %23
%62 = load i32, i32* %18
%63 = sext i32 %62 to i64
%64 = call i8* @calloc(i64 %63, i64 4)
%65 = bitcast i8* %64 to float*
store float* %65, float** %22
%66 = call i8* @calloc(i64 256, i64 4)
%67 = bitcast i8* %66 to float*
store float* %67, float** %21
store i32 0, i32* %19
br label %68
68: ; preds = %105, %3
%69 = load i32, i32* %19
%70 = load i32, i32* %18
%71 = icmp slt i32 %69, %70
br i1 %71, label %72, label %108
72: ; preds = %68
%73 = load i32, i32* %19
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [20 x float], [20 x float]* %13, i64 0, i64 %74
%76 = load float, float* %75
%77 = load float*, float** %22
%78 = load i32, i32* %19
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds float, float* %77, i64 %79
store float %76, float* %80
store i32 0, i32* %20
br label %81
81: ; preds = %101, %72
%82 = load i32, i32* %20
%83 = load i32, i32* %18
%84 = icmp slt i32 %82, %83
br i1 %84, label %85, label %104
85: ; preds = %81
%86 = load i32, i32* %19
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* %14, i64 0, i64 %87
%89 = load i32, i32* %20
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds [20 x float], [20 x float]* %88, i64 0, i64 %90
%92 = load float, float* %91
%93 = load float**, float*** %24
%94 = load i32, i32* %19
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds float*, float** %93, i64 %95
%97 = load float*, float** %96
%98 = load i32, i32* %20
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds float, float* %97, i64 %99
store float %92, float* %100
br label %101
101: ; preds = %85
%102 = load i32, i32* %20
%103 = add nsw i32 %102, 1
store i32 %103, i32* %20
br label %81
104: ; preds = %81
br label %105
105: ; preds = %104
%106 = load i32, i32* %19
%107 = add nsw i32 %106, 1
store i32 %107, i32* %19
br label %68
108: ; preds = %68
store i32 0, i32* %19
br label %109
109: ; preds = %133, %108
%110 = load i32, i32* %19
%111 = icmp slt i32 %110, 256
br i1 %111, label %112, label %136
112: ; preds = %109
%113 = load float*, float** %21
%114 = load i32, i32* %19
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds float, float* %113, i64 %115
store float 1.000000e+00, float* %116
store i32 0, i32* %20
br label %117
117: ; preds = %129, %112
%118 = load i32, i32* %20
%119 = icmp slt i32 %118, 256
br i1 %119, label %120, label %132
120: ; preds = %117
%121 = load float**, float*** %23
%122 = load i32, i32* %19
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds float*, float** %121, i64 %123
%125 = load float*, float** %124
%126 = load i32, i32* %20
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds float, float* %125, i64 %127
store float 1.000000e+00, float* %128
br label %129
129: ; preds = %120
%130 = load i32, i32* %20
%131 = add nsw i32 %130, 1
store i32 %131, i32* %20
br label %117
132: ; preds = %117
br label %133
133: ; preds = %132
%134 = load i32, i32* %19
%135 = add nsw i32 %134, 1
store i32 %135, i32* %19
br label %109
136: ; preds = %109
store i32 0, i32* %19
br label %137
137: ; preds = %329, %136
%138 = load i32, i32* %19
%139 = load i32, i32* %18
%140 = icmp slt i32 %138, %139
br i1 %140, label %141, label %332
141: ; preds = %137
%142 = load i32, i32* %19
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [21 x i8], [21 x i8]* %12, i64 0, i64 %143
%145 = load i8, i8* %144
%146 = sext i8 %145 to i32
%147 = call i32 @tolower(i32 %146)
store i32 %147, i32* %26
%148 = load i32, i32* %19
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds [21 x i8], [21 x i8]* %12, i64 0, i64 %149
%151 = load i8, i8* %150
%152 = sext i8 %151 to i32
%153 = call i32 @toupper(i32 %152)
store i32 %153, i32* %25
%154 = load float*, float** %22
%155 = load i32, i32* %19
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds float, float* %154, i64 %156
%158 = load float, float* %157
%159 = load float*, float** %21
%160 = load i32, i32* %26
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds float, float* %159, i64 %161
store float %158, float* %162
%163 = load float*, float** %22
%164 = load i32, i32* %19
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds float, float* %163, i64 %165
%167 = load float, float* %166
%168 = load float*, float** %21
%169 = load i32, i32* %25
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds float, float* %168, i64 %170
store float %167, float* %171
store i32 0, i32* %20
br label %172
172: ; preds = %325, %141
%173 = load i32, i32* %20
%174 = load i32, i32* %19
%175 = icmp sle i32 %173, %174
br i1 %175, label %176, label %328
176: ; preds = %172
%177 = load i32, i32* %20
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds [21 x i8], [21 x i8]* %12, i64 0, i64 %178
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = call i32 @tolower(i32 %181)
store i32 %182, i32* %28
%183 = load i32, i32* %20
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds [21 x i8], [21 x i8]* %12, i64 0, i64 %184
%186 = load i8, i8* %185
%187 = sext i8 %186 to i32
%188 = call i32 @toupper(i32 %187)
store i32 %188, i32* %27
%189 = load float**, float*** %24
%190 = load i32, i32* %19
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds float*, float** %189, i64 %191
%193 = load float*, float** %192
%194 = load i32, i32* %20
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds float, float* %193, i64 %195
%197 = load float, float* %196
%198 = load float**, float*** %23
%199 = load i32, i32* %26
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds float*, float** %198, i64 %200
%202 = load float*, float** %201
%203 = load i32, i32* %28
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds float, float* %202, i64 %204
store float %197, float* %205
%206 = load float**, float*** %24
%207 = load i32, i32* %19
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds float*, float** %206, i64 %208
%210 = load float*, float** %209
%211 = load i32, i32* %20
%212 = sext i32 %211 to i64
%213 = getelementptr inbounds float, float* %210, i64 %212
%214 = load float, float* %213
%215 = load float**, float*** %23
%216 = load i32, i32* %25
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds float*, float** %215, i64 %217
%219 = load float*, float** %218
%220 = load i32, i32* %28
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds float, float* %219, i64 %221
store float %214, float* %222
%223 = load float**, float*** %24
%224 = load i32, i32* %19
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds float*, float** %223, i64 %225
%227 = load float*, float** %226
%228 = load i32, i32* %20
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds float, float* %227, i64 %229
%231 = load float, float* %230
%232 = load float**, float*** %23
%233 = load i32, i32* %25
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds float*, float** %232, i64 %234
%236 = load float*, float** %235
%237 = load i32, i32* %27
%238 = sext i32 %237 to i64
%239 = getelementptr inbounds float, float* %236, i64 %238
store float %231, float* %239
%240 = load float**, float*** %24
%241 = load i32, i32* %19
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds float*, float** %240, i64 %242
%244 = load float*, float** %243
%245 = load i32, i32* %20
%246 = sext i32 %245 to i64
%247 = getelementptr inbounds float, float* %244, i64 %246
%248 = load float, float* %247
%249 = load float**, float*** %23
%250 = load i32, i32* %26
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds float*, float** %249, i64 %251
%253 = load float*, float** %252
%254 = load i32, i32* %27
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds float, float* %253, i64 %255
store float %248, float* %256
%257 = load float**, float*** %24
%258 = load i32, i32* %19
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds float*, float** %257, i64 %259
%261 = load float*, float** %260
%262 = load i32, i32* %20
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds float, float* %261, i64 %263
%265 = load float, float* %264
%266 = load float**, float*** %23
%267 = load i32, i32* %28
%268 = sext i32 %267 to i64
%269 = getelementptr inbounds float*, float** %266, i64 %268
%270 = load float*, float** %269
%271 = load i32, i32* %26
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds float, float* %270, i64 %272
store float %265, float* %273
%274 = load float**, float*** %24
%275 = load i32, i32* %19
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds float*, float** %274, i64 %276
%278 = load float*, float** %277
%279 = load i32, i32* %20
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds float, float* %278, i64 %280
%282 = load float, float* %281
%283 = load float**, float*** %23
%284 = load i32, i32* %27
%285 = sext i32 %284 to i64
%286 = getelementptr inbounds float*, float** %283, i64 %285
%287 = load float*, float** %286
%288 = load i32, i32* %26
%289 = sext i32 %288 to i64
%290 = getelementptr inbounds float, float* %287, i64 %289
store float %282, float* %290
%291 = load float**, float*** %24
%292 = load i32, i32* %19
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds float*, float** %291, i64 %293
%295 = load float*, float** %294
%296 = load i32, i32* %20
%297 = sext i32 %296 to i64
%298 = getelementptr inbounds float, float* %295, i64 %297
%299 = load float, float* %298
%300 = load float**, float*** %23
%301 = load i32, i32* %27
%302 = sext i32 %301 to i64
%303 = getelementptr inbounds float*, float** %300, i64 %302
%304 = load float*, float** %303
%305 = load i32, i32* %25
%306 = sext i32 %305 to i64
%307 = getelementptr inbounds float, float* %304, i64 %306
store float %299, float* %307
%308 = load float**, float*** %24
%309 = load i32, i32* %19
%310 = sext i32 %309 to i64
%311 = getelementptr inbounds float*, float** %308, i64 %310
%312 = load float*, float** %311
%313 = load i32, i32* %20
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds float, float* %312, i64 %314
%316 = load float, float* %315
%317 = load float**, float*** %23
%318 = load i32, i32* %28
%319 = sext i32 %318 to i64
%320 = getelementptr inbounds float*, float** %317, i64 %319
%321 = load float*, float** %320
%322 = load i32, i32* %25
%323 = sext i32 %322 to i64
%324 = getelementptr inbounds float, float* %321, i64 %323
store float %316, float* %324
br label %325
325: ; preds = %176
%326 = load i32, i32* %20
%327 = add nsw i32 %326, 1
store i32 %327, i32* %20
br label %172
328: ; preds = %172
br label %329
329: ; preds = %328
%330 = load i32, i32* %19
%331 = add nsw i32 %330, 1
store i32 %331, i32* %19
br label %137
332: ; preds = %137
%333 = load i32, i32* %7
%334 = mul nsw i32 2, %333
%335 = add nsw i32 %334, 1
%336 = load i32, i32* %7
%337 = mul nsw i32 2, %336
%338 = add nsw i32 %337, 1
%339 = call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 %335, i32 %338)
%340 = sext i32 %339 to i64
%341 = inttoptr i64 %340 to float**
store float** %341, float*** %29
%342 = load i32, i32* %7
%343 = mul nsw i32 2, %342
%344 = add nsw i32 %343, 1
%345 = load i32, i32* %7
%346 = mul nsw i32 2, %345
%347 = add nsw i32 %346, 1
%348 = call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 %344, i32 %347)
%349 = sext i32 %348 to i64
%350 = inttoptr i64 %349 to float**
store float** %350, float*** %33
%351 = load i32, i32* %8
%352 = call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 256, i32 %351)
%353 = sext i32 %352 to i64
%354 = inttoptr i64 %353 to float**
store float** %354, float*** %30
%355 = call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 256, i32 256)
%356 = sext i32 %355 to i64
%357 = inttoptr i64 %356 to float**
store float** %357, float*** %31
%358 = load i32, i32* %8
%359 = mul nsw i32 2, %358
%360 = add nsw i32 %359, 1
%361 = sext i32 %360 to i64
%362 = call i8* @calloc(i64 %361, i64 4)
%363 = bitcast i8* %362 to float*
store float* %363, float** %32
%364 = load i32, i32* %8
%365 = load i32, i32* %7
%366 = getelementptr inbounds [5 x float], [5 x float]* %9, i64 0, i64 0
%367 = load float*, float** %21
%368 = load float**, float*** %23
%369 = getelementptr inbounds [4 x float], [4 x float]* %10, i64 0, i64 0
%370 = getelementptr inbounds [4 x float], [4 x float]* %11, i64 0, i64 0
%371 = load float**, float*** %29
%372 = load float**, float*** %30
%373 = load float**, float*** %31
%374 = load float*, float** %32
%375 = load float**, float*** %33
%376 = call i32 (i32, i32, float*, float*, float**, float*, float*, float**, float**, float**, float*, float**, ...) bitcast (i32 (...)* @ProbabilisticModel to i32 (i32, i32, float*, float*, float**, float*, float*, float**, float**, float**, float*, float**, ...)*)(i32 %364, i32 %365, float* %366, float* %367, float** %368, float* %369, float* %370, float** %371, float** %372, float** %373, float* %374, float** %375)
%377 = load i32, i32* %16
%378 = add nsw i32 %377, 1
%379 = load i32, i32* %17
%380 = add nsw i32 %379, 1
%381 = mul nsw i32 %378, %380
store i32 %381, i32* %18
%382 = load i32, i32* %18
%383 = sext i32 %382 to i64
%384 = call i8* @calloc(i64 %383, i64 4)
%385 = bitcast i8* %384 to float*
store float* %385, float** %35
%386 = load i32, i32* %16
%387 = load i32, i32* %17
%388 = icmp sgt i32 %386, %387
br i1 %388, label %389, label %391
389: ; preds = %332
%390 = load i32, i32* %16
br label %393
391: ; preds = %332
%392 = load i32, i32* %17
br label %393
393: ; preds = %391, %389
%394 = phi i32 [ %390, %389 ], [ %392, %391 ]
%395 = add nsw i32 %394, 1
store i32 %395, i32* %18
%396 = load i32, i32* %8
%397 = load i32, i32* %18
%398 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @declare_arrayN to i32 (i32, i32, i32, ...)*)(i32 2, i32 %396, i32 %397)
%399 = sext i32 %398 to i64
%400 = inttoptr i64 %399 to float***
store float*** %400, float**** %34
%401 = load i8*, i8** %4
%402 = load i8*, i8** %5
%403 = load i32, i32* %8
%404 = load float**, float*** %31
%405 = load float**, float*** %30
%406 = load float*, float** %35
%407 = load float***, float**** %34
%408 = call i32 (i8*, i8*, i32, float**, float**, float*, float***, ...) bitcast (i32 (...)* @get_tot_prob2 to i32 (i8*, i8*, i32, float**, float**, float*, float***, ...)*)(i8* %401, i8* %402, i32 %403, float** %404, float** %405, float* %406, float*** %407)
%409 = load i32, i32* %16
%410 = load i32, i32* %17
%411 = load i32, i32* %8
%412 = load i32, i32* %7
%413 = load float**, float*** %29
%414 = load float*, float** %32
%415 = load float*, float** %35
%416 = load float***, float**** %34
%417 = load float**, float*** %33
%418 = call i32 (i32, i32, i32, i32, float**, float*, float*, float***, float**, ...) bitcast (i32 (...)* @forward_proba_pair_wise to i32 (i32, i32, i32, i32, float**, float*, float*, float***, float**, ...)*)(i32 %409, i32 %410, i32 %411, i32 %412, float** %413, float* %414, float* %415, float*** %416, float** %417)
%419 = sext i32 %418 to i64
%420 = inttoptr i64 %419 to float*
store float* %420, float** %36
%421 = load i32, i32* %16
%422 = load i32, i32* %17
%423 = load i32, i32* %8
%424 = load i32, i32* %7
%425 = load float**, float*** %29
%426 = load float*, float** %32
%427 = load float*, float** %35
%428 = load float***, float**** %34
%429 = load float**, float*** %33
%430 = call i32 (i32, i32, i32, i32, float**, float*, float*, float***, float**, ...) bitcast (i32 (...)* @backward_proba_pair_wise to i32 (i32, i32, i32, i32, float**, float*, float*, float***, float**, ...)*)(i32 %421, i32 %422, i32 %423, i32 %424, float** %425, float* %426, float* %427, float*** %428, float** %429)
%431 = sext i32 %430 to i64
%432 = inttoptr i64 %431 to float*
store float* %432, float** %37
%433 = load i32, i32* %16
%434 = load i32, i32* %17
%435 = load i32, i32* %8
%436 = load i32, i32* %7
%437 = load float*, float** %36
%438 = load float*, float** %37
%439 = load float, float* %15
%440 = fpext float %439 to double
%441 = load i32*, i32** %6
%442 = call i32 (i32, i32, i32, i32, float*, float*, double, i32*, ...) bitcast (i32 (...)* @ProbaMatrix2CL to i32 (i32, i32, i32, i32, float*, float*, double, i32*, ...)*)(i32 %433, i32 %434, i32 %435, i32 %436, float* %437, float* %438, double %440, i32* %441)
store i32 %442, i32* %38
%443 = load float*, float** %21
%444 = bitcast float* %443 to i8*
%445 = load float*, float** %22
%446 = bitcast float* %445 to i8*
%447 = load float*, float** %32
%448 = bitcast float* %447 to i8*
%449 = load float*, float** %35
%450 = bitcast float* %449 to i8*
%451 = load float*, float** %36
%452 = bitcast float* %451 to i8*
%453 = load float*, float** %37
%454 = bitcast float* %453 to i8*
%455 = load float**, float*** %23
%456 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %455, i32 256)
%457 = load float**, float*** %24
%458 = getelementptr inbounds [21 x i8], [21 x i8]* %12, i64 0, i64 0
%459 = call i64 @strlen(i8* %458)
%460 = call i32 (float**, i64, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i64, ...)*)(float** %457, i64 %459)
%461 = load float**, float*** %29
%462 = load i32, i32* %7
%463 = mul nsw i32 2, %462
%464 = add nsw i32 %463, 1
%465 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %461, i32 %464)
%466 = load float**, float*** %33
%467 = load i32, i32* %7
%468 = mul nsw i32 2, %467
%469 = add nsw i32 %468, 1
%470 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %466, i32 %469)
%471 = load float**, float*** %30
%472 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %471, i32 256)
%473 = load float**, float*** %31
%474 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %473, i32 256)
%475 = load float***, float**** %34
%476 = load i32, i32* %8
%477 = call i32 (float***, i32, i32, ...) bitcast (i32 (...)* @deallocate3D_float to i32 (float***, i32, i32, ...)*)(float*** %475, i32 2, i32 %476)
%478 = load i32, i32* %38
ret i32 %478
}

LLVM IR (-O2):
@__const.proba_pair_wise.initDistribMat = [5 x float] [float 0x3FE5CEA620000000, float 0x3F1695A820000000, float 0x3F1695A820000000, float 0x3FC45FE0C0000000, float 0x3FC45FE0C0000000]
@__const.proba_pair_wise.gapOpen = [4 x float] [float 0x3F8879D260000000, float 0x3F8879D260000000, float 0x3F8066AC80000000, float 0x3F8066AC80000000]
@__const.proba_pair_wise.gapExtend = [4 x float] [float 0x3FD9619C20000000, float 0x3FD9619C20000000, float 0x3FECC39740000000, float 0x3FECC39740000000]
@__const.proba_pair_wise.alphabetDefault = [21 x i8] c"ARNDCQEGHILKMFPSTWYV\00"
@__const.proba_pair_wise.emitSingleDefault = [20 x float] [float 0x3FB40C20A0000000, float 0x3FAADC1180000000, float 0x3FA6B2C240000000, float 0x3FAA447380000000, float 0x3F966C2D80000000, float 0x3FA25BEF60000000, float 0x3FACC0B400000000, float 0x3FB3ECF360000000, float 0x3F9AA29C00000000, float 0x3FB0AB7940000000, float 0x3FB8DFCC60000000, float 0x3FAE1733C0000000, float 0x3F98F760A0000000, float 0x3FA6DA0AC0000000, float 0x3FA42C6C40000000, float 0x3FADF39A20000000, float 0x3FAA30BBE0000000, float 0x3F88A5ED40000000, float 0x3F9FFF4820000000, float 0x3FB2CC9680000000]
@__const.proba_pair_wise.emitPairsDefault = <{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }> <{ <{ float, [19 x float] }> <{ float 0x3F984CDDA0000000, [19 x float] zeroinitializer }>, <{ float, float, [18 x float] }> <{ float 0x3F64079420000000, float 0x3F922D5D80000000, [18 x float] zeroinitializer }>, <{ float, float, float, [17 x float] }> <{ float 0x3F6138CD00000000, float 0x3F61058120000000, float 0x3F8A40A8C0000000, [17 x float] zeroinitializer }>, <{ float, float, float, float, [16 x float] }> <{ float 0x3F62502980000000, float 0x3F5A7C62E0000000, float 0x3F6CF64560000000, float 0x3F939209E0000000, [16 x float] zeroinitializer }>, <{ float, float, float, float, float, [15 x float] }> <{ float 0x3F57D75760000000, float 0x3F3D4B9560000000, float 0x3F3BD6CB20000000, float 0x3F381DAE20000000, float 0x3F84C18060000000, [15 x float] zeroinitializer }>, <{ float, float, float, float, float, float, [14 x float] }> <{ float 0x3F61F2E6E0000000, float 0x3F64C4F380000000, float 0x3F59EC5A80000000, float 0x3F5CF6DBC0000000, float 0x3F3509D260000000, float 0x3F7EFD9160000000, [14 x float] zeroinitializer }>, <{ float, float, float, float, float, float, float, [13 x float] }> <{ float 0x3F6B371DC0000000, float 0x3F66068200000000, float 0x3F62691900000000, float 0x3F74595360000000, float 0x3F38DFF5C0000000, float 0x3F6C45DBE0000000, float 0x3F912B03C0000000, [13 x float] zeroinitializer }>, <{ [8 x float], [12 x float] }> <{ [8 x float] [float 0x3F787D6A40000000, float 0x3F5FED3B00000000, float 0x3F67AA4B60000000, float 0x3F63458780000000, float 0x3F47553140000000, float 0x3F57560800000000, float 0x3F6199F0E0000000, float 0x3FA4CD4B00000000], [12 x float] zeroinitializer }>, <{ [9 x float], [11 x float] }> <{ [9 x float] [float 0x3F52BC5000000000, float 0x3F55A4E2A0000000, float 0x3F57229120000000, float 0x3F4FCF68C0000000, float 0x3F3150B540000000, float 0x3F52A95AA0000000, float 0x3F5596B560000000, float 0x3F50FDA940000000, float 0x3F81C6CC80000000], [11 x float] zeroinitializer }>, <{ [10 x float], [10 x float] }> <{ [10 x float] [float 0x3F6A1ED500000000, float 0x3F56A238A0000000, float 0x3F511586C0000000, float 0x3F5142E8C0000000, float 0x3F4ED0A5A0000000, float 0x3F50875700000000, float 0x3F54599E80000000, float 0x3F5759B8E0000000, float 0x3F43915760000000, float 0x3F92359C20000000], [10 x float] zeroinitializer }>, <{ [11 x float], [9 x float] }> <{ [11 x float] [float 0x3F726A2560000000, float 0x3F64380080000000, float 0x3F5A426BC0000000, float 0x3F5A8958A0000000, float 0x3F56B0DC00000000, float 0x3F5D94F120000000, float 0x3F6230FFA0000000, float 0x3F616FD9E0000000, float 0x3F524F4D80000000, float 0x3F85F37F40000000, float 0x3FA2598460000000], [9 x float] zeroinitializer }>, <{ [12 x float], [8 x float] }> <{ [12 x float] [float 0x3F6B2C1B40000000, float 0x3F7865D7C0000000, float 0x3F65142E80000000, float 0x3F64AFAFC0000000, float 0x3F3EC51220000000, float 0x3F699592C0000000, float 0x3F718C4F20000000, float 0x3F653E2560000000, float 0x3F53E2E0E0000000, float 0x3F59DCCB00000000, float 0x3F6544C080000000, float 0x3F90825BE0000000], [8 x float] zeroinitializer }>, [20 x float] [float 0x3F58646560000000, float 0x3F4924EA20000000, float 0x3F44C67620000000, float 0x3F3F54DA00000000, float 0x3F388633C0000000, float 0x3F48C14200000000, float 0x3F48F02660000000, float 0x3F45CAC280000000, float 0x3F3BAE3160000000, float 0x3F625BA7A0000000, float 0x3F72EBC800000000, float 0x3F4F7F2140000000, float 0x3F70C62640000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F5B08C500000000, float 0x3F4DBE2C00000000, float 0x3F4BBDA0C0000000, float 0x3F469F9420000000, float 0x3F41210FA0000000, float 0x3F436A1520000000, float 0x3F49D365C0000000, float 0x3F52E00180000000, float 0x3F47C58400000000, float 0x3F66EEEF60000000, float 0x3F75D8C780000000, float 0x3F4C94B620000000, float 0x3F53060C60000000, float 0x3F91024FC0000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F62E46900000000, float 0x3F51693400000000, float 0x3F506E21C0000000, float 0x3F548ADC40000000, float 0x3F36C8C460000000, float 0x3F4D870F00000000, float 0x3F58D477C0000000, float 0x3F597E6100000000, float 0x3F4014F600000000, float 0x3F51004DA0000000, float 0x3F59C60F40000000, float 0x3F595E4AE0000000, float 0x3F3E9DFAE0000000, float 0x3F43E3F800000000, float 0x3F92E75D40000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F79E06660000000, float 0x3F6264F200000000, float 0x3F68B0C0E0000000, float 0x3F675D9F60000000, float 0x3F4F160540000000, float 0x3F5F519F20000000, float 0x3F68137CE0000000, float 0x3F6F4A52E0000000, float 0x3F531317C0000000, float 0x3F5C6FD800000000, float 0x3F648F0E00000000, float 0x3F699C63A0000000, float 0x3F4CC41B80000000, float 0x3F5380BB60000000, float 0x3F5D7F4CA0000000, float 0x3F8B941C00000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F6FF2C9C0000000, float 0x3F5E7BA0E0000000, float 0x3F6208C120000000, float 0x3F5D923720000000, float 0x3F482EA000000000, float 0x3F59514A40000000, float 0x3F61C1C960000000, float 0x3F61998AE0000000, float 0x3F4979E420000000, float 0x3F64653CC0000000, float 0x3F68C31FC0000000, float 0x3F648CF520000000, float 0x3F4E988700000000, float 0x3F51A0DC80000000, float 0x3F583ED0A0000000, float 0x3F73F5A880000000, float 0x3F8A9CC980000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F39A31440000000, float 0x3F3318B680000000, float 0x3F2B8871A0000000, float 0x3F24FDBE00000000, float 0x3F1BF5D4E0000000, float 0x3F2AFD8760000000, float 0x3F2F36FCE0000000, float 0x3F396B3600000000, float 0x3F2907E3C0000000, float 0x3F39EB38A0000000, float 0x3F49251500000000, float 0x3F32A4C840000000, float 0x3F254D9A20000000, float 0x3F4C1950C0000000, float 0x3F248B5260000000, float 0x3F31622820000000, float 0x3F305BC2C0000000, float 0x3F77160960000000, float 0.000000e+00, float 0.000000e+00], [20 x float] [float 0x3F5599C540000000, float 0x3F504A6580000000, float 0x3F489019C0000000, float 0x3F45A0E6A0000000, float 0x3F3800D2C0000000, float 0x3F470021C0000000, float 0x3F4E537D20000000, float 0x3F4D431C60000000, float 0x3F557821C0000000, float 0x3F54F2B620000000, float 0x3F61FFB720000000, float 0x3F50849240000000, float 0x3F41BAA800000000, float 0x3F6E350460000000, float 0x3F3F334C00000000, float 0x3F50D15E80000000, float 0x3F4F0CF600000000, float 0x3F46AF1900000000, float 0x3F847749E0000000, float 0.000000e+00], [20 x float] [float 0x3F75D76FE0000000, float 0x3F5BBF6E60000000, float 0x3F5661CC00000000, float 0x3F54F524E0000000, float 0x3F538598E0000000, float 0x3F55C3E1A0000000, float 0x3F5D471860000000, float 0x3F5FE13C20000000, float 0x3F47724D00000000, float 0x3F86E54F20000000, float 0x3F82BA6760000000, float 0x3F6146D4A0000000, float 0x3F602D0EA0000000, float 0x3F64FC0B20000000, float 0x3F563F1160000000, float 0x3F63CABD80000000, float 0x3F6C22B5E0000000, float 0x3F39419A80000000, float 0x3F583F9CA0000000, float 0x3F953FEFA0000000] }>
define i32 @proba_pair_wise(i8* %0, i8* %1, i32* %2) {
%4 = alloca [5 x float]
%5 = alloca [4 x float]
%6 = alloca [4 x float]
%7 = bitcast [5 x float]* %4 to i8*
%8 = bitcast [4 x float]* %5 to i8*
%9 = bitcast [4 x float]* %6 to i8*
%10 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%11 = tail call i64 @strlen(i8* dereferenceable(1) %1)
%12 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 20, i32 20)
%13 = sext i32 %12 to i64
%14 = inttoptr i64 %13 to float**
%15 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 256, i32 256)
%16 = sext i32 %15 to i64
%17 = tail call dereferenceable_or_null(80) i8* @calloc(i64 20, i64 4)
%18 = tail call dereferenceable_or_null(1024) i8* @calloc(i64 256, i64 4)
br label %19
19: ; preds = %3, %19
%20 = phi i64 [ 0, %3 ], [ %82, %19 ]
%21 = getelementptr inbounds float*, float** %14, i64 %20
%22 = load float*, float** %21
%23 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 0
%24 = load float, float* %23
store float %24, float* %22
%25 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 1
%26 = load float, float* %25
%27 = getelementptr inbounds float, float* %22, i64 1
store float %26, float* %27
%28 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 2
%29 = load float, float* %28
%30 = getelementptr inbounds float, float* %22, i64 2
store float %29, float* %30
%31 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 3
%32 = load float, float* %31
%33 = getelementptr inbounds float, float* %22, i64 3
store float %32, float* %33
%34 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 4
%35 = load float, float* %34
%36 = getelementptr inbounds float, float* %22, i64 4
store float %35, float* %36
%37 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 5
%38 = load float, float* %37
%39 = getelementptr inbounds float, float* %22, i64 5
store float %38, float* %39
%40 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 6
%41 = load float, float* %40
%42 = getelementptr inbounds float, float* %22, i64 6
store float %41, float* %42
%43 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 7
%44 = load float, float* %43
%45 = getelementptr inbounds float, float* %22, i64 7
store float %44, float* %45
%46 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 8
%47 = load float, float* %46
%48 = getelementptr inbounds float, float* %22, i64 8
store float %47, float* %48
%49 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 9
%50 = load float, float* %49
%51 = getelementptr inbounds float, float* %22, i64 9
store float %50, float* %51
%52 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 10
%53 = load float, float* %52
%54 = getelementptr inbounds float, float* %22, i64 10
store float %53, float* %54
%55 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 11
%56 = load float, float* %55
%57 = getelementptr inbounds float, float* %22, i64 11
store float %56, float* %57
%58 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 12
%59 = load float, float* %58
%60 = getelementptr inbounds float, float* %22, i64 12
store float %59, float* %60
%61 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 13
%62 = load float, float* %61
%63 = getelementptr inbounds float, float* %22, i64 13
store float %62, float* %63
%64 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 14
%65 = load float, float* %64
%66 = getelementptr inbounds float, float* %22, i64 14
store float %65, float* %66
%67 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 15
%68 = load float, float* %67
%69 = getelementptr inbounds float, float* %22, i64 15
store float %68, float* %69
%70 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 16
%71 = load float, float* %70
%72 = getelementptr inbounds float, float* %22, i64 16
store float %71, float* %72
%73 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 17
%74 = load float, float* %73
%75 = getelementptr inbounds float, float* %22, i64 17
store float %74, float* %75
%76 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 18
%77 = load float, float* %76
%78 = getelementptr inbounds float, float* %22, i64 18
store float %77, float* %78
%79 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* bitcast (<{ <{ float, [19 x float] }>, <{ float, float, [18 x float] }>, <{ float, float, float, [17 x float] }>, <{ float, float, float, float, [16 x float] }>, <{ float, float, float, float, float, [15 x float] }>, <{ float, float, float, float, float, float, [14 x float] }>, <{ float, float, float, float, float, float, float, [13 x float] }>, <{ [8 x float], [12 x float] }>, <{ [9 x float], [11 x float] }>, <{ [10 x float], [10 x float] }>, <{ [11 x float], [9 x float] }>, <{ [12 x float], [8 x float] }>, [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float], [20 x float] }>* @__const.proba_pair_wise.emitPairsDefault to [20 x [20 x float]]*), i64 0, i64 %20, i64 19
%80 = load float, float* %79
%81 = getelementptr inbounds float, float* %22, i64 19
store float %80, float* %81
%82 = add nuw nsw i64 %20, 1
%83 = icmp eq i64 %82, 20
br i1 %83, label %84, label %19
84: ; preds = %19
%85 = trunc i64 %10 to i32
%86 = inttoptr i64 %16 to float**
%87 = bitcast i8* %18 to float*
br label %88
88: ; preds = %84, %88
%89 = phi i64 [ 0, %84 ], [ %220, %88 ]
%90 = getelementptr inbounds float, float* %87, i64 %89
store float 1.000000e+00, float* %90
%91 = getelementptr inbounds float*, float** %86, i64 %89
%92 = load float*, float** %91
%93 = bitcast float* %92 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %93
%94 = getelementptr inbounds float, float* %92, i64 4
%95 = bitcast float* %94 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %95
%96 = getelementptr inbounds float, float* %92, i64 8
%97 = bitcast float* %96 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %97
%98 = getelementptr inbounds float, float* %92, i64 12
%99 = bitcast float* %98 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %99
%100 = getelementptr inbounds float, float* %92, i64 16
%101 = bitcast float* %100 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %101
%102 = getelementptr inbounds float, float* %92, i64 20
%103 = bitcast float* %102 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %103
%104 = getelementptr inbounds float, float* %92, i64 24
%105 = bitcast float* %104 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %105
%106 = getelementptr inbounds float, float* %92, i64 28
%107 = bitcast float* %106 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %107
%108 = getelementptr inbounds float, float* %92, i64 32
%109 = bitcast float* %108 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %109
%110 = getelementptr inbounds float, float* %92, i64 36
%111 = bitcast float* %110 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %111
%112 = getelementptr inbounds float, float* %92, i64 40
%113 = bitcast float* %112 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %113
%114 = getelementptr inbounds float, float* %92, i64 44
%115 = bitcast float* %114 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %115
%116 = getelementptr inbounds float, float* %92, i64 48
%117 = bitcast float* %116 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %117
%118 = getelementptr inbounds float, float* %92, i64 52
%119 = bitcast float* %118 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %119
%120 = getelementptr inbounds float, float* %92, i64 56
%121 = bitcast float* %120 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %121
%122 = getelementptr inbounds float, float* %92, i64 60
%123 = bitcast float* %122 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %123
%124 = getelementptr inbounds float, float* %92, i64 64
%125 = bitcast float* %124 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %125
%126 = getelementptr inbounds float, float* %92, i64 68
%127 = bitcast float* %126 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %127
%128 = getelementptr inbounds float, float* %92, i64 72
%129 = bitcast float* %128 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %129
%130 = getelementptr inbounds float, float* %92, i64 76
%131 = bitcast float* %130 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %131
%132 = getelementptr inbounds float, float* %92, i64 80
%133 = bitcast float* %132 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %133
%134 = getelementptr inbounds float, float* %92, i64 84
%135 = bitcast float* %134 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %135
%136 = getelementptr inbounds float, float* %92, i64 88
%137 = bitcast float* %136 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %137
%138 = getelementptr inbounds float, float* %92, i64 92
%139 = bitcast float* %138 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %139
%140 = getelementptr inbounds float, float* %92, i64 96
%141 = bitcast float* %140 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %141
%142 = getelementptr inbounds float, float* %92, i64 100
%143 = bitcast float* %142 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %143
%144 = getelementptr inbounds float, float* %92, i64 104
%145 = bitcast float* %144 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %145
%146 = getelementptr inbounds float, float* %92, i64 108
%147 = bitcast float* %146 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %147
%148 = getelementptr inbounds float, float* %92, i64 112
%149 = bitcast float* %148 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %149
%150 = getelementptr inbounds float, float* %92, i64 116
%151 = bitcast float* %150 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %151
%152 = getelementptr inbounds float, float* %92, i64 120
%153 = bitcast float* %152 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %153
%154 = getelementptr inbounds float, float* %92, i64 124
%155 = bitcast float* %154 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %155
%156 = getelementptr inbounds float, float* %92, i64 128
%157 = bitcast float* %156 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %157
%158 = getelementptr inbounds float, float* %92, i64 132
%159 = bitcast float* %158 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %159
%160 = getelementptr inbounds float, float* %92, i64 136
%161 = bitcast float* %160 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %161
%162 = getelementptr inbounds float, float* %92, i64 140
%163 = bitcast float* %162 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %163
%164 = getelementptr inbounds float, float* %92, i64 144
%165 = bitcast float* %164 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %165
%166 = getelementptr inbounds float, float* %92, i64 148
%167 = bitcast float* %166 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %167
%168 = getelementptr inbounds float, float* %92, i64 152
%169 = bitcast float* %168 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %169
%170 = getelementptr inbounds float, float* %92, i64 156
%171 = bitcast float* %170 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %171
%172 = getelementptr inbounds float, float* %92, i64 160
%173 = bitcast float* %172 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %173
%174 = getelementptr inbounds float, float* %92, i64 164
%175 = bitcast float* %174 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %175
%176 = getelementptr inbounds float, float* %92, i64 168
%177 = bitcast float* %176 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %177
%178 = getelementptr inbounds float, float* %92, i64 172
%179 = bitcast float* %178 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %179
%180 = getelementptr inbounds float, float* %92, i64 176
%181 = bitcast float* %180 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %181
%182 = getelementptr inbounds float, float* %92, i64 180
%183 = bitcast float* %182 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %183
%184 = getelementptr inbounds float, float* %92, i64 184
%185 = bitcast float* %184 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %185
%186 = getelementptr inbounds float, float* %92, i64 188
%187 = bitcast float* %186 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %187
%188 = getelementptr inbounds float, float* %92, i64 192
%189 = bitcast float* %188 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %189
%190 = getelementptr inbounds float, float* %92, i64 196
%191 = bitcast float* %190 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %191
%192 = getelementptr inbounds float, float* %92, i64 200
%193 = bitcast float* %192 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %193
%194 = getelementptr inbounds float, float* %92, i64 204
%195 = bitcast float* %194 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %195
%196 = getelementptr inbounds float, float* %92, i64 208
%197 = bitcast float* %196 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %197
%198 = getelementptr inbounds float, float* %92, i64 212
%199 = bitcast float* %198 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %199
%200 = getelementptr inbounds float, float* %92, i64 216
%201 = bitcast float* %200 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %201
%202 = getelementptr inbounds float, float* %92, i64 220
%203 = bitcast float* %202 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %203
%204 = getelementptr inbounds float, float* %92, i64 224
%205 = bitcast float* %204 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %205
%206 = getelementptr inbounds float, float* %92, i64 228
%207 = bitcast float* %206 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %207
%208 = getelementptr inbounds float, float* %92, i64 232
%209 = bitcast float* %208 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %209
%210 = getelementptr inbounds float, float* %92, i64 236
%211 = bitcast float* %210 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %211
%212 = getelementptr inbounds float, float* %92, i64 240
%213 = bitcast float* %212 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %213
%214 = getelementptr inbounds float, float* %92, i64 244
%215 = bitcast float* %214 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %215
%216 = getelementptr inbounds float, float* %92, i64 248
%217 = bitcast float* %216 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %217
%218 = getelementptr inbounds float, float* %92, i64 252
%219 = bitcast float* %218 to <4 x float>*
store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %219
%220 = add nuw nsw i64 %89, 1
%221 = icmp eq i64 %220, 256
br i1 %221, label %222, label %88
222: ; preds = %88
%223 = bitcast i8* %17 to float*
br label %224
224: ; preds = %278, %222
%225 = phi float [ 0x3FB40C20A0000000, %222 ], [ %281, %278 ]
%226 = phi i64 [ 0, %222 ], [ %276, %278 ]
%227 = phi i64 [ 1, %222 ], [ %279, %278 ]
%228 = getelementptr inbounds [21 x i8], [21 x i8]* @__const.proba_pair_wise.alphabetDefault, i64 0, i64 %226
%229 = load i8, i8* %228
%230 = sext i8 %229 to i32
%231 = tail call i32 @tolower(i32 %230)
%232 = tail call i32 @toupper(i32 %230)
%233 = sext i32 %231 to i64
%234 = getelementptr inbounds float, float* %87, i64 %233
store float %225, float* %234
%235 = sext i32 %232 to i64
%236 = getelementptr inbounds float, float* %87, i64 %235
store float %225, float* %236
%237 = getelementptr inbounds float*, float** %14, i64 %226
%238 = load float*, float** %237
%239 = getelementptr inbounds float*, float** %86, i64 %233
%240 = load float*, float** %239
%241 = getelementptr inbounds float*, float** %86, i64 %235
%242 = load float*, float** %241
br label %243
243: ; preds = %224, %243
%244 = phi i64 [ 0, %224 ], [ %273, %243 ]
%245 = getelementptr inbounds [21 x i8], [21 x i8]* @__const.proba_pair_wise.alphabetDefault, i64 0, i64 %244
%246 = load i8, i8* %245
%247 = sext i8 %246 to i32
%248 = tail call i32 @tolower(i32 %247)
%249 = tail call i32 @toupper(i32 %247)
%250 = getelementptr inbounds float, float* %238, i64 %244
%251 = load float, float* %250
%252 = sext i32 %248 to i64
%253 = getelementptr inbounds float, float* %240, i64 %252
store float %251, float* %253
%254 = load float, float* %250
%255 = getelementptr inbounds float, float* %242, i64 %252
store float %254, float* %255
%256 = load float, float* %250
%257 = sext i32 %249 to i64
%258 = getelementptr inbounds float, float* %242, i64 %257
store float %256, float* %258
%259 = load float, float* %250
%260 = getelementptr inbounds float, float* %240, i64 %257
store float %259, float* %260
%261 = load float, float* %250
%262 = getelementptr inbounds float*, float** %86, i64 %252
%263 = load float*, float** %262
%264 = getelementptr inbounds float, float* %263, i64 %233
store float %261, float* %264
%265 = load float, float* %250
%266 = getelementptr inbounds float*, float** %86, i64 %257
%267 = load float*, float** %266
%268 = getelementptr inbounds float, float* %267, i64 %233
store float %265, float* %268
%269 = load float, float* %250
%270 = getelementptr inbounds float, float* %267, i64 %235
store float %269, float* %270
%271 = load float, float* %250
%272 = getelementptr inbounds float, float* %263, i64 %235
store float %271, float* %272
%273 = add nuw nsw i64 %244, 1
%274 = icmp eq i64 %273, %227
br i1 %274, label %275, label %243
275: ; preds = %243
%276 = add nuw nsw i64 %226, 1
%277 = icmp eq i64 %276, 20
br i1 %277, label %282, label %278
278: ; preds = %275
%279 = add nuw nsw i64 %227, 1
%280 = getelementptr inbounds float, float* %223, i64 %276
%281 = load float, float* %280
br label %224
282: ; preds = %275
%283 = trunc i64 %11 to i32
%284 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 5, i32 5)
%285 = sext i32 %284 to i64
%286 = inttoptr i64 %285 to float**
%287 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 5, i32 5)
%288 = sext i32 %287 to i64
%289 = inttoptr i64 %288 to float**
%290 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 256, i32 5)
%291 = sext i32 %290 to i64
%292 = inttoptr i64 %291 to float**
%293 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @declare_float to i32 (i32, i32, ...)*)(i32 256, i32 256)
%294 = sext i32 %293 to i64
%295 = inttoptr i64 %294 to float**
%296 = tail call dereferenceable_or_null(44) i8* @calloc(i64 11, i64 4)
%297 = bitcast i8* %296 to float*
%298 = getelementptr inbounds [5 x float], [5 x float]* %4, i64 0, i64 0
%299 = getelementptr inbounds [4 x float], [4 x float]* %5, i64 0, i64 0
%300 = getelementptr inbounds [4 x float], [4 x float]* %6, i64 0, i64 0
%301 = call i32 (i32, i32, float*, float*, float**, float*, float*, float**, float**, float**, float*, float**, ...) bitcast (i32 (...)* @ProbabilisticModel to i32 (i32, i32, float*, float*, float**, float*, float*, float**, float**, float**, float*, float**, ...)*)(i32 5, i32 2, float* %298, float* %87, float** %86, float* %299, float* %300, float** %286, float** %292, float** %295, float* %297, float** %289)
%302 = add i64 %11, 1
%303 = shl i64 %10, 32
%304 = add i64 %303, 4294967296
%305 = mul i64 %304, %302
%306 = ashr exact i64 %305, 32
%307 = call i8* @calloc(i64 %306, i64 4)
%308 = bitcast i8* %307 to float*
%309 = icmp sgt i32 %85, %283
%310 = select i1 %309, i32 %85, i32 %283
%311 = add nsw i32 %310, 1
%312 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @declare_arrayN to i32 (i32, i32, i32, ...)*)(i32 2, i32 5, i32 %311)
%313 = sext i32 %312 to i64
%314 = inttoptr i64 %313 to float***
%315 = call i32 (i8*, i8*, i32, float**, float**, float*, float***, ...) bitcast (i32 (...)* @get_tot_prob2 to i32 (i8*, i8*, i32, float**, float**, float*, float***, ...)*)(i8* %0, i8* %1, i32 5, float** %295, float** %292, float* %308, float*** %314)
%316 = call i32 (i32, i32, i32, i32, float**, float*, float*, float***, float**, ...) bitcast (i32 (...)* @forward_proba_pair_wise to i32 (i32, i32, i32, i32, float**, float*, float*, float***, float**, ...)*)(i32 %85, i32 %283, i32 5, i32 2, float** %286, float* %297, float* %308, float*** %314, float** %289)
%317 = sext i32 %316 to i64
%318 = inttoptr i64 %317 to float*
%319 = call i32 (i32, i32, i32, i32, float**, float*, float*, float***, float**, ...) bitcast (i32 (...)* @backward_proba_pair_wise to i32 (i32, i32, i32, i32, float**, float*, float*, float***, float**, ...)*)(i32 %85, i32 %283, i32 5, i32 2, float** %286, float* %297, float* %308, float*** %314, float** %289)
%320 = sext i32 %319 to i64
%321 = inttoptr i64 %320 to float*
%322 = call i32 (i32, i32, i32, i32, float*, float*, double, i32*, ...) bitcast (i32 (...)* @ProbaMatrix2CL to i32 (i32, i32, i32, i32, float*, float*, double, i32*, ...)*)(i32 %85, i32 %283, i32 5, i32 2, float* %318, float* %321, double 0x3F847AE140000000, i32* %2)
%323 = inttoptr i64 %317 to i8*
%324 = inttoptr i64 %320 to i8*
%325 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %86, i32 256)
%326 = call i32 (float**, i64, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i64, ...)*)(float** %14, i64 20)
%327 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %286, i32 5)
%328 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %289, i32 5)
%329 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %292, i32 256)
%330 = call i32 (float**, i32, ...) bitcast (i32 (...)* @deallocate2D_float to i32 (float**, i32, ...)*)(float** %295, i32 256)
%331 = call i32 (float***, i32, i32, ...) bitcast (i32 (...)* @deallocate3D_float to i32 (float***, i32, i32, ...)*)(float*** %314, i32 2, i32 5)
ret i32 %322
}