#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double sqrt(double);
void sor(double omg, double dx, double dy, int imax, int jmax, double **P,
         double **RS, double *res, int **Flag, double presLeft,
         double presRight) {
  int i, j;
  double rloc;
  double coeff = omg / (2.0 * (1.0 / (dx * dx) + 1.0 / (dy * dy)));
  double FluidCells = 0.0;
  for (i = 1; i <= imax; i++) {
    for (j = 1; j <= jmax; j++) {
      if (Flag[i][j] == 16) {
        P[i][j] = (1.0 - omg) * P[i][j] +
                  coeff * ((P[i + 1][j] + P[i - 1][j]) / (dx * dx) +
                           (P[i][j + 1] + P[i][j - 1]) / (dy * dy) - RS[i][j]);
        FluidCells++;
      }
    }
  }
  rloc = 0;
  for (i = 1; i <= imax; i++) {
    for (j = 1; j <= jmax; j++) {
      if (Flag[i][j] == 16) {
        rloc += ((P[i + 1][j] - 2.0 * P[i][j] + P[i - 1][j]) / (dx * dx) +
                 (P[i][j + 1] - 2.0 * P[i][j] + P[i][j - 1]) / (dy * dy) -
                 RS[i][j]) *
                ((P[i + 1][j] - 2.0 * P[i][j] + P[i - 1][j]) / (dx * dx) +
                 (P[i][j + 1] - 2.0 * P[i][j] + P[i][j - 1]) / (dy * dy) -
                 RS[i][j]);
      }
    }
  }
  rloc = rloc / FluidCells;
  rloc = sqrt(rloc);
  *res = rloc;
  for (i = 0; i <= imax + 1; i++) {
    P[i][0] = P[i][1];
    P[i][jmax + 1] = P[i][jmax];
    for (j = 0; j <= jmax + 1; j++) {
      switch (Flag[i][j]) {
      case 1:
        P[i][j] = P[i][j + 1];
        break;
      case 8:
        P[i][j] = P[i + 1][j];
        break;
      case 2:
        P[i][j] = P[i][j - 1];
        break;
      case 4:
        P[i][j] = P[i - 1][j];
        break;
      case 9:
        P[i][j] = (P[i + 1][j] + P[i][j + 1]) * 0.5;
        break;
      case 5:
        P[i][j] = (P[i - 1][j] + P[i][j + 1]) * 0.5;
        break;
      case 12:
        P[i][j] = (P[i + 1][j] + P[i][j - 1]) * 0.5;
        break;
      case 6:
        P[i][j] = (P[i - 1][j] + P[i][j - 1]) * 0.5;
        break;
      }
    }
  }
  for (j = 0; j <= jmax + 1; j++) {
    if ((Flag[0][j] & 32) != 0) {
      P[0][j] = presLeft * 2.0 - P[1][j];
    }
    if ((Flag[imax + 1][j] & 32) != 0) {
      P[imax + 1][j] = 2.0 * presRight - P[imax][j];
    }
  }
}


