void sor(double omg, double dx, double dy, int imax, int jmax, double **P,
         double **RS, double *res, int **Flag, double Pw, double delta_p) {
  int i, j;
  double rloc;
  double coeff = omg / (2.0 * (1.0 / (dx * dx) + 1.0 / (dy * dy)));
  int fluid_cells_count = 0;
  for (i = 1; i < imax + 1; i++) {
    for (j = 1; j < jmax + 1; j++) {
      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]);
    }
  }
  rloc = 0;
  for (i = 0; i <= imax; i++) {
    for (j = 0; j <= jmax; j++) {
      if (Flag[i][j] & 0x10) {
        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]);
        fluid_cells_count++;
      }
    }
  }
  rloc = rloc / (fluid_cells_count);
  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++) {
    if (Flag[0][j] & 0x20) {
      P[0][j] = (2 * Pw) - P[1][j];
      P[imax + 1][j] = (2 * (Pw - delta_p)) - P[imax][j];
    } else {
      P[0][j] = P[1][j];
      P[imax + 1][j] = P[imax][j];
    }
  }
  for (i = 1; i < imax + 1; i++) {
    for (j = 1; j < jmax + 1; j++) {
      if (Flag[i][j] == 0x08) {
        P[i][j] = P[i + 1][j];
      } else if (Flag[i][j] == 0x01) {
        P[i][j] = P[i][j + 1];
      } else if (Flag[i][j] == 0x04) {
        P[i][j] = P[i - 1][j];
      } else if (Flag[i][j] == 0x02) {
        P[i][j] = P[i][j - 1];
      } else if (Flag[i][j] == 0x09) {
        P[i][j] = (P[i][j + 1] + P[i + 1][j]) / 2;
      } else if (Flag[i][j] == 0x05) {
        P[i][j] = (P[i][j + 1] + P[i - 1][j]) / 2;
      } else if (Flag[i][j] == 0x0A) {
        P[i][j] = (P[i][j - 1] + P[i + 1][j]) / 2;
      } else if (Flag[i][j] == 0x06) {
        P[i][j] = (P[i][j - 1] + P[i - 1][j]) / 2;
      }
    }
  }
}