x86 assembly (clang, -O0):
<sor>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
mov    %edi,-0x1c(%rbp)
mov    %esi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
mov    %r8,-0x38(%rbp)
mov    %r9,-0x40(%rbp)
movsd  %xmm3,-0x48(%rbp)
movsd  %xmm4,-0x50(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xea7(%rip),%xmm2
divsd  %xmm1,%xmm2
movsd  -0x18(%rbp),%xmm3
mulsd  -0x18(%rbp),%xmm3
movsd  0xe91(%rip),%xmm1
divsd  %xmm3,%xmm1
addsd  %xmm1,%xmm2
movsd  0xe79(%rip),%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     12f9 <sor+0x1e9>
movl   $0x1,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x20(%rbp),%eax
jg     12e6 <sor+0x1d6>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x10,(%rax,%rcx,4)
jne    12d3 <sor+0x1c3>
movsd  0xe24(%rip),%xmm0
subsd  -0x8(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x68(%rbp),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm3
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm3
movsd  -0x10(%rbp),%xmm4
mulsd  -0x10(%rbp),%xmm4
divsd  %xmm4,%xmm3
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm4
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm4
movsd  -0x18(%rbp),%xmm5
mulsd  -0x18(%rbp),%xmm5
divsd  %xmm5,%xmm4
addsd  %xmm4,%xmm3
mov    -0x30(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xd3f(%rip),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    12d8 <sor+0x1c8>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    11b6 <sor+0xa6>
jmp    12eb <sor+0x1db>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    11a3 <sor+0x93>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     1527 <sor+0x417>
movl   $0x1,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x20(%rbp),%eax
jg     1514 <sor+0x404>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x10,(%rax,%rcx,4)
jne    1501 <sor+0x3f1>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
addsd  %xmm2,%xmm2
subsd  %xmm2,%xmm1
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  -0x18(%rbp),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm2
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
divsd  %xmm1,%xmm2
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm3
addsd  %xmm3,%xmm3
subsd  %xmm3,%xmm1
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  -0x18(%rbp),%xmm3
mulsd  -0x18(%rbp),%xmm3
divsd  %xmm3,%xmm1
addsd  %xmm1,%xmm2
mov    -0x30(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1506 <sor+0x3f6>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    131b <sor+0x20b>
jmp    1519 <sor+0x409>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1308 <sor+0x1f8>
movsd  -0x60(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     1864 <sor+0x754>
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     1851 <sor+0x741>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x78(%rbp)
sub    $0xb,%eax
ja     183e <sor+0x72e>
mov    -0x78(%rbp),%rax
lea    0xa16(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    183e <sor+0x72e>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    183e <sor+0x72e>
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    183e <sor+0x72e>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    183e <sor+0x72e>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0x8f9(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    183e <sor+0x72e>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0x89f(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    183e <sor+0x72e>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0x845(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    183e <sor+0x72e>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x58(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0x7eb(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1843 <sor+0x733>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    15c1 <sor+0x4b1>
jmp    1856 <sor+0x746>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1559 <sor+0x449>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     1965 <sor+0x855>
mov    -0x40(%rbp),%rax
mov    (%rax),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     18db <sor+0x7cb>
movsd  -0x48(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
mov    (%rax),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     1952 <sor+0x842>
movsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1957 <sor+0x847>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    186b <sor+0x75b>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sor>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,0x10(%rsp)
mov    %r8,%r15
mov    %rdx,%r13
mov    %esi,%r14d
movapd %xmm0,%xmm9
xorpd  %xmm0,%xmm0
xorpd  %xmm5,%xmm5
test   %edi,%edi
mov    %rdi,(%rsp)
jle    1333 <sor+0x223>
unpcklpd %xmm2,%xmm1
mulpd  %xmm1,%xmm1
movsd  0xeaa(%rip),%xmm8
movapd %xmm8,%xmm2
divsd  %xmm1,%xmm2
movapd %xmm1,%xmm10
unpckhpd %xmm1,%xmm10
movapd %xmm8,%xmm7
divsd  %xmm10,%xmm7
addsd  %xmm2,%xmm7
addsd  %xmm7,%xmm7
movapd %xmm8,%xmm6
subsd  %xmm9,%xmm6
divsd  %xmm7,%xmm9
lea    0x1(%r14),%r10d
lea    0x1(%rdi),%r12d
xorpd  %xmm5,%xmm5
mov    $0x1,%edx
jmp    11b0 <sor+0xa0>
nopl   (%rax)
add    $0x1,%rdx
mov    %rdx,%r8
cmp    %r12,%r8
je     124d <sor+0x13d>
test   %r14d,%r14d
jle    11a0 <sor+0x90>
mov    0x10(%rsp),%rax
mov    (%rax,%rdx,8),%rdi
lea    0x1(%rdx),%r8
mov    %r8d,%r9d
mov    $0x1,%esi
jmp    1236 <sor+0x126>
nopl   0x0(%rax)
mov    -0x8(%r13,%rdx,8),%rbp
mov    0x0(%r13,%rdx,8),%rbx
mov    0x0(%r13,%r9,8),%rax
movsd  (%rax,%rsi,8),%xmm7
addsd  0x0(%rbp,%rsi,8),%xmm7
lea    0x1(%rsi),%rax
mov    %eax,%ebp
movsd  (%rbx,%rbp,8),%xmm2
addsd  -0x8(%rbx,%rsi,8),%xmm2
divsd  %xmm1,%xmm7
divsd  %xmm10,%xmm2
addsd  %xmm7,%xmm2
mov    (%rcx,%rdx,8),%rbp
subsd  0x0(%rbp,%rsi,8),%xmm2
mulsd  %xmm9,%xmm2
movsd  (%rbx,%rsi,8),%xmm7
mulsd  %xmm6,%xmm7
addsd  %xmm2,%xmm7
movsd  %xmm7,(%rbx,%rsi,8)
addsd  %xmm8,%xmm5
mov    %rax,%rsi
cmp    %r10,%rsi
je     1245 <sor+0x135>
cmpl   $0x10,(%rdi,%rsi,4)
je     11d0 <sor+0xc0>
add    $0x1,%rsi
cmp    %r10,%rsi
jne    1236 <sor+0x126>
mov    %r8,%rdx
jmp    11a7 <sor+0x97>
cmpl   $0x0,(%rsp)
jle    132f <sor+0x21f>
mov    %r15,0x8(%rsp)
xorpd  %xmm0,%xmm0
mov    $0x1,%r15d
jmp    1280 <sor+0x170>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r15
mov    %r15,%r8
cmp    %r12,%r8
je     1324 <sor+0x214>
test   %r14d,%r14d
jle    1270 <sor+0x160>
mov    0x10(%rsp),%rax
mov    (%rax,%r15,8),%r11
lea    0x1(%r15),%r8
mov    %r8d,%r9d
mov    $0x1,%esi
jmp    1308 <sor+0x1f8>
nopl   0x0(%rax)
mov    0x0(%r13,%r9,8),%rax
mov    -0x8(%r13,%r15,8),%rbx
mov    0x0(%r13,%r15,8),%rdi
lea    0x1(%rsi),%rbp
mov    %ebp,%edx
movsd  (%rax,%rsi,8),%xmm2
movhpd (%rdi,%rdx,8),%xmm2
movsd  (%rdi,%rsi,8),%xmm6
addsd  %xmm6,%xmm6
unpcklpd %xmm6,%xmm6
subpd  %xmm6,%xmm2
movsd  (%rbx,%rsi,8),%xmm6
movhpd -0x8(%rdi,%rsi,8),%xmm6
addpd  %xmm2,%xmm6
divpd  %xmm1,%xmm6
movapd %xmm6,%xmm2
unpckhpd %xmm6,%xmm2
addsd  %xmm6,%xmm2
mov    (%rcx,%r15,8),%rax
subsd  (%rax,%rsi,8),%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm0
mov    %rbp,%rsi
cmp    %r10,%rsi
je     1318 <sor+0x208>
cmpl   $0x10,(%r11,%rsi,4)
je     12a0 <sor+0x190>
add    $0x1,%rsi
cmp    %r10,%rsi
jne    1308 <sor+0x1f8>
mov    %r8,%r15
cmp    %r12,%r8
jne    1280 <sor+0x170>
mov    (%rsp),%rdi
mov    0x8(%rsp),%r15
jmp    1337 <sor+0x227>
mov    (%rsp),%rdi
lea    0x1(%rdi),%r12d
mov    %r12,0x8(%rsp)
divsd  %xmm5,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1350 <sor+0x240>
sqrtsd %xmm0,%xmm0
jmp    1371 <sor+0x261>
movsd  %xmm4,0x20(%rsp)
movsd  %xmm3,0x18(%rsp)
call   1030 <sqrt@plt>
mov    (%rsp),%rdi
movsd  0x18(%rsp),%xmm3
movsd  0x20(%rsp),%xmm4
movsd  %xmm0,(%r15)
cmp    $0xffffffff,%edi
jge    1394 <sor+0x284>
cmp    $0xffffffff,%r14d
jge    14c3 <sor+0x3b3>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movslq %r14d,%r8
lea    0x1(%r14),%eax
movslq %eax,%r9
xor    %edx,%edx
test   %r9d,%r9d
mov    $0x0,%eax
cmovg  %r9d,%eax
mov    0x8(%rsp),%rcx
test   %ecx,%ecx
mov    $0x0,%r10d
cmovg  %ecx,%r10d
add    $0x1,%r10d
lea    0x4(,%rax,4),%rdi
lea    0xc40(%rip),%rbp
movsd  0xc30(%rip),%xmm0
jmp    13e8 <sor+0x2d8>
nopw   0x0(%rax,%rax,1)
mov    %r11,%rdx
cmp    %r10,%r11
je     137b <sor+0x26b>
mov    0x0(%r13,%rdx,8),%rax
movsd  0x8(%rax),%xmm1
movsd  %xmm1,(%rax)
movsd  (%rax,%r8,8),%xmm1
movsd  %xmm1,(%rax,%r9,8)
cmp    $0xfffffffe,%r14d
jg     1420 <sor+0x310>
add    $0x1,%rdx
mov    %rdx,%r11
jmp    13e3 <sor+0x2d3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x10(%rsp),%rcx
mov    (%rcx,%rdx,8),%rsi
lea    0x1(%rdx),%r11
mov    %r11d,%ecx
xor    %r12d,%r12d
jmp    145a <sor+0x34a>
mov    -0x8(%r13,%rdx,8),%rbx
movsd  (%rbx,%r12,2),%xmm1
addsd  -0x8(%rax,%r12,2),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rax,%r12,2)
add    $0x4,%r12
cmp    %r12,%rdi
je     13e0 <sor+0x2d0>
mov    (%rsi,%r12,1),%r15d
add    $0xffffffff,%r15d
cmp    $0xb,%r15d
ja     1451 <sor+0x341>
movslq 0x0(%rbp,%r15,4),%rbx
add    %rbp,%rbx
jmp    *%rbx
movsd  0x8(%rax,%r12,2),%xmm1
jmp    144b <sor+0x33b>
movsd  -0x8(%rax,%r12,2),%xmm1
jmp    144b <sor+0x33b>
mov    -0x8(%r13,%rdx,8),%rbx
movsd  (%rbx,%r12,2),%xmm1
jmp    144b <sor+0x33b>
mov    -0x8(%r13,%rdx,8),%rbx
jmp    14aa <sor+0x39a>
mov    0x0(%r13,%rcx,8),%rbx
movsd  (%rbx,%r12,2),%xmm1
jmp    144b <sor+0x33b>
mov    0x0(%r13,%rcx,8),%rbx
movsd  (%rbx,%r12,2),%xmm1
addsd  0x8(%rax,%r12,2),%xmm1
jmp    1447 <sor+0x337>
mov    0x0(%r13,%rcx,8),%rbx
jmp    143a <sor+0x32a>
mov    0x10(%rsp),%rdx
mov    (%rdx),%rax
movslq 0x8(%rsp),%rcx
mov    (%rdx,%rcx,8),%rdx
movslq (%rsp),%rsi
add    $0x2,%r14d
xor    %edi,%edi
addsd  %xmm4,%xmm4
addsd  %xmm3,%xmm3
jmp    14fd <sor+0x3ed>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdi
cmp    %rdi,%r14
je     1385 <sor+0x275>
testb  $0x20,(%rax,%rdi,4)
je     151a <sor+0x40a>
mov    0x0(%r13),%rbp
mov    0x8(%r13),%rbx
movapd %xmm3,%xmm0
subsd  (%rbx,%rdi,8),%xmm0
movsd  %xmm0,0x0(%rbp,%rdi,8)
testb  $0x20,(%rdx,%rdi,4)
je     14f0 <sor+0x3e0>
mov    0x0(%r13,%rsi,8),%rbp
movapd %xmm4,%xmm0
subsd  0x0(%rbp,%rdi,8),%xmm0
mov    0x0(%r13,%rcx,8),%rbp
movsd  %xmm0,0x0(%rbp,%rdi,8)
jmp    14f0 <sor+0x3e0>

LLVM IR (-O0):
define void @sor(double %0, double %1, double %2, i32 %3, i32 %4, double** %5, double** %6, double* %7, i32** %8, double %9, double %10) {
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca i32
%16 = alloca i32
%17 = alloca double**
%18 = alloca double**
%19 = alloca double*
%20 = alloca i32**
%21 = alloca double
%22 = alloca double
%23 = alloca i32
%24 = alloca i32
%25 = alloca double
%26 = alloca double
%27 = alloca double
store double %0, double* %12
store double %1, double* %13
store double %2, double* %14
store i32 %3, i32* %15
store i32 %4, i32* %16
store double** %5, double*** %17
store double** %6, double*** %18
store double* %7, double** %19
store i32** %8, i32*** %20
store double %9, double* %21
store double %10, double* %22
%28 = load double, double* %12
%29 = load double, double* %13
%30 = load double, double* %13
%31 = fmul double %29, %30
%32 = fdiv double 1.000000e+00, %31
%33 = load double, double* %14
%34 = load double, double* %14
%35 = fmul double %33, %34
%36 = fdiv double 1.000000e+00, %35
%37 = fadd double %32, %36
%38 = fmul double 2.000000e+00, %37
%39 = fdiv double %28, %38
store double %39, double* %26
store double 0.000000e+00, double* %27
store i32 1, i32* %23
br label %40
40: ; preds = %151, %11
%41 = load i32, i32* %23
%42 = load i32, i32* %15
%43 = icmp sle i32 %41, %42
br i1 %43, label %44, label %154
44: ; preds = %40
store i32 1, i32* %24
br label %45
45: ; preds = %147, %44
%46 = load i32, i32* %24
%47 = load i32, i32* %16
%48 = icmp sle i32 %46, %47
br i1 %48, label %49, label %150
49: ; preds = %45
%50 = load i32**, i32*** %20
%51 = load i32, i32* %23
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i32*, i32** %50, i64 %52
%54 = load i32*, i32** %53
%55 = load i32, i32* %24
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i32, i32* %54, i64 %56
%58 = load i32, i32* %57
%59 = icmp eq i32 %58, 16
br i1 %59, label %60, label %146
60: ; preds = %49
%61 = load double, double* %12
%62 = fsub double 1.000000e+00, %61
%63 = load double**, double*** %17
%64 = load i32, i32* %23
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds double*, double** %63, i64 %65
%67 = load double*, double** %66
%68 = load i32, i32* %24
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds double, double* %67, i64 %69
%71 = load double, double* %70
%72 = load double, double* %26
%73 = load double**, double*** %17
%74 = load i32, i32* %23
%75 = add nsw i32 %74, 1
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds double*, double** %73, i64 %76
%78 = load double*, double** %77
%79 = load i32, i32* %24
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds double, double* %78, i64 %80
%82 = load double, double* %81
%83 = load double**, double*** %17
%84 = load i32, i32* %23
%85 = sub nsw i32 %84, 1
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds double*, double** %83, i64 %86
%88 = load double*, double** %87
%89 = load i32, i32* %24
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds double, double* %88, i64 %90
%92 = load double, double* %91
%93 = fadd double %82, %92
%94 = load double, double* %13
%95 = load double, double* %13
%96 = fmul double %94, %95
%97 = fdiv double %93, %96
%98 = load double**, double*** %17
%99 = load i32, i32* %23
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds double*, double** %98, i64 %100
%102 = load double*, double** %101
%103 = load i32, i32* %24
%104 = add nsw i32 %103, 1
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double, double* %102, i64 %105
%107 = load double, double* %106
%108 = load double**, double*** %17
%109 = load i32, i32* %23
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds double*, double** %108, i64 %110
%112 = load double*, double** %111
%113 = load i32, i32* %24
%114 = sub nsw i32 %113, 1
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds double, double* %112, i64 %115
%117 = load double, double* %116
%118 = fadd double %107, %117
%119 = load double, double* %14
%120 = load double, double* %14
%121 = fmul double %119, %120
%122 = fdiv double %118, %121
%123 = fadd double %97, %122
%124 = load double**, double*** %18
%125 = load i32, i32* %23
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds double*, double** %124, i64 %126
%128 = load double*, double** %127
%129 = load i32, i32* %24
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds double, double* %128, i64 %130
%132 = load double, double* %131
%133 = fsub double %123, %132
%134 = fmul double %72, %133
%135 = call double @llvm.fmuladd.f64(double %62, double %71, double %134)
%136 = load double**, double*** %17
%137 = load i32, i32* %23
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds double*, double** %136, i64 %138
%140 = load double*, double** %139
%141 = load i32, i32* %24
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds double, double* %140, i64 %142
store double %135, double* %143
%144 = load double, double* %27
%145 = fadd double %144, 1.000000e+00
store double %145, double* %27
br label %146
146: ; preds = %60, %49
br label %147
147: ; preds = %146
%148 = load i32, i32* %24
%149 = add nsw i32 %148, 1
store i32 %149, i32* %24
br label %45
150: ; preds = %45
br label %151
151: ; preds = %150
%152 = load i32, i32* %23
%153 = add nsw i32 %152, 1
store i32 %153, i32* %23
br label %40
154: ; preds = %40
store double 0.000000e+00, double* %25
store i32 1, i32* %23
br label %155
155: ; preds = %345, %154
%156 = load i32, i32* %23
%157 = load i32, i32* %15
%158 = icmp sle i32 %156, %157
br i1 %158, label %159, label %348
159: ; preds = %155
store i32 1, i32* %24
br label %160
160: ; preds = %341, %159
%161 = load i32, i32* %24
%162 = load i32, i32* %16
%163 = icmp sle i32 %161, %162
br i1 %163, label %164, label %344
164: ; preds = %160
%165 = load i32**, i32*** %20
%166 = load i32, i32* %23
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds i32*, i32** %165, i64 %167
%169 = load i32*, i32** %168
%170 = load i32, i32* %24
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds i32, i32* %169, i64 %171
%173 = load i32, i32* %172
%174 = icmp eq i32 %173, 16
br i1 %174, label %175, label %340
175: ; preds = %164
%176 = load double**, double*** %17
%177 = load i32, i32* %23
%178 = add nsw i32 %177, 1
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds double*, double** %176, i64 %179
%181 = load double*, double** %180
%182 = load i32, i32* %24
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds double, double* %181, i64 %183
%185 = load double, double* %184
%186 = load double**, double*** %17
%187 = load i32, i32* %23
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds double*, double** %186, i64 %188
%190 = load double*, double** %189
%191 = load i32, i32* %24
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds double, double* %190, i64 %192
%194 = load double, double* %193
%195 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %194, double %185)
%196 = load double**, double*** %17
%197 = load i32, i32* %23
%198 = sub nsw i32 %197, 1
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds double*, double** %196, i64 %199
%201 = load double*, double** %200
%202 = load i32, i32* %24
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds double, double* %201, i64 %203
%205 = load double, double* %204
%206 = fadd double %195, %205
%207 = load double, double* %13
%208 = load double, double* %13
%209 = fmul double %207, %208
%210 = fdiv double %206, %209
%211 = load double**, double*** %17
%212 = load i32, i32* %23
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds double*, double** %211, i64 %213
%215 = load double*, double** %214
%216 = load i32, i32* %24
%217 = add nsw i32 %216, 1
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds double, double* %215, i64 %218
%220 = load double, double* %219
%221 = load double**, double*** %17
%222 = load i32, i32* %23
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds double*, double** %221, i64 %223
%225 = load double*, double** %224
%226 = load i32, i32* %24
%227 = sext i32 %226 to i64
%228 = getelementptr inbounds double, double* %225, i64 %227
%229 = load double, double* %228
%230 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %229, double %220)
%231 = load double**, double*** %17
%232 = load i32, i32* %23
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds double*, double** %231, i64 %233
%235 = load double*, double** %234
%236 = load i32, i32* %24
%237 = sub nsw i32 %236, 1
%238 = sext i32 %237 to i64
%239 = getelementptr inbounds double, double* %235, i64 %238
%240 = load double, double* %239
%241 = fadd double %230, %240
%242 = load double, double* %14
%243 = load double, double* %14
%244 = fmul double %242, %243
%245 = fdiv double %241, %244
%246 = fadd double %210, %245
%247 = load double**, double*** %18
%248 = load i32, i32* %23
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds double*, double** %247, i64 %249
%251 = load double*, double** %250
%252 = load i32, i32* %24
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds double, double* %251, i64 %253
%255 = load double, double* %254
%256 = fsub double %246, %255
%257 = load double**, double*** %17
%258 = load i32, i32* %23
%259 = add nsw i32 %258, 1
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds double*, double** %257, i64 %260
%262 = load double*, double** %261
%263 = load i32, i32* %24
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds double, double* %262, i64 %264
%266 = load double, double* %265
%267 = load double**, double*** %17
%268 = load i32, i32* %23
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds double*, double** %267, i64 %269
%271 = load double*, double** %270
%272 = load i32, i32* %24
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds double, double* %271, i64 %273
%275 = load double, double* %274
%276 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %275, double %266)
%277 = load double**, double*** %17
%278 = load i32, i32* %23
%279 = sub nsw i32 %278, 1
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds double*, double** %277, i64 %280
%282 = load double*, double** %281
%283 = load i32, i32* %24
%284 = sext i32 %283 to i64
%285 = getelementptr inbounds double, double* %282, i64 %284
%286 = load double, double* %285
%287 = fadd double %276, %286
%288 = load double, double* %13
%289 = load double, double* %13
%290 = fmul double %288, %289
%291 = fdiv double %287, %290
%292 = load double**, double*** %17
%293 = load i32, i32* %23
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds double*, double** %292, i64 %294
%296 = load double*, double** %295
%297 = load i32, i32* %24
%298 = add nsw i32 %297, 1
%299 = sext i32 %298 to i64
%300 = getelementptr inbounds double, double* %296, i64 %299
%301 = load double, double* %300
%302 = load double**, double*** %17
%303 = load i32, i32* %23
%304 = sext i32 %303 to i64
%305 = getelementptr inbounds double*, double** %302, i64 %304
%306 = load double*, double** %305
%307 = load i32, i32* %24
%308 = sext i32 %307 to i64
%309 = getelementptr inbounds double, double* %306, i64 %308
%310 = load double, double* %309
%311 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %310, double %301)
%312 = load double**, double*** %17
%313 = load i32, i32* %23
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds double*, double** %312, i64 %314
%316 = load double*, double** %315
%317 = load i32, i32* %24
%318 = sub nsw i32 %317, 1
%319 = sext i32 %318 to i64
%320 = getelementptr inbounds double, double* %316, i64 %319
%321 = load double, double* %320
%322 = fadd double %311, %321
%323 = load double, double* %14
%324 = load double, double* %14
%325 = fmul double %323, %324
%326 = fdiv double %322, %325
%327 = fadd double %291, %326
%328 = load double**, double*** %18
%329 = load i32, i32* %23
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds double*, double** %328, i64 %330
%332 = load double*, double** %331
%333 = load i32, i32* %24
%334 = sext i32 %333 to i64
%335 = getelementptr inbounds double, double* %332, i64 %334
%336 = load double, double* %335
%337 = fsub double %327, %336
%338 = load double, double* %25
%339 = call double @llvm.fmuladd.f64(double %256, double %337, double %338)
store double %339, double* %25
br label %340
340: ; preds = %175, %164
br label %341
341: ; preds = %340
%342 = load i32, i32* %24
%343 = add nsw i32 %342, 1
store i32 %343, i32* %24
br label %160
344: ; preds = %160
br label %345
345: ; preds = %344
%346 = load i32, i32* %23
%347 = add nsw i32 %346, 1
store i32 %347, i32* %23
br label %155
348: ; preds = %155
%349 = load double, double* %25
%350 = load double, double* %27
%351 = fdiv double %349, %350
store double %351, double* %25
%352 = load double, double* %25
%353 = call double @sqrt(double %352)
store double %353, double* %25
%354 = load double, double* %25
%355 = load double*, double** %19
store double %354, double* %355
store i32 0, i32* %23
br label %356
356: ; preds = %613, %348
%357 = load i32, i32* %23
%358 = load i32, i32* %15
%359 = add nsw i32 %358, 1
%360 = icmp sle i32 %357, %359
br i1 %360, label %361, label %616
361: ; preds = %356
%362 = load double**, double*** %17
%363 = load i32, i32* %23
%364 = sext i32 %363 to i64
%365 = getelementptr inbounds double*, double** %362, i64 %364
%366 = load double*, double** %365
%367 = getelementptr inbounds double, double* %366, i64 1
%368 = load double, double* %367
%369 = load double**, double*** %17
%370 = load i32, i32* %23
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds double*, double** %369, i64 %371
%373 = load double*, double** %372
%374 = getelementptr inbounds double, double* %373, i64 0
store double %368, double* %374
%375 = load double**, double*** %17
%376 = load i32, i32* %23
%377 = sext i32 %376 to i64
%378 = getelementptr inbounds double*, double** %375, i64 %377
%379 = load double*, double** %378
%380 = load i32, i32* %16
%381 = sext i32 %380 to i64
%382 = getelementptr inbounds double, double* %379, i64 %381
%383 = load double, double* %382
%384 = load double**, double*** %17
%385 = load i32, i32* %23
%386 = sext i32 %385 to i64
%387 = getelementptr inbounds double*, double** %384, i64 %386
%388 = load double*, double** %387
%389 = load i32, i32* %16
%390 = add nsw i32 %389, 1
%391 = sext i32 %390 to i64
%392 = getelementptr inbounds double, double* %388, i64 %391
store double %383, double* %392
store i32 0, i32* %24
br label %393
393: ; preds = %609, %361
%394 = load i32, i32* %24
%395 = load i32, i32* %16
%396 = add nsw i32 %395, 1
%397 = icmp sle i32 %394, %396
br i1 %397, label %398, label %612
398: ; preds = %393
%399 = load i32**, i32*** %20
%400 = load i32, i32* %23
%401 = sext i32 %400 to i64
%402 = getelementptr inbounds i32*, i32** %399, i64 %401
%403 = load i32*, i32** %402
%404 = load i32, i32* %24
%405 = sext i32 %404 to i64
%406 = getelementptr inbounds i32, i32* %403, i64 %405
%407 = load i32, i32* %406
switch i32 %407, label %608 [
i32 1, label %408
i32 8, label %427
i32 2, label %446
i32 4, label %465
i32 9, label %484
i32 5, label %515
i32 12, label %546
i32 6, label %577
]
408: ; preds = %398
%409 = load double**, double*** %17
%410 = load i32, i32* %23
%411 = sext i32 %410 to i64
%412 = getelementptr inbounds double*, double** %409, i64 %411
%413 = load double*, double** %412
%414 = load i32, i32* %24
%415 = add nsw i32 %414, 1
%416 = sext i32 %415 to i64
%417 = getelementptr inbounds double, double* %413, i64 %416
%418 = load double, double* %417
%419 = load double**, double*** %17
%420 = load i32, i32* %23
%421 = sext i32 %420 to i64
%422 = getelementptr inbounds double*, double** %419, i64 %421
%423 = load double*, double** %422
%424 = load i32, i32* %24
%425 = sext i32 %424 to i64
%426 = getelementptr inbounds double, double* %423, i64 %425
store double %418, double* %426
br label %608
427: ; preds = %398
%428 = load double**, double*** %17
%429 = load i32, i32* %23
%430 = add nsw i32 %429, 1
%431 = sext i32 %430 to i64
%432 = getelementptr inbounds double*, double** %428, i64 %431
%433 = load double*, double** %432
%434 = load i32, i32* %24
%435 = sext i32 %434 to i64
%436 = getelementptr inbounds double, double* %433, i64 %435
%437 = load double, double* %436
%438 = load double**, double*** %17
%439 = load i32, i32* %23
%440 = sext i32 %439 to i64
%441 = getelementptr inbounds double*, double** %438, i64 %440
%442 = load double*, double** %441
%443 = load i32, i32* %24
%444 = sext i32 %443 to i64
%445 = getelementptr inbounds double, double* %442, i64 %444
store double %437, double* %445
br label %608
446: ; preds = %398
%447 = load double**, double*** %17
%448 = load i32, i32* %23
%449 = sext i32 %448 to i64
%450 = getelementptr inbounds double*, double** %447, i64 %449
%451 = load double*, double** %450
%452 = load i32, i32* %24
%453 = sub nsw i32 %452, 1
%454 = sext i32 %453 to i64
%455 = getelementptr inbounds double, double* %451, i64 %454
%456 = load double, double* %455
%457 = load double**, double*** %17
%458 = load i32, i32* %23
%459 = sext i32 %458 to i64
%460 = getelementptr inbounds double*, double** %457, i64 %459
%461 = load double*, double** %460
%462 = load i32, i32* %24
%463 = sext i32 %462 to i64
%464 = getelementptr inbounds double, double* %461, i64 %463
store double %456, double* %464
br label %608
465: ; preds = %398
%466 = load double**, double*** %17
%467 = load i32, i32* %23
%468 = sub nsw i32 %467, 1
%469 = sext i32 %468 to i64
%470 = getelementptr inbounds double*, double** %466, i64 %469
%471 = load double*, double** %470
%472 = load i32, i32* %24
%473 = sext i32 %472 to i64
%474 = getelementptr inbounds double, double* %471, i64 %473
%475 = load double, double* %474
%476 = load double**, double*** %17
%477 = load i32, i32* %23
%478 = sext i32 %477 to i64
%479 = getelementptr inbounds double*, double** %476, i64 %478
%480 = load double*, double** %479
%481 = load i32, i32* %24
%482 = sext i32 %481 to i64
%483 = getelementptr inbounds double, double* %480, i64 %482
store double %475, double* %483
br label %608
484: ; preds = %398
%485 = load double**, double*** %17
%486 = load i32, i32* %23
%487 = add nsw i32 %486, 1
%488 = sext i32 %487 to i64
%489 = getelementptr inbounds double*, double** %485, i64 %488
%490 = load double*, double** %489
%491 = load i32, i32* %24
%492 = sext i32 %491 to i64
%493 = getelementptr inbounds double, double* %490, i64 %492
%494 = load double, double* %493
%495 = load double**, double*** %17
%496 = load i32, i32* %23
%497 = sext i32 %496 to i64
%498 = getelementptr inbounds double*, double** %495, i64 %497
%499 = load double*, double** %498
%500 = load i32, i32* %24
%501 = add nsw i32 %500, 1
%502 = sext i32 %501 to i64
%503 = getelementptr inbounds double, double* %499, i64 %502
%504 = load double, double* %503
%505 = fadd double %494, %504
%506 = fmul double %505, 5.000000e-01
%507 = load double**, double*** %17
%508 = load i32, i32* %23
%509 = sext i32 %508 to i64
%510 = getelementptr inbounds double*, double** %507, i64 %509
%511 = load double*, double** %510
%512 = load i32, i32* %24
%513 = sext i32 %512 to i64
%514 = getelementptr inbounds double, double* %511, i64 %513
store double %506, double* %514
br label %608
515: ; preds = %398
%516 = load double**, double*** %17
%517 = load i32, i32* %23
%518 = sub nsw i32 %517, 1
%519 = sext i32 %518 to i64
%520 = getelementptr inbounds double*, double** %516, i64 %519
%521 = load double*, double** %520
%522 = load i32, i32* %24
%523 = sext i32 %522 to i64
%524 = getelementptr inbounds double, double* %521, i64 %523
%525 = load double, double* %524
%526 = load double**, double*** %17
%527 = load i32, i32* %23
%528 = sext i32 %527 to i64
%529 = getelementptr inbounds double*, double** %526, i64 %528
%530 = load double*, double** %529
%531 = load i32, i32* %24
%532 = add nsw i32 %531, 1
%533 = sext i32 %532 to i64
%534 = getelementptr inbounds double, double* %530, i64 %533
%535 = load double, double* %534
%536 = fadd double %525, %535
%537 = fmul double %536, 5.000000e-01
%538 = load double**, double*** %17
%539 = load i32, i32* %23
%540 = sext i32 %539 to i64
%541 = getelementptr inbounds double*, double** %538, i64 %540
%542 = load double*, double** %541
%543 = load i32, i32* %24
%544 = sext i32 %543 to i64
%545 = getelementptr inbounds double, double* %542, i64 %544
store double %537, double* %545
br label %608
546: ; preds = %398
%547 = load double**, double*** %17
%548 = load i32, i32* %23
%549 = add nsw i32 %548, 1
%550 = sext i32 %549 to i64
%551 = getelementptr inbounds double*, double** %547, i64 %550
%552 = load double*, double** %551
%553 = load i32, i32* %24
%554 = sext i32 %553 to i64
%555 = getelementptr inbounds double, double* %552, i64 %554
%556 = load double, double* %555
%557 = load double**, double*** %17
%558 = load i32, i32* %23
%559 = sext i32 %558 to i64
%560 = getelementptr inbounds double*, double** %557, i64 %559
%561 = load double*, double** %560
%562 = load i32, i32* %24
%563 = sub nsw i32 %562, 1
%564 = sext i32 %563 to i64
%565 = getelementptr inbounds double, double* %561, i64 %564
%566 = load double, double* %565
%567 = fadd double %556, %566
%568 = fmul double %567, 5.000000e-01
%569 = load double**, double*** %17
%570 = load i32, i32* %23
%571 = sext i32 %570 to i64
%572 = getelementptr inbounds double*, double** %569, i64 %571
%573 = load double*, double** %572
%574 = load i32, i32* %24
%575 = sext i32 %574 to i64
%576 = getelementptr inbounds double, double* %573, i64 %575
store double %568, double* %576
br label %608
577: ; preds = %398
%578 = load double**, double*** %17
%579 = load i32, i32* %23
%580 = sub nsw i32 %579, 1
%581 = sext i32 %580 to i64
%582 = getelementptr inbounds double*, double** %578, i64 %581
%583 = load double*, double** %582
%584 = load i32, i32* %24
%585 = sext i32 %584 to i64
%586 = getelementptr inbounds double, double* %583, i64 %585
%587 = load double, double* %586
%588 = load double**, double*** %17
%589 = load i32, i32* %23
%590 = sext i32 %589 to i64
%591 = getelementptr inbounds double*, double** %588, i64 %590
%592 = load double*, double** %591
%593 = load i32, i32* %24
%594 = sub nsw i32 %593, 1
%595 = sext i32 %594 to i64
%596 = getelementptr inbounds double, double* %592, i64 %595
%597 = load double, double* %596
%598 = fadd double %587, %597
%599 = fmul double %598, 5.000000e-01
%600 = load double**, double*** %17
%601 = load i32, i32* %23
%602 = sext i32 %601 to i64
%603 = getelementptr inbounds double*, double** %600, i64 %602
%604 = load double*, double** %603
%605 = load i32, i32* %24
%606 = sext i32 %605 to i64
%607 = getelementptr inbounds double, double* %604, i64 %606
store double %599, double* %607
br label %608
608: ; preds = %398, %577, %546, %515, %484, %465, %446, %427, %408
br label %609
609: ; preds = %608
%610 = load i32, i32* %24
%611 = add nsw i32 %610, 1
store i32 %611, i32* %24
br label %393
612: ; preds = %393
br label %613
613: ; preds = %612
%614 = load i32, i32* %23
%615 = add nsw i32 %614, 1
store i32 %615, i32* %23
br label %356
616: ; preds = %356
store i32 0, i32* %24
br label %617
617: ; preds = %685, %616
%618 = load i32, i32* %24
%619 = load i32, i32* %16
%620 = add nsw i32 %619, 1
%621 = icmp sle i32 %618, %620
br i1 %621, label %622, label %688
622: ; preds = %617
%623 = load i32**, i32*** %20
%624 = getelementptr inbounds i32*, i32** %623, i64 0
%625 = load i32*, i32** %624
%626 = load i32, i32* %24
%627 = sext i32 %626 to i64
%628 = getelementptr inbounds i32, i32* %625, i64 %627
%629 = load i32, i32* %628
%630 = and i32 %629, 32
%631 = icmp ne i32 %630, 0
br i1 %631, label %632, label %649
632: ; preds = %622
%633 = load double, double* %21
%634 = load double**, double*** %17
%635 = getelementptr inbounds double*, double** %634, i64 1
%636 = load double*, double** %635
%637 = load i32, i32* %24
%638 = sext i32 %637 to i64
%639 = getelementptr inbounds double, double* %636, i64 %638
%640 = load double, double* %639
%641 = fneg double %640
%642 = call double @llvm.fmuladd.f64(double %633, double 2.000000e+00, double %641)
%643 = load double**, double*** %17
%644 = getelementptr inbounds double*, double** %643, i64 0
%645 = load double*, double** %644
%646 = load i32, i32* %24
%647 = sext i32 %646 to i64
%648 = getelementptr inbounds double, double* %645, i64 %647
store double %642, double* %648
br label %649
649: ; preds = %632, %622
%650 = load i32**, i32*** %20
%651 = load i32, i32* %15
%652 = add nsw i32 %651, 1
%653 = sext i32 %652 to i64
%654 = getelementptr inbounds i32*, i32** %650, i64 %653
%655 = load i32*, i32** %654
%656 = load i32, i32* %24
%657 = sext i32 %656 to i64
%658 = getelementptr inbounds i32, i32* %655, i64 %657
%659 = load i32, i32* %658
%660 = and i32 %659, 32
%661 = icmp ne i32 %660, 0
br i1 %661, label %662, label %684
662: ; preds = %649
%663 = load double, double* %22
%664 = load double**, double*** %17
%665 = load i32, i32* %15
%666 = sext i32 %665 to i64
%667 = getelementptr inbounds double*, double** %664, i64 %666
%668 = load double*, double** %667
%669 = load i32, i32* %24
%670 = sext i32 %669 to i64
%671 = getelementptr inbounds double, double* %668, i64 %670
%672 = load double, double* %671
%673 = fneg double %672
%674 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %663, double %673)
%675 = load double**, double*** %17
%676 = load i32, i32* %15
%677 = add nsw i32 %676, 1
%678 = sext i32 %677 to i64
%679 = getelementptr inbounds double*, double** %675, i64 %678
%680 = load double*, double** %679
%681 = load i32, i32* %24
%682 = sext i32 %681 to i64
%683 = getelementptr inbounds double, double* %680, i64 %682
store double %674, double* %683
br label %684
684: ; preds = %662, %649
br label %685
685: ; preds = %684
%686 = load i32, i32* %24
%687 = add nsw i32 %686, 1
store i32 %687, i32* %24
br label %617
688: ; preds = %617
ret void
}

LLVM IR (-O2):
define void @sor(double %0, double %1, double %2, i32 %3, i32 %4, double** nocapture %5, double** nocapture %6, double* nocapture writeonly %7, i32** nocapture %8, double %9, double %10) {
%12 = insertelement <2 x double> poison, double %1, i64 0
%13 = insertelement <2 x double> %12, double %2, i64 1
%14 = fmul <2 x double> %13, %13
%15 = extractelement <2 x double> %14, i64 0
%16 = fdiv double 1.000000e+00, %15
%17 = extractelement <2 x double> %14, i64 1
%18 = fdiv double 1.000000e+00, %17
%19 = fadd double %16, %18
%20 = fmul double %19, 2.000000e+00
%21 = fdiv double %0, %20
%22 = icmp slt i32 %3, 1
br i1 %22, label %46, label %23
23: ; preds = %11
%24 = icmp slt i32 %4, 1
%25 = fsub double 1.000000e+00, %0
%26 = add i32 %4, 1
%27 = add nuw i32 %3, 1
%28 = zext i32 %27 to i64
%29 = zext i32 %26 to i64
br label %30
30: ; preds = %23, %96
%31 = phi i64 [ 1, %23 ], [ %97, %96 ]
%32 = phi double [ 0.000000e+00, %23 ], [ %98, %96 ]
br i1 %24, label %33, label %35
33: ; preds = %30
%34 = add nuw nsw i64 %31, 1
br label %96
35: ; preds = %30
%36 = getelementptr inbounds i32*, i32** %8, i64 %31
%37 = load i32*, i32** %36
%38 = getelementptr inbounds double*, double** %5, i64 %31
%39 = add nuw nsw i64 %31, 1
%40 = and i64 %39, 4294967295
%41 = getelementptr inbounds double*, double** %5, i64 %40
%42 = add nsw i64 %31, -1
%43 = getelementptr inbounds double*, double** %5, i64 %42
%44 = getelementptr inbounds double*, double** %6, i64 %31
br label %55
45: ; preds = %96
br i1 %22, label %46, label %49
46: ; preds = %11, %45
%47 = phi double [ %98, %45 ], [ 0.000000e+00, %11 ]
%48 = add nsw i32 %3, 1
br label %165
49: ; preds = %45
%50 = icmp slt i32 %4, 1
%51 = add i32 %4, 1
%52 = add nuw i32 %3, 1
%53 = zext i32 %52 to i64
%54 = zext i32 %51 to i64
br label %100
55: ; preds = %35, %92
%56 = phi i64 [ 1, %35 ], [ %93, %92 ]
%57 = phi double [ %32, %35 ], [ %94, %92 ]
%58 = getelementptr inbounds i32, i32* %37, i64 %56
%59 = load i32, i32* %58
%60 = icmp eq i32 %59, 16
br i1 %60, label %63, label %61
61: ; preds = %55
%62 = add nuw nsw i64 %56, 1
br label %92
63: ; preds = %55
%64 = load double*, double** %38
%65 = getelementptr inbounds double, double* %64, i64 %56
%66 = load double, double* %65
%67 = load double*, double** %41
%68 = getelementptr inbounds double, double* %67, i64 %56
%69 = load double, double* %68
%70 = load double*, double** %43
%71 = getelementptr inbounds double, double* %70, i64 %56
%72 = load double, double* %71
%73 = fadd double %69, %72
%74 = fdiv double %73, %15
%75 = add nuw nsw i64 %56, 1
%76 = and i64 %75, 4294967295
%77 = getelementptr inbounds double, double* %64, i64 %76
%78 = load double, double* %77
%79 = add nsw i64 %56, -1
%80 = getelementptr inbounds double, double* %64, i64 %79
%81 = load double, double* %80
%82 = fadd double %78, %81
%83 = fdiv double %82, %17
%84 = fadd double %74, %83
%85 = load double*, double** %44
%86 = getelementptr inbounds double, double* %85, i64 %56
%87 = load double, double* %86
%88 = fsub double %84, %87
%89 = fmul double %21, %88
%90 = tail call double @llvm.fmuladd.f64(double %25, double %66, double %89)
store double %90, double* %65
%91 = fadd double %57, 1.000000e+00
br label %92
92: ; preds = %61, %63
%93 = phi i64 [ %62, %61 ], [ %75, %63 ]
%94 = phi double [ %57, %61 ], [ %91, %63 ]
%95 = icmp eq i64 %93, %29
br i1 %95, label %96, label %55
96: ; preds = %92, %33
%97 = phi i64 [ %34, %33 ], [ %39, %92 ]
%98 = phi double [ %32, %33 ], [ %94, %92 ]
%99 = icmp eq i64 %97, %28
br i1 %99, label %45, label %30
100: ; preds = %49, %161
%101 = phi i64 [ 1, %49 ], [ %162, %161 ]
%102 = phi double [ 0.000000e+00, %49 ], [ %163, %161 ]
br i1 %50, label %103, label %105
103: ; preds = %100
%104 = add nuw nsw i64 %101, 1
br label %161
105: ; preds = %100
%106 = getelementptr inbounds i32*, i32** %8, i64 %101
%107 = load i32*, i32** %106
%108 = add nuw nsw i64 %101, 1
%109 = and i64 %108, 4294967295
%110 = getelementptr inbounds double*, double** %5, i64 %109
%111 = getelementptr inbounds double*, double** %5, i64 %101
%112 = add nsw i64 %101, -1
%113 = getelementptr inbounds double*, double** %5, i64 %112
%114 = getelementptr inbounds double*, double** %6, i64 %101
br label %115
115: ; preds = %105, %157
%116 = phi i64 [ 1, %105 ], [ %158, %157 ]
%117 = phi double [ %102, %105 ], [ %159, %157 ]
%118 = getelementptr inbounds i32, i32* %107, i64 %116
%119 = load i32, i32* %118
%120 = icmp eq i32 %119, 16
br i1 %120, label %123, label %121
121: ; preds = %115
%122 = add nuw nsw i64 %116, 1
br label %157
123: ; preds = %115
%124 = load double*, double** %110
%125 = getelementptr inbounds double, double* %124, i64 %116
%126 = load double, double* %125
%127 = load double*, double** %111
%128 = getelementptr inbounds double, double* %127, i64 %116
%129 = load double, double* %128
%130 = load double*, double** %113
%131 = getelementptr inbounds double, double* %130, i64 %116
%132 = load double, double* %131
%133 = add nuw nsw i64 %116, 1
%134 = and i64 %133, 4294967295
%135 = getelementptr inbounds double, double* %127, i64 %134
%136 = load double, double* %135
%137 = insertelement <2 x double> poison, double %129, i64 0
%138 = shufflevector <2 x double> %137, <2 x double> poison, <2 x i32> zeroinitializer
%139 = insertelement <2 x double> poison, double %126, i64 0
%140 = insertelement <2 x double> %139, double %136, i64 1
%141 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %138, <2 x double> <double -2.000000e+00, double -2.000000e+00>, <2 x double> %140)
%142 = add nsw i64 %116, -1
%143 = getelementptr inbounds double, double* %127, i64 %142
%144 = load double, double* %143
%145 = insertelement <2 x double> poison, double %132, i64 0
%146 = insertelement <2 x double> %145, double %144, i64 1
%147 = fadd <2 x double> %141, %146
%148 = fdiv <2 x double> %147, %14
%149 = shufflevector <2 x double> %148, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%150 = fadd <2 x double> %148, %149
%151 = extractelement <2 x double> %150, i64 0
%152 = load double*, double** %114
%153 = getelementptr inbounds double, double* %152, i64 %116
%154 = load double, double* %153
%155 = fsub double %151, %154
%156 = tail call double @llvm.fmuladd.f64(double %155, double %155, double %117)
br label %157
157: ; preds = %121, %123
%158 = phi i64 [ %122, %121 ], [ %133, %123 ]
%159 = phi double [ %117, %121 ], [ %156, %123 ]
%160 = icmp eq i64 %158, %54
br i1 %160, label %161, label %115
161: ; preds = %157, %103
%162 = phi i64 [ %104, %103 ], [ %108, %157 ]
%163 = phi double [ %102, %103 ], [ %159, %157 ]
%164 = icmp eq i64 %162, %53
br i1 %164, label %165, label %100
165: ; preds = %161, %46
%166 = phi double [ %47, %46 ], [ %98, %161 ]
%167 = phi i32 [ %48, %46 ], [ %52, %161 ]
%168 = phi double [ 0.000000e+00, %46 ], [ %163, %161 ]
%169 = fdiv double %168, %166
%170 = tail call double @sqrt(double %169)
store double %170, double* %7
%171 = icmp slt i32 %3, -1
br i1 %171, label %183, label %172
172: ; preds = %165
%173 = sext i32 %4 to i64
%174 = add nsw i32 %4, 1
%175 = sext i32 %174 to i64
%176 = icmp slt i32 %4, -1
%177 = call i32 @llvm.smax.i32(i32 %174, i32 0)
%178 = add nuw i32 %177, 1
%179 = call i32 @llvm.smax.i32(i32 %167, i32 0)
%180 = add nuw i32 %179, 1
%181 = zext i32 %180 to i64
%182 = zext i32 %178 to i64
br label %196
183: ; preds = %280, %165
%184 = icmp slt i32 %4, -1
br i1 %184, label %313, label %185
185: ; preds = %183
%186 = load i32*, i32** %8
%187 = getelementptr inbounds double*, double** %5, i64 1
%188 = sext i32 %167 to i64
%189 = getelementptr inbounds i32*, i32** %8, i64 %188
%190 = load i32*, i32** %189
%191 = sext i32 %3 to i64
%192 = getelementptr inbounds double*, double** %5, i64 %191
%193 = getelementptr inbounds double*, double** %5, i64 %188
%194 = add i32 %4, 2
%195 = zext i32 %194 to i64
br label %283
196: ; preds = %172, %280
%197 = phi i64 [ 0, %172 ], [ %281, %280 ]
%198 = getelementptr inbounds double*, double** %5, i64 %197
%199 = load double*, double** %198
%200 = getelementptr inbounds double, double* %199, i64 1
%201 = load double, double* %200
store double %201, double* %199
%202 = getelementptr inbounds double, double* %199, i64 %173
%203 = load double, double* %202
%204 = getelementptr inbounds double, double* %199, i64 %175
store double %203, double* %204
br i1 %176, label %205, label %207
205: ; preds = %196
%206 = add nuw nsw i64 %197, 1
br label %280
207: ; preds = %196
%208 = getelementptr inbounds i32*, i32** %8, i64 %197
%209 = load i32*, i32** %208
%210 = add nsw i64 %197, -1
%211 = getelementptr inbounds double*, double** %5, i64 %210
%212 = add nuw nsw i64 %197, 1
%213 = and i64 %212, 4294967295
%214 = getelementptr inbounds double*, double** %5, i64 %213
br label %215
215: ; preds = %207, %277
%216 = phi i64 [ 0, %207 ], [ %278, %277 ]
%217 = getelementptr inbounds i32, i32* %209, i64 %216
%218 = load i32, i32* %217
switch i32 %218, label %277 [
i32 1, label %219
i32 8, label %224
i32 2, label %228
i32 4, label %232
i32 9, label %236
i32 5, label %246
i32 12, label %256
i32 6, label %265
]
219: ; preds = %215
%220 = add nuw i64 %216, 1
%221 = and i64 %220, 4294967295
%222 = getelementptr inbounds double, double* %199, i64 %221
%223 = load double, double* %222
br label %274
224: ; preds = %215
%225 = load double*, double** %214
%226 = getelementptr inbounds double, double* %225, i64 %216
%227 = load double, double* %226
br label %274
228: ; preds = %215
%229 = add nsw i64 %216, -1
%230 = getelementptr inbounds double, double* %199, i64 %229
%231 = load double, double* %230
br label %274
232: ; preds = %215
%233 = load double*, double** %211
%234 = getelementptr inbounds double, double* %233, i64 %216
%235 = load double, double* %234
br label %274
236: ; preds = %215
%237 = load double*, double** %214
%238 = getelementptr inbounds double, double* %237, i64 %216
%239 = load double, double* %238
%240 = add nuw i64 %216, 1
%241 = and i64 %240, 4294967295
%242 = getelementptr inbounds double, double* %199, i64 %241
%243 = load double, double* %242
%244 = fadd double %239, %243
%245 = fmul double %244, 5.000000e-01
br label %274
246: ; preds = %215
%247 = load double*, double** %211
%248 = getelementptr inbounds double, double* %247, i64 %216
%249 = load double, double* %248
%250 = add nuw i64 %216, 1
%251 = and i64 %250, 4294967295
%252 = getelementptr inbounds double, double* %199, i64 %251
%253 = load double, double* %252
%254 = fadd double %249, %253
%255 = fmul double %254, 5.000000e-01
br label %274
256: ; preds = %215
%257 = load double*, double** %214
%258 = getelementptr inbounds double, double* %257, i64 %216
%259 = load double, double* %258
%260 = add nsw i64 %216, -1
%261 = getelementptr inbounds double, double* %199, i64 %260
%262 = load double, double* %261
%263 = fadd double %259, %262
%264 = fmul double %263, 5.000000e-01
br label %274
265: ; preds = %215
%266 = load double*, double** %211
%267 = getelementptr inbounds double, double* %266, i64 %216
%268 = load double, double* %267
%269 = add nsw i64 %216, -1
%270 = getelementptr inbounds double, double* %199, i64 %269
%271 = load double, double* %270
%272 = fadd double %268, %271
%273 = fmul double %272, 5.000000e-01
br label %274
274: ; preds = %265, %256, %246, %236, %232, %228, %224, %219
%275 = phi double [ %223, %219 ], [ %227, %224 ], [ %231, %228 ], [ %235, %232 ], [ %245, %236 ], [ %255, %246 ], [ %264, %256 ], [ %273, %265 ]
%276 = getelementptr inbounds double, double* %199, i64 %216
store double %275, double* %276
br label %277
277: ; preds = %274, %215
%278 = add nuw nsw i64 %216, 1
%279 = icmp eq i64 %278, %182
br i1 %279, label %280, label %215
280: ; preds = %277, %205
%281 = phi i64 [ %206, %205 ], [ %212, %277 ]
%282 = icmp eq i64 %281, %181
br i1 %282, label %183, label %196
283: ; preds = %185, %310
%284 = phi i64 [ 0, %185 ], [ %311, %310 ]
%285 = getelementptr inbounds i32, i32* %186, i64 %284
%286 = load i32, i32* %285
%287 = and i32 %286, 32
%288 = icmp eq i32 %287, 0
br i1 %288, label %297, label %289
289: ; preds = %283
%290 = load double*, double** %187
%291 = getelementptr inbounds double, double* %290, i64 %284
%292 = load double, double* %291
%293 = fneg double %292
%294 = tail call double @llvm.fmuladd.f64(double %9, double 2.000000e+00, double %293)
%295 = load double*, double** %5
%296 = getelementptr inbounds double, double* %295, i64 %284
store double %294, double* %296
br label %297
297: ; preds = %289, %283
%298 = getelementptr inbounds i32, i32* %190, i64 %284
%299 = load i32, i32* %298
%300 = and i32 %299, 32
%301 = icmp eq i32 %300, 0
br i1 %301, label %310, label %302
302: ; preds = %297
%303 = load double*, double** %192
%304 = getelementptr inbounds double, double* %303, i64 %284
%305 = load double, double* %304
%306 = fneg double %305
%307 = tail call double @llvm.fmuladd.f64(double %10, double 2.000000e+00, double %306)
%308 = load double*, double** %193
%309 = getelementptr inbounds double, double* %308, i64 %284
store double %307, double* %309
br label %310
310: ; preds = %297, %302
%311 = add nuw nsw i64 %284, 1
%312 = icmp eq i64 %311, %195
br i1 %312, label %313, label %283
313: ; preds = %310, %183
ret void
}