x86 assembly (clang, -O0):
<sor>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%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  0xeaa(%rip),%xmm2
divsd  %xmm1,%xmm2
movsd  -0x18(%rbp),%xmm3
mulsd  -0x18(%rbp),%xmm3
movsd  0xe94(%rip),%xmm1
divsd  %xmm3,%xmm1
addsd  %xmm1,%xmm2
movsd  0xe7c(%rip),%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x6c(%rbp)
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    12ce <sor+0x1be>
movl   $0x1,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    12bb <sor+0x1ab>
movsd  0xe38(%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)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    11b7 <sor+0xa7>
jmp    12c0 <sor+0x1b0>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    119f <sor+0x8f>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     150a <sor+0x3fa>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x20(%rbp),%eax
jg     14f7 <sor+0x3e7>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     14e4 <sor+0x3d4>
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)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    14e9 <sor+0x3d9>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    12f0 <sor+0x1e0>
jmp    14fc <sor+0x3ec>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    12dd <sor+0x1cd>
movsd  -0x60(%rbp),%xmm0
cvtsi2sdl -0x6c(%rbp),%xmm1
divsd  %xmm1,%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     15af <sor+0x49f>
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)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1540 <sor+0x430>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     16e6 <sor+0x5d6>
mov    -0x40(%rbp),%rax
mov    (%rax),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     1683 <sor+0x573>
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)
movsd  -0x48(%rbp),%xmm0
subsd  -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    16d3 <sor+0x5c3>
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
mov    (%rax),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%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    16d8 <sor+0x5c8>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    15b6 <sor+0x4a6>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1a62 <sor+0x952>
movl   $0x1,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1a4f <sor+0x93f>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x8,(%rax,%rcx,4)
jne    1764 <sor+0x654>
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    1a3c <sor+0x92c>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    17b2 <sor+0x6a2>
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    1a37 <sor+0x927>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x4,(%rax,%rcx,4)
jne    1800 <sor+0x6f0>
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    1a32 <sor+0x922>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x2,(%rax,%rcx,4)
jne    184e <sor+0x73e>
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    1a2d <sor+0x91d>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x9,(%rax,%rcx,4)
jne    18c2 <sor+0x7b2>
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
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0x75c(%rip),%xmm1
divsd  %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    1a28 <sor+0x918>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x5,(%rax,%rcx,4)
jne    1936 <sor+0x826>
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
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  0x6e8(%rip),%xmm1
divsd  %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    1a23 <sor+0x913>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0xa,(%rax,%rcx,4)
jne    19aa <sor+0x89a>
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
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0x674(%rip),%xmm1
divsd  %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    1a1e <sor+0x90e>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
cmpl   $0x6,(%rax,%rcx,4)
jne    1a19 <sor+0x909>
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
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  0x600(%rip),%xmm1
divsd  %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    1a1e <sor+0x90e>
jmp    1a23 <sor+0x913>
jmp    1a28 <sor+0x918>
jmp    1a2d <sor+0x91d>
jmp    1a32 <sor+0x922>
jmp    1a37 <sor+0x927>
jmp    1a3c <sor+0x92c>
jmp    1a41 <sor+0x931>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1705 <sor+0x5f5>
jmp    1a54 <sor+0x944>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    16ed <sor+0x5dd>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sor>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r9,(%rsp)
mov    %rdx,%r14
mov    %esi,%r15d
unpcklpd %xmm2,%xmm1
mulpd  %xmm1,%xmm1
test   %edi,%edi
mov    %r8,0x8(%rsp)
jle    1220 <sor+0x110>
movsd  0xeba(%rip),%xmm8
movapd %xmm8,%xmm6
divsd  %xmm1,%xmm6
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
movapd %xmm8,%xmm5
divsd  %xmm2,%xmm5
addsd  %xmm6,%xmm5
addsd  %xmm5,%xmm5
subsd  %xmm0,%xmm8
divsd  %xmm5,%xmm0
lea    0x1(%r15),%r9d
lea    0x1(%rdi),%r11d
mov    $0x1,%edx
jmp    1190 <sor+0x80>
add    $0x1,%rdx
mov    %rdx,%r8
cmp    %r11,%r8
je     1224 <sor+0x114>
test   %r15d,%r15d
jle    1180 <sor+0x70>
mov    -0x8(%r14,%rdx,8),%r10
mov    (%r14,%rdx,8),%rsi
lea    0x1(%rdx),%r8
mov    %r8d,%ebp
mov    (%r14,%rbp,8),%rbp
mov    (%rcx,%rdx,8),%rdx
movsd  (%rsi),%xmm7
movsd  0x8(%rsi),%xmm5
mov    $0x1,%ebx
nopl   0x0(%rax,%rax,1)
mulsd  %xmm8,%xmm5
movsd  0x8(%rsi,%rbx,8),%xmm9
movsd  0x0(%rbp,%rbx,8),%xmm6
unpcklpd %xmm9,%xmm6
movsd  (%r10,%rbx,8),%xmm2
unpcklpd %xmm7,%xmm2
addpd  %xmm6,%xmm2
divpd  %xmm1,%xmm2
movapd %xmm2,%xmm7
unpckhpd %xmm2,%xmm7
addsd  %xmm2,%xmm7
subsd  (%rdx,%rbx,8),%xmm7
mulsd  %xmm0,%xmm7
addsd  %xmm5,%xmm7
movsd  %xmm7,(%rsi,%rbx,8)
lea    0x1(%rbx),%rax
movapd %xmm9,%xmm5
mov    %rax,%rbx
cmp    %rax,%r9
jne    11c0 <sor+0xb0>
mov    %r8,%rdx
jmp    1187 <sor+0x77>
lea    0x1(%rdi),%r11d
xorpd  %xmm2,%xmm2
mov    %r11d,%eax
mov    %rax,0x20(%rsp)
test   %edi,%edi
mov    %rdi,0x18(%rsp)
mov    %r11,0x10(%rsp)
js     1320 <sor+0x210>
lea    0x1(%r15),%r10d
xorpd  %xmm0,%xmm0
xor    %esi,%esi
xor    %r11d,%r11d
jmp    1272 <sor+0x162>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rsi
mov    %rsi,%r8
cmp    0x20(%rsp),%r8
je     1327 <sor+0x217>
test   %r15d,%r15d
js     1260 <sor+0x150>
mov    (%rsp),%rax
mov    (%rax,%rsi,8),%rbp
lea    0x1(%rsi),%r8
mov    %r8d,%r9d
xor    %edi,%edi
jmp    1300 <sor+0x1f0>
nopw   0x0(%rax,%rax,1)
mov    (%r14,%r9,8),%rax
mov    -0x8(%r14,%rsi,8),%rdx
mov    (%r14,%rsi,8),%r13
movsd  0x0(%r13,%rdi,8),%xmm6
lea    0x1(%rdi),%rbx
mov    %ebx,%r12d
movsd  (%rax,%rdi,8),%xmm7
movhpd 0x0(%r13,%r12,8),%xmm7
addsd  %xmm6,%xmm6
unpcklpd %xmm6,%xmm6
movsd  (%rdx,%rdi,8),%xmm5
movhpd -0x8(%r13,%rdi,8),%xmm5
subpd  %xmm6,%xmm7
addpd  %xmm7,%xmm5
divpd  %xmm1,%xmm5
movapd %xmm5,%xmm6
unpckhpd %xmm5,%xmm6
addsd  %xmm5,%xmm6
mov    (%rcx,%rsi,8),%rax
subsd  (%rax,%rdi,8),%xmm6
mulsd  %xmm6,%xmm6
addsd  %xmm6,%xmm0
add    $0x1,%r11d
mov    %rbx,%rdi
cmp    %r10,%rdi
je     1310 <sor+0x200>
testb  $0x10,0x0(%rbp,%rdi,4)
jne    1290 <sor+0x180>
add    $0x1,%rdi
cmp    %r10,%rdi
jne    1300 <sor+0x1f0>
mov    %r8,%rsi
cmp    0x20(%rsp),%r8
jne    1272 <sor+0x162>
jmp    1327 <sor+0x217>
xor    %r11d,%r11d
xorpd  %xmm0,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r11d,%xmm1
divsd  %xmm1,%xmm0
ucomisd %xmm2,%xmm0
jb     133f <sor+0x22f>
sqrtsd %xmm0,%xmm0
jmp    135c <sor+0x24c>
movsd  %xmm3,0x30(%rsp)
movsd  %xmm4,0x28(%rsp)
call   1030 <sqrt@plt>
movsd  0x28(%rsp),%xmm4
movsd  0x30(%rsp),%xmm3
mov    0x18(%rsp),%r8
mov    0x10(%rsp),%rbx
mov    0x8(%rsp),%rax
movsd  %xmm0,(%rax)
cmp    $0xffffffff,%r8d
jl     13fb <sor+0x2eb>
lea    0x1(%r15),%ecx
xor    %edx,%edx
test   %ebx,%ebx
mov    $0x0,%esi
cmovg  %ebx,%esi
add    $0x1,%esi
movslq %r15d,%rax
movslq %ecx,%rcx
test   %ebx,%ebx
jle    13de <sor+0x2ce>
mov    %esi,%edi
and    $0xfffffffe,%edi
xor    %edx,%edx
nopl   (%rax)
mov    (%r14,%rdx,8),%rbp
movsd  0x8(%rbp),%xmm0
movsd  %xmm0,0x0(%rbp)
movsd  0x0(%rbp,%rax,8),%xmm0
movsd  %xmm0,0x0(%rbp,%rcx,8)
mov    0x8(%r14,%rdx,8),%rbp
movsd  0x8(%rbp),%xmm0
movsd  %xmm0,0x0(%rbp)
movsd  0x0(%rbp,%rax,8),%xmm0
movsd  %xmm0,0x0(%rbp,%rcx,8)
add    $0x2,%rdx
cmp    %rdx,%rdi
jne    13a0 <sor+0x290>
test   $0x1,%sil
je     13fb <sor+0x2eb>
mov    (%r14,%rdx,8),%rdx
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,(%rdx)
movsd  (%rdx,%rax,8),%xmm0
movsd  %xmm0,(%rdx,%rcx,8)
cmp    $0xffffffff,%r15d
jge    1531 <sor+0x421>
test   %r8d,%r8d
jle    1522 <sor+0x412>
lea    0x1(%r15),%eax
lea    -0x4(,%rax,4),%rax
ff
mov    $0x1,%ecx
lea    0xbea(%rip),%rdx
movsd  0xbda(%rip),%xmm0
jmp    143e <sor+0x32e>
mov    %r8,%rcx
cmp    0x20(%rsp),%r8
je     1522 <sor+0x412>
test   %r15d,%r15d
jle    1510 <sor+0x400>
mov    (%rsp),%rsi
mov    (%rsi,%rcx,8),%rdi
lea    0x1(%rcx),%r8
mov    %r8d,%r9d
xor    %esi,%esi
jmp    1482 <sor+0x372>
mov    -0x8(%r14,%rcx,8),%rbx
mov    (%r14,%rcx,8),%rbp
movsd  0x0(%rbp,%rsi,2),%xmm1
addsd  0x8(%rbx,%rsi,2),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rbp,%rsi,2)
add    $0x4,%rsi
cmp    %rsi,%rax
je     1430 <sor+0x320>
mov    0x4(%rdi,%rsi,1),%ebp
add    $0xffffffff,%ebp
cmp    $0x9,%ebp
ja     1479 <sor+0x369>
movslq (%rdx,%rbp,4),%rbp
add    %rdx,%rbp
jmp    *%rbp
mov    (%r14,%rcx,8),%rbp
movsd  0x10(%rbp,%rsi,2),%xmm1
jmp    1473 <sor+0x363>
mov    (%r14,%rcx,8),%rbp
movsd  0x0(%rbp,%rsi,2),%xmm1
jmp    1473 <sor+0x363>
mov    -0x8(%r14,%rcx,8),%rbx
mov    (%r14,%rcx,8),%rbp
movsd  0x8(%rbx,%rsi,2),%xmm1
jmp    1473 <sor+0x363>
mov    -0x8(%r14,%rcx,8),%rbx
mov    (%r14,%rcx,8),%rbp
movsd  0x10(%rbp,%rsi,2),%xmm1
jmp    1469 <sor+0x359>
mov    (%r14,%r9,8),%rbp
movsd  0x8(%rbp,%rsi,2),%xmm1
mov    (%r14,%rcx,8),%rbp
jmp    1473 <sor+0x363>
mov    (%r14,%rcx,8),%rbp
movsd  0x10(%rbp,%rsi,2),%xmm1
mov    (%r14,%r9,8),%rbx
jmp    1469 <sor+0x359>
mov    (%r14,%rcx,8),%rbp
movsd  0x0(%rbp,%rsi,2),%xmm1
mov    (%r14,%r9,8),%rbx
jmp    1469 <sor+0x359>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rcx
mov    %rcx,%r8
cmp    0x20(%rsp),%r8
jne    143e <sor+0x32e>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    (%rsp),%rax
mov    (%rax),%rax
movapd %xmm3,%xmm0
subsd  %xmm4,%xmm0
movslq %r8d,%rcx
movslq %ebx,%rdi
lea    0x2(%r15),%edx
mov    0x8(%r14),%rsi
mov    (%r14,%rdi,8),%rdi
shl    $0x2,%rdx
xor    %ebp,%ebp
addsd  %xmm3,%xmm3
addsd  %xmm0,%xmm0
jmp    1593 <sor+0x483>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%r14),%rbx
movsd  %xmm1,(%rbx,%rbp,2)
mov    (%r14,%rcx,8),%rbx
movsd  (%rbx,%rbp,2),%xmm1
movsd  %xmm1,(%rdi,%rbp,2)
add    $0x4,%rbp
cmp    %rbp,%rdx
je     1405 <sor+0x2f5>
testb  $0x20,(%rax,%rbp,1)
movsd  (%rsi,%rbp,2),%xmm1
je     1570 <sor+0x460>
movapd %xmm3,%xmm2
subsd  %xmm1,%xmm2
mov    (%r14),%rbx
movsd  %xmm2,(%rbx,%rbp,2)
mov    (%r14,%rcx,8),%rbx
movapd %xmm0,%xmm1
subsd  (%rbx,%rbp,2),%xmm1
jmp    1581 <sor+0x471>

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

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