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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int sqrt(double);
double RB_GS_OmpLoopV4err(double **black, double **red, int m, int n,
                          double eps, int maxit, int iterations_print,
                          int *iterations) {
  int i, j;
  double v;
  double error = 10.0 * eps;
  while (error >= eps && *iterations < maxit) {
#pragma omp parallel private(j, v)
    {
#pragma omp for schedule(OMP_SCHED) reduction(+ : error)
      for (i = 1; i < m - 1; i++)
        for (j = i % 2; j < n / 2 - (i + 1) % 2; j++) {
          v = 0.25 * (red[i - 1][j] + red[i + 1][j] + red[i][j - i % 2] +
                      red[i][j + (i + 1) % 2]);
          black[i][j] = v;
        }
#pragma omp for schedule(OMP_SCHED) reduction(+ : error)
      for (i = 1; i < m - 1; i++)
        for (j = (i + 1) % 2; j < n / 2 - i % 2; j++) {
          v = 0.25 * (black[i - 1][j] + black[i + 1][j] +
                      black[i][j - (i + 1) % 2] + black[i][j + i % 2]);
          red[i][j] = v;
        }
#pragma omp for schedule(OMP_SCHED) reduction(+ : error)
      for (i = 1; i < m - 1; i++)
        for (j = i % 2; j < n / 2 - (i + 1) % 2; j++) {
          v = 0.25 * (red[i - 1][j] + red[i + 1][j] + red[i][j - i % 2] +
                      red[i][j + (i + 1) % 2]);
          error += (v - black[i][j]) * (v - black[i][j]);
          black[i][j] = v;
        }
#pragma omp for schedule(OMP_SCHED) reduction(+ : error) nowait
      for (i = 1; i < m - 1; i++)
        for (j = (i + 1) % 2; j < n / 2 - i % 2; j++) {
          v = 0.25 * (black[i - 1][j] + black[i + 1][j] +
                      black[i][j - (i + 1) % 2] + black[i][j + i % 2]);
          error += (v - red[i][j]) * (v - red[i][j]);
          red[i][j] = v;
        }
    }
    error = sqrt(error) / (m * n);
    *iterations += 2;
  }
  return error;
}


x86 assembly (clang, -O0):
<RB_GS_OmpLoopV4err>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    %r9d,-0x28(%rbp)
movsd  0xebe(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x20(%rbp),%xmm0
mov    %al,-0x41(%rbp)
jb     1170 <RB_GS_OmpLoopV4err+0x60>
mov    0x10(%rbp),%rax
mov    (%rax),%eax
cmp    -0x24(%rbp),%eax
setl   %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    1180 <RB_GS_OmpLoopV4err+0x70>
jmp    170d <RB_GS_OmpLoopV4err+0x5fd>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12af <RB_GS_OmpLoopV4err+0x19f>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x48(%rbp),%eax
sub    %edx,%ecx
cmp    %ecx,%eax
jge    129c <RB_GS_OmpLoopV4err+0x18c>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x58(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x58(%rbp),%rax
sub    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x50(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x50(%rbp),%rax
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xd9d(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11a6 <RB_GS_OmpLoopV4err+0x96>
jmp    12a1 <RB_GS_OmpLoopV4err+0x191>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1187 <RB_GS_OmpLoopV4err+0x77>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13de <RB_GS_OmpLoopV4err+0x2ce>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x5c(%rbp),%eax
sub    %edx,%ecx
cmp    %ecx,%eax
jge    13cb <RB_GS_OmpLoopV4err+0x2bb>
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x70(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x70(%rbp),%rax
sub    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x68(%rbp),%rax
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xc6e(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    12d8 <RB_GS_OmpLoopV4err+0x1c8>
jmp    13d0 <RB_GS_OmpLoopV4err+0x2c0>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12b6 <RB_GS_OmpLoopV4err+0x1a6>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1559 <RB_GS_OmpLoopV4err+0x449>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x74(%rbp),%eax
sub    %edx,%ecx
cmp    %ecx,%eax
jge    1546 <RB_GS_OmpLoopV4err+0x436>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x88(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x88(%rbp),%rax
sub    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x80(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x80(%rbp),%rax
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xb39(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1404 <RB_GS_OmpLoopV4err+0x2f4>
jmp    154b <RB_GS_OmpLoopV4err+0x43b>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    13e5 <RB_GS_OmpLoopV4err+0x2d5>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    16e0 <RB_GS_OmpLoopV4err+0x5d0>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x8c(%rbp),%eax
sub    %edx,%ecx
cmp    %ecx,%eax
jge    16cd <RB_GS_OmpLoopV4err+0x5bd>
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0xa0(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0xa0(%rbp),%rax
sub    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x98(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x98(%rbp),%rax
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0x9b2(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1582 <RB_GS_OmpLoopV4err+0x472>
jmp    16d2 <RB_GS_OmpLoopV4err+0x5c2>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1560 <RB_GS_OmpLoopV4err+0x450>
movsd  -0x40(%rbp),%xmm0
call   1030 <sqrt@plt>
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x2,%ecx
mov    %ecx,(%rax)
jmp    114c <RB_GS_OmpLoopV4err+0x3c>
movsd  -0x40(%rbp),%xmm0
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<RB_GS_OmpLoopV4err>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xa8,%rsp
movapd %xmm0,%xmm1
movsd  0xed3(%rip),%xmm0
mulsd  %xmm1,%xmm0
ucomisd %xmm1,%xmm0
jae    1149 <RB_GS_OmpLoopV4err+0x39>
add    $0xa8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r8d,%r14d
mov    %ecx,%r15d
mov    %rsi,%r13
mov    %rdi,%r12
mov    0xe0(%rsp),%rax
lea    -0x1(%rdx),%ecx
mov    %rcx,0x70(%rsp)
mov    %r15d,%ecx
shr    $0x1f,%ecx
add    %r15d,%ecx
sar    %ecx
imul   %edx,%r15d
mov    (%rax),%eax
movslq %ecx,%rcx
mov    %rcx,0x60(%rsp)
movsd  0xe82(%rip),%xmm4
movapd 0xe82(%rip),%xmm5
movsd  %xmm1,0x90(%rsp)
mov    %r8d,0x6c(%rsp)
mov    %r15d,0x44(%rsp)
mov    %rdx,0x78(%rsp)
mov    %rsi,0x58(%rsp)
mov    %rdi,0x88(%rsp)
jmp    120d <RB_GS_OmpLoopV4err+0xfd>
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x6c(%rsp),%r14d
mov    0x44(%rsp),%r15d
call   1030 <sqrt@plt>
movsd  0xe31(%rip),%xmm4
cltd
idiv   %r15d
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    0xe0(%rsp),%rcx
mov    (%rcx),%eax
add    $0x2,%eax
mov    %eax,(%rcx)
ucomisd 0x90(%rsp),%xmm0
mov    0x78(%rsp),%rdx
movapd 0xe09(%rip),%xmm5
jb     1137 <RB_GS_OmpLoopV4err+0x27>
cmp    %r14d,%eax
jge    1137 <RB_GS_OmpLoopV4err+0x27>
cmp    $0x3,%edx
jl     11ca <RB_GS_OmpLoopV4err+0xba>
mov    $0x1,%r8d
mov    $0x1,%r10d
xor    %ecx,%ecx
jmp    1246 <RB_GS_OmpLoopV4err+0x136>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r8d
add    $0x1,%r14b
mov    %r14d,%ecx
cmp    0x70(%rsp),%r10
je     1510 <RB_GS_OmpLoopV4err+0x400>
movzbl %cl,%r14d
and    $0x1,%r14d
mov    0x60(%rsp),%rsi
mov    %rsi,%r13
sub    %r14,%r13
mov    $0x2,%r11d
sub    %r14,%r11
cmp    %r11,%r13
mov    %r11,%rdi
cmovg  %r13,%rdi
mov    %r10,%rax
mov    %r11,%rdx
cmovg  %r13,%rdx
mov    %eax,%r12d
and    $0x1,%r12d
add    $0x1,%r10
mov    %r10d,%r9d
and    $0x1,%r9d
sub    %r9d,%esi
cmp    %esi,%r12d
jge    1230 <RB_GS_OmpLoopV4err+0x120>
mov    %esi,0xc(%rsp)
mov    %r8d,%esi
and    $0x1,%esi
neg    %rsi
mov    %rsi,0x18(%rsp)
not    %cl
mov    %r10,%rbx
movzbl %cl,%r10d
and    $0x1,%r10d
sub    %r10,%rdi
mov    %r8,0x10(%rsp)
and    $0x1,%r8d
mov    0x58(%rsp),%rcx
mov    %rdi,%rsi
mov    -0x8(%rcx,%rax,8),%rdi
mov    (%rcx,%rax,8),%r15
mov    %rbx,0x20(%rsp)
mov    (%rcx,%rbx,8),%rbp
mov    0x88(%rsp),%rcx
mov    (%rcx,%rax,8),%rcx
mov    %rsi,0x30(%rsp)
cmp    $0x4,%rsi
jae    1340 <RB_GS_OmpLoopV4err+0x230>
mov    %r8,%rax
mov    0x10(%rsp),%r8
mov    0x20(%rsp),%r10
mov    0xc(%rsp),%edx
mov    0x18(%rsp),%r11
movslq %edx,%rdx
lea    (%r15,%r14,8),%rbx
lea    (%r15,%r11,8),%rsi
nopl   (%rax)
movsd  (%rdi,%rax,8),%xmm1
addsd  0x0(%rbp,%rax,8),%xmm1
addsd  (%rsi,%rax,8),%xmm1
addsd  (%rbx,%rax,8),%xmm1
mulsd  %xmm4,%xmm1
movsd  %xmm1,(%rcx,%rax,8)
add    $0x1,%rax
cmp    %rdx,%rax
jl     1310 <RB_GS_OmpLoopV4err+0x200>
jmp    1230 <RB_GS_OmpLoopV4err+0x120>
nopl   0x0(%rax)
lea    (%r10,%r14,1),%rax
mov    %rax,0x28(%rsp)
lea    (%rdx,%r14,1),%rax
mov    %rax,0x50(%rsp)
mov    %rdx,%rax
sub    %r10,%rax
lea    (%rcx,%r10,8),%rbx
lea    (%rcx,%rdx,8),%rsi
mov    %rsi,0xa0(%rsp)
lea    (%rdi,%r10,8),%rsi
mov    %rsi,0x48(%rsp)
lea    (%rdi,%rdx,8),%rsi
mov    %rsi,0x98(%rsp)
lea    0x0(%rbp,%r10,8),%rsi
mov    %rsi,0x80(%rsp)
lea    0x0(%rbp,%rdx,8),%r10
mov    0x28(%rsp),%rdx
lea    (%r15,%rdx,8),%rdx
mov    %rdx,0x38(%rsp)
mov    0x50(%rsp),%rdx
lea    (%r15,%rdx,8),%rdx
lea    (%r15,%rax,8),%rax
mov    %rax,0x50(%rsp)
cmp    0x98(%rsp),%rbx
setb   0x28(%rsp)
mov    0xa0(%rsp),%rsi
cmp    %rsi,0x48(%rsp)
setb   0x48(%rsp)
cmp    %r10,%rbx
setb   %al
cmp    %rsi,0x80(%rsp)
setb   0x80(%rsp)
cmp    %rdx,%rbx
setb   %dl
cmp    %rsi,0x38(%rsp)
setb   0x38(%rsp)
cmp    0x50(%rsp),%rbx
setb   %r10b
cmp    %rsi,%r15
setb   %sil
mov    0x48(%rsp),%bl
test   %bl,0x28(%rsp)
jne    12ec <RB_GS_OmpLoopV4err+0x1dc>
and    0x80(%rsp),%al
jne    12ec <RB_GS_OmpLoopV4err+0x1dc>
and    0x38(%rsp),%dl
jne    12ec <RB_GS_OmpLoopV4err+0x1dc>
and    %sil,%r10b
jne    12ec <RB_GS_OmpLoopV4err+0x1dc>
mov    %r12d,%r12d
mov    %r9d,%r9d
mov    0x30(%rsp),%rax
and    $0xfffffffffffffffc,%rax
cmp    %r13,%r11
cmovg  %r11,%r13
mov    %rax,0x28(%rsp)
add    %r8,%rax
mov    0x18(%rsp),%r11
add    %r11,%r13
and    $0xfffffffffffffffc,%r13
xor    %ebx,%ebx
mov    0x20(%rsp),%r10
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rbx,%rdx
or     %r8,%rdx
movupd (%rdi,%rdx,8),%xmm1
movupd 0x10(%rdi,%rdx,8),%xmm2
movupd 0x0(%rbp,%rdx,8),%xmm3
addpd  %xmm1,%xmm3
movupd 0x10(%rbp,%rdx,8),%xmm1
addpd  %xmm2,%xmm1
mov    %rdx,%rsi
sub    %r12,%rsi
movupd (%r15,%rsi,8),%xmm2
addpd  %xmm3,%xmm2
movupd 0x10(%r15,%rsi,8),%xmm3
addpd  %xmm1,%xmm3
lea    (%rdx,%r9,1),%rsi
movupd (%r15,%rsi,8),%xmm1
addpd  %xmm2,%xmm1
movupd 0x10(%r15,%rsi,8),%xmm2
addpd  %xmm3,%xmm2
mulpd  %xmm5,%xmm1
mulpd  %xmm5,%xmm2
movupd %xmm1,(%rcx,%rdx,8)
movupd %xmm2,0x10(%rcx,%rdx,8)
add    $0x4,%rbx
cmp    %rbx,%r13
jne    1470 <RB_GS_OmpLoopV4err+0x360>
mov    0x28(%rsp),%rdx
cmp    %rdx,0x30(%rsp)
mov    0x10(%rsp),%r8
mov    0xc(%rsp),%edx
je     1230 <RB_GS_OmpLoopV4err+0x120>
jmp    1302 <RB_GS_OmpLoopV4err+0x1f2>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpl   $0x3,0x78(%rsp)
jl     11c0 <RB_GS_OmpLoopV4err+0xb0>
mov    $0x1,%r10d
xor    %r9d,%r9d
mov    0x58(%rsp),%r13
jmp    153f <RB_GS_OmpLoopV4err+0x42f>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r9b
cmp    0x70(%rsp),%r10
je     17d0 <RB_GS_OmpLoopV4err+0x6c0>
mov    %r10,%rbp
mov    %ebp,%esi
and    $0x1,%esi
movzbl %r9b,%eax
mov    %eax,%r9d
and    $0x1,%r9d
not    %al
movzbl %al,%ecx
and    $0x1,%ecx
mov    0x60(%rsp),%rdx
mov    %rdx,%rax
sub    %rcx,%rax
lea    0x1(%r9),%r14
cmp    %r14,%rax
mov    %r14,%r15
cmovg  %rax,%r15
cmovle %r14,%rax
add    $0x1,%r10
mov    %r10d,%r8d
and    $0x1,%r8d
sub    %esi,%edx
cmp    %edx,%r8d
jge    1530 <RB_GS_OmpLoopV4err+0x420>
mov    %edx,0xc(%rsp)
mov    %rsi,0x10(%rsp)
mov    %r9,%r12
neg    %r12
sub    %r9,%r15
mov    %r12,0x18(%rsp)
and    $0x1,%r12d
mov    0x88(%rsp),%rdx
mov    -0x8(%rdx,%rbp,8),%rsi
mov    (%rdx,%rbp,8),%r11
mov    (%rdx,%r10,8),%rdi
mov    0x0(%r13,%rbp,8),%rbx
cmp    $0x4,%r15
jae    1610 <RB_GS_OmpLoopV4err+0x500>
mov    %r12,%rcx
mov    0x10(%rsp),%rdx
mov    0xc(%rsp),%eax
mov    0x18(%rsp),%r14
cltq
lea    (%r11,%rdx,8),%rbp
lea    (%r11,%r14,8),%rdx
nop
movsd  (%rsi,%rcx,8),%xmm1
addsd  (%rdi,%rcx,8),%xmm1
addsd  (%rdx,%rcx,8),%xmm1
addsd  0x0(%rbp,%rcx,8),%xmm1
mulsd  %xmm4,%xmm1
movsd  %xmm1,(%rbx,%rcx,8)
add    $0x1,%rcx
cmp    %rax,%rcx
jl     15e0 <RB_GS_OmpLoopV4err+0x4d0>
jmp    1530 <RB_GS_OmpLoopV4err+0x420>
nopl   0x0(%rax)
mov    %r10,0x20(%rsp)
lea    (%rax,%rcx,1),%rdx
mov    %rdx,0x30(%rsp)
add    %r9,%rcx
mov    %rax,%rbp
sub    %r9,%rbp
lea    (%rbx,%r9,8),%r10
lea    (%rbx,%rax,8),%rdx
mov    %rdx,0x48(%rsp)
lea    (%rsi,%r9,8),%rdx
mov    %rdx,0x50(%rsp)
lea    (%rsi,%rax,8),%rdx
lea    (%rdi,%r9,8),%r13
mov    %r13,0x38(%rsp)
lea    (%rdi,%rax,8),%rax
lea    (%r11,%rcx,8),%rcx
mov    %rcx,0x28(%rsp)
mov    0x30(%rsp),%rcx
lea    (%r11,%rcx,8),%rcx
lea    (%r11,%rbp,8),%rbp
cmp    %rdx,%r10
setb   0x30(%rsp)
mov    0x48(%rsp),%rdx
cmp    %rdx,0x50(%rsp)
setb   %r13b
cmp    %rax,%r10
setb   %al
cmp    %rdx,0x38(%rsp)
setb   0x38(%rsp)
cmp    %rcx,%r10
setb   %cl
cmp    %rdx,0x28(%rsp)
setb   0x28(%rsp)
cmp    %rbp,%r10
setb   %bpl
cmp    %rdx,%r11
setb   %dl
test   %r13b,0x30(%rsp)
jne    17b7 <RB_GS_OmpLoopV4err+0x6a7>
and    0x38(%rsp),%al
mov    0x58(%rsp),%r13
mov    0x20(%rsp),%r10
jne    15c4 <RB_GS_OmpLoopV4err+0x4b4>
and    0x28(%rsp),%cl
jne    15c4 <RB_GS_OmpLoopV4err+0x4b4>
and    %dl,%bpl
jne    15c4 <RB_GS_OmpLoopV4err+0x4b4>
mov    0x60(%rsp),%r10
mov    0x10(%rsp),%rax
sub    %rax,%r10
mov    %r8d,%r13d
mov    %eax,%r8d
mov    %r15,%rax
and    $0xfffffffffffffffc,%rax
cmp    %r10,%r14
cmovg  %r14,%r10
mov    %rax,0x30(%rsp)
lea    (%rax,%r12,1),%rcx
mov    0x18(%rsp),%r14
add    %r14,%r10
and    $0xfffffffffffffffc,%r10
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rbp,%rax
or     %r12,%rax
movupd (%rsi,%rax,8),%xmm1
movupd 0x10(%rsi,%rax,8),%xmm2
movupd (%rdi,%rax,8),%xmm3
addpd  %xmm1,%xmm3
movupd 0x10(%rdi,%rax,8),%xmm1
addpd  %xmm2,%xmm1
mov    %rax,%rdx
sub    %r13,%rdx
movupd (%r11,%rdx,8),%xmm2
addpd  %xmm3,%xmm2
movupd 0x10(%r11,%rdx,8),%xmm3
addpd  %xmm1,%xmm3
lea    (%rax,%r8,1),%rdx
movupd (%r11,%rdx,8),%xmm1
addpd  %xmm2,%xmm1
movupd 0x10(%r11,%rdx,8),%xmm2
addpd  %xmm3,%xmm2
mulpd  %xmm5,%xmm1
mulpd  %xmm5,%xmm2
movupd %xmm1,(%rbx,%rax,8)
movupd %xmm2,0x10(%rbx,%rax,8)
add    $0x4,%rbp
cmp    %rbp,%r10
jne    1720 <RB_GS_OmpLoopV4err+0x610>
cmp    0x30(%rsp),%r15
mov    0x58(%rsp),%r13
mov    0x20(%rsp),%r10
mov    0x10(%rsp),%rdx
mov    0xc(%rsp),%eax
je     1530 <RB_GS_OmpLoopV4err+0x420>
jmp    15d5 <RB_GS_OmpLoopV4err+0x4c5>
mov    %r12,%rcx
mov    0x58(%rsp),%r13
mov    0x20(%rsp),%r10
jmp    15c7 <RB_GS_OmpLoopV4err+0x4b7>
nopl   0x0(%rax)
mov    0x78(%rsp),%r11
cmp    $0x3,%r11d
mov    0x6c(%rsp),%r14d
jl     11c5 <RB_GS_OmpLoopV4err+0xb5>
mov    $0x1,%r10d
mov    $0x1,%r8d
xor    %r9d,%r9d
mov    0x44(%rsp),%r15d
mov    0x88(%rsp),%r12
jmp    1823 <RB_GS_OmpLoopV4err+0x713>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r10d
add    $0x1,%r9b
cmp    0x70(%rsp),%r8
je     18b0 <RB_GS_OmpLoopV4err+0x7a0>
mov    %r8,%rcx
mov    %ecx,%edx
and    $0x1,%edx
add    $0x1,%r8
mov    %r8d,%esi
and    $0x1,%esi
mov    0x60(%rsp),%rax
sub    %esi,%eax
cmp    %eax,%edx
jge    1810 <RB_GS_OmpLoopV4err+0x700>
mov    %r10d,%edx
and    $0x1,%edx
movzbl %r9b,%esi
and    $0x1,%esi
add    %rdx,%rsi
mov    %r10d,%edi
and    $0x1,%edi
mov    -0x8(%r13,%rcx,8),%rbp
mov    0x0(%r13,%rcx,8),%rbx
mov    0x0(%r13,%r8,8),%rdx
mov    (%r12,%rcx,8),%rcx
cltq
nopl   0x0(%rax,%rax,1)
movsd  0x0(%rbp,%rdi,8),%xmm1
addsd  (%rdx,%rdi,8),%xmm1
addsd  (%rbx),%xmm1
addsd  (%rbx,%rsi,8),%xmm1
mulsd  %xmm4,%xmm1
movapd %xmm1,%xmm2
subsd  (%rcx,%rdi,8),%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm0
movsd  %xmm1,(%rcx,%rdi,8)
add    $0x1,%rdi
add    $0x8,%rbx
cmp    %rax,%rdi
jl     1870 <RB_GS_OmpLoopV4err+0x760>
jmp    1810 <RB_GS_OmpLoopV4err+0x700>
cmp    $0x3,%r11d
jl     11ca <RB_GS_OmpLoopV4err+0xba>
mov    $0x1,%r8d
xor    %r9d,%r9d
jmp    18df <RB_GS_OmpLoopV4err+0x7cf>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r9b
cmp    0x70(%rsp),%r8
je     11ca <RB_GS_OmpLoopV4err+0xba>
mov    %r8,%rcx
mov    %ecx,%edi
and    $0x1,%edi
add    $0x1,%r8
mov    %r8d,%edx
and    $0x1,%edx
mov    0x60(%rsp),%rax
sub    %edi,%eax
cmp    %eax,%edx
jge    18d0 <RB_GS_OmpLoopV4err+0x7c0>
movzbl %r9b,%edx
mov    %edx,%esi
and    $0x1,%esi
add    %rdi,%rsi
and    $0x1,%edx
mov    -0x8(%r12,%rcx,8),%rdi
mov    (%r12,%rcx,8),%rbp
mov    (%r12,%r8,8),%rbx
mov    0x0(%r13,%rcx,8),%rcx
cltq
nop
movsd  (%rdi,%rdx,8),%xmm1
addsd  (%rbx,%rdx,8),%xmm1
addsd  0x0(%rbp),%xmm1
addsd  0x0(%rbp,%rsi,8),%xmm1
mulsd  %xmm4,%xmm1
movapd %xmm1,%xmm2
subsd  (%rcx,%rdx,8),%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm0
movsd  %xmm1,(%rcx,%rdx,8)
add    $0x1,%rdx
add    $0x8,%rbp
cmp    %rax,%rdx
jl     1920 <RB_GS_OmpLoopV4err+0x810>
jmp    18d0 <RB_GS_OmpLoopV4err+0x7c0>

LLVM IR (-O0):
define double @RB_GS_OmpLoopV4err(double** %0, double** %1, i32 %2, i32 %3, double %4, i32 %5, i32 %6, i32* %7) {
%9 = alloca double**
%10 = alloca double**
%11 = alloca i32
%12 = alloca i32
%13 = alloca double
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32*
%17 = alloca i32
%18 = alloca i32
%19 = alloca double
%20 = alloca double
store double** %0, double*** %9
store double** %1, double*** %10
store i32 %2, i32* %11
store i32 %3, i32* %12
store double %4, double* %13
store i32 %5, i32* %14
store i32 %6, i32* %15
store i32* %7, i32** %16
%21 = load double, double* %13
%22 = fmul double 1.000000e+01, %21
store double %22, double* %20
br label %23
23: ; preds = %418, %8
%24 = load double, double* %20
%25 = load double, double* %13
%26 = fcmp oge double %24, %25
br i1 %26, label %27, label %32
27: ; preds = %23
%28 = load i32*, i32** %16
%29 = load i32, i32* %28
%30 = load i32, i32* %14
%31 = icmp slt i32 %29, %30
br label %32
32: ; preds = %27, %23
%33 = phi i1 [ false, %23 ], [ %31, %27 ]
br i1 %33, label %34, label %429
34: ; preds = %32
store i32 1, i32* %17
br label %35
35: ; preds = %115, %34
%36 = load i32, i32* %17
%37 = load i32, i32* %11
%38 = sub nsw i32 %37, 1
%39 = icmp slt i32 %36, %38
br i1 %39, label %40, label %118
40: ; preds = %35
%41 = load i32, i32* %17
%42 = srem i32 %41, 2
store i32 %42, i32* %18
br label %43
43: ; preds = %111, %40
%44 = load i32, i32* %18
%45 = load i32, i32* %12
%46 = sdiv i32 %45, 2
%47 = load i32, i32* %17
%48 = add nsw i32 %47, 1
%49 = srem i32 %48, 2
%50 = sub nsw i32 %46, %49
%51 = icmp slt i32 %44, %50
br i1 %51, label %52, label %114
52: ; preds = %43
%53 = load double**, double*** %10
%54 = load i32, i32* %17
%55 = sub nsw i32 %54, 1
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds double*, double** %53, i64 %56
%58 = load double*, double** %57
%59 = load i32, i32* %18
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds double, double* %58, i64 %60
%62 = load double, double* %61
%63 = load double**, double*** %10
%64 = load i32, i32* %17
%65 = add nsw i32 %64, 1
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds double*, double** %63, i64 %66
%68 = load double*, double** %67
%69 = load i32, i32* %18
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds double, double* %68, i64 %70
%72 = load double, double* %71
%73 = fadd double %62, %72
%74 = load double**, double*** %10
%75 = load i32, i32* %17
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds double*, double** %74, i64 %76
%78 = load double*, double** %77
%79 = load i32, i32* %18
%80 = load i32, i32* %17
%81 = srem i32 %80, 2
%82 = sub nsw i32 %79, %81
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds double, double* %78, i64 %83
%85 = load double, double* %84
%86 = fadd double %73, %85
%87 = load double**, double*** %10
%88 = load i32, i32* %17
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds double*, double** %87, i64 %89
%91 = load double*, double** %90
%92 = load i32, i32* %18
%93 = load i32, i32* %17
%94 = add nsw i32 %93, 1
%95 = srem i32 %94, 2
%96 = add nsw i32 %92, %95
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds double, double* %91, i64 %97
%99 = load double, double* %98
%100 = fadd double %86, %99
%101 = fmul double 2.500000e-01, %100
store double %101, double* %19
%102 = load double, double* %19
%103 = load double**, double*** %9
%104 = load i32, i32* %17
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double*, double** %103, i64 %105
%107 = load double*, double** %106
%108 = load i32, i32* %18
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds double, double* %107, i64 %109
store double %102, double* %110
br label %111
111: ; preds = %52
%112 = load i32, i32* %18
%113 = add nsw i32 %112, 1
store i32 %113, i32* %18
br label %43
114: ; preds = %43
br label %115
115: ; preds = %114
%116 = load i32, i32* %17
%117 = add nsw i32 %116, 1
store i32 %117, i32* %17
br label %35
118: ; preds = %35
store i32 1, i32* %17
br label %119
119: ; preds = %199, %118
%120 = load i32, i32* %17
%121 = load i32, i32* %11
%122 = sub nsw i32 %121, 1
%123 = icmp slt i32 %120, %122
br i1 %123, label %124, label %202
124: ; preds = %119
%125 = load i32, i32* %17
%126 = add nsw i32 %125, 1
%127 = srem i32 %126, 2
store i32 %127, i32* %18
br label %128
128: ; preds = %195, %124
%129 = load i32, i32* %18
%130 = load i32, i32* %12
%131 = sdiv i32 %130, 2
%132 = load i32, i32* %17
%133 = srem i32 %132, 2
%134 = sub nsw i32 %131, %133
%135 = icmp slt i32 %129, %134
br i1 %135, label %136, label %198
136: ; preds = %128
%137 = load double**, double*** %9
%138 = load i32, i32* %17
%139 = sub nsw i32 %138, 1
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds double*, double** %137, i64 %140
%142 = load double*, double** %141
%143 = load i32, i32* %18
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds double, double* %142, i64 %144
%146 = load double, double* %145
%147 = load double**, double*** %9
%148 = load i32, i32* %17
%149 = add nsw i32 %148, 1
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds double*, double** %147, i64 %150
%152 = load double*, double** %151
%153 = load i32, i32* %18
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds double, double* %152, i64 %154
%156 = load double, double* %155
%157 = fadd double %146, %156
%158 = load double**, double*** %9
%159 = load i32, i32* %17
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds double*, double** %158, i64 %160
%162 = load double*, double** %161
%163 = load i32, i32* %18
%164 = load i32, i32* %17
%165 = add nsw i32 %164, 1
%166 = srem i32 %165, 2
%167 = sub nsw i32 %163, %166
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds double, double* %162, i64 %168
%170 = load double, double* %169
%171 = fadd double %157, %170
%172 = load double**, double*** %9
%173 = load i32, i32* %17
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds double*, double** %172, i64 %174
%176 = load double*, double** %175
%177 = load i32, i32* %18
%178 = load i32, i32* %17
%179 = srem i32 %178, 2
%180 = add nsw i32 %177, %179
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds double, double* %176, i64 %181
%183 = load double, double* %182
%184 = fadd double %171, %183
%185 = fmul double 2.500000e-01, %184
store double %185, double* %19
%186 = load double, double* %19
%187 = load double**, double*** %10
%188 = load i32, i32* %17
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds double*, double** %187, i64 %189
%191 = load double*, double** %190
%192 = load i32, i32* %18
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds double, double* %191, i64 %193
store double %186, double* %194
br label %195
195: ; preds = %136
%196 = load i32, i32* %18
%197 = add nsw i32 %196, 1
store i32 %197, i32* %18
br label %128
198: ; preds = %128
br label %199
199: ; preds = %198
%200 = load i32, i32* %17
%201 = add nsw i32 %200, 1
store i32 %201, i32* %17
br label %119
202: ; preds = %119
store i32 1, i32* %17
br label %203
203: ; preds = %307, %202
%204 = load i32, i32* %17
%205 = load i32, i32* %11
%206 = sub nsw i32 %205, 1
%207 = icmp slt i32 %204, %206
br i1 %207, label %208, label %310
208: ; preds = %203
%209 = load i32, i32* %17
%210 = srem i32 %209, 2
store i32 %210, i32* %18
br label %211
211: ; preds = %303, %208
%212 = load i32, i32* %18
%213 = load i32, i32* %12
%214 = sdiv i32 %213, 2
%215 = load i32, i32* %17
%216 = add nsw i32 %215, 1
%217 = srem i32 %216, 2
%218 = sub nsw i32 %214, %217
%219 = icmp slt i32 %212, %218
br i1 %219, label %220, label %306
220: ; preds = %211
%221 = load double**, double*** %10
%222 = load i32, i32* %17
%223 = sub nsw i32 %222, 1
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds double*, double** %221, i64 %224
%226 = load double*, double** %225
%227 = load i32, i32* %18
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds double, double* %226, i64 %228
%230 = load double, double* %229
%231 = load double**, double*** %10
%232 = load i32, i32* %17
%233 = add nsw i32 %232, 1
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds double*, double** %231, i64 %234
%236 = load double*, double** %235
%237 = load i32, i32* %18
%238 = sext i32 %237 to i64
%239 = getelementptr inbounds double, double* %236, i64 %238
%240 = load double, double* %239
%241 = fadd double %230, %240
%242 = load double**, double*** %10
%243 = load i32, i32* %17
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds double*, double** %242, i64 %244
%246 = load double*, double** %245
%247 = load i32, i32* %18
%248 = load i32, i32* %17
%249 = srem i32 %248, 2
%250 = sub nsw i32 %247, %249
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds double, double* %246, i64 %251
%253 = load double, double* %252
%254 = fadd double %241, %253
%255 = load double**, double*** %10
%256 = load i32, i32* %17
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds double*, double** %255, i64 %257
%259 = load double*, double** %258
%260 = load i32, i32* %18
%261 = load i32, i32* %17
%262 = add nsw i32 %261, 1
%263 = srem i32 %262, 2
%264 = add nsw i32 %260, %263
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds double, double* %259, i64 %265
%267 = load double, double* %266
%268 = fadd double %254, %267
%269 = fmul double 2.500000e-01, %268
store double %269, double* %19
%270 = load double, double* %19
%271 = load double**, double*** %9
%272 = load i32, i32* %17
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds double*, double** %271, i64 %273
%275 = load double*, double** %274
%276 = load i32, i32* %18
%277 = sext i32 %276 to i64
%278 = getelementptr inbounds double, double* %275, i64 %277
%279 = load double, double* %278
%280 = fsub double %270, %279
%281 = load double, double* %19
%282 = load double**, double*** %9
%283 = load i32, i32* %17
%284 = sext i32 %283 to i64
%285 = getelementptr inbounds double*, double** %282, i64 %284
%286 = load double*, double** %285
%287 = load i32, i32* %18
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds double, double* %286, i64 %288
%290 = load double, double* %289
%291 = fsub double %281, %290
%292 = load double, double* %20
%293 = call double @llvm.fmuladd.f64(double %280, double %291, double %292)
store double %293, double* %20
%294 = load double, double* %19
%295 = load double**, double*** %9
%296 = load i32, i32* %17
%297 = sext i32 %296 to i64
%298 = getelementptr inbounds double*, double** %295, i64 %297
%299 = load double*, double** %298
%300 = load i32, i32* %18
%301 = sext i32 %300 to i64
%302 = getelementptr inbounds double, double* %299, i64 %301
store double %294, double* %302
br label %303
303: ; preds = %220
%304 = load i32, i32* %18
%305 = add nsw i32 %304, 1
store i32 %305, i32* %18
br label %211
306: ; preds = %211
br label %307
307: ; preds = %306
%308 = load i32, i32* %17
%309 = add nsw i32 %308, 1
store i32 %309, i32* %17
br label %203
310: ; preds = %203
store i32 1, i32* %17
br label %311
311: ; preds = %415, %310
%312 = load i32, i32* %17
%313 = load i32, i32* %11
%314 = sub nsw i32 %313, 1
%315 = icmp slt i32 %312, %314
br i1 %315, label %316, label %418
316: ; preds = %311
%317 = load i32, i32* %17
%318 = add nsw i32 %317, 1
%319 = srem i32 %318, 2
store i32 %319, i32* %18
br label %320
320: ; preds = %411, %316
%321 = load i32, i32* %18
%322 = load i32, i32* %12
%323 = sdiv i32 %322, 2
%324 = load i32, i32* %17
%325 = srem i32 %324, 2
%326 = sub nsw i32 %323, %325
%327 = icmp slt i32 %321, %326
br i1 %327, label %328, label %414
328: ; preds = %320
%329 = load double**, double*** %9
%330 = load i32, i32* %17
%331 = sub nsw i32 %330, 1
%332 = sext i32 %331 to i64
%333 = getelementptr inbounds double*, double** %329, i64 %332
%334 = load double*, double** %333
%335 = load i32, i32* %18
%336 = sext i32 %335 to i64
%337 = getelementptr inbounds double, double* %334, i64 %336
%338 = load double, double* %337
%339 = load double**, double*** %9
%340 = load i32, i32* %17
%341 = add nsw i32 %340, 1
%342 = sext i32 %341 to i64
%343 = getelementptr inbounds double*, double** %339, i64 %342
%344 = load double*, double** %343
%345 = load i32, i32* %18
%346 = sext i32 %345 to i64
%347 = getelementptr inbounds double, double* %344, i64 %346
%348 = load double, double* %347
%349 = fadd double %338, %348
%350 = load double**, double*** %9
%351 = load i32, i32* %17
%352 = sext i32 %351 to i64
%353 = getelementptr inbounds double*, double** %350, i64 %352
%354 = load double*, double** %353
%355 = load i32, i32* %18
%356 = load i32, i32* %17
%357 = add nsw i32 %356, 1
%358 = srem i32 %357, 2
%359 = sub nsw i32 %355, %358
%360 = sext i32 %359 to i64
%361 = getelementptr inbounds double, double* %354, i64 %360
%362 = load double, double* %361
%363 = fadd double %349, %362
%364 = load double**, double*** %9
%365 = load i32, i32* %17
%366 = sext i32 %365 to i64
%367 = getelementptr inbounds double*, double** %364, i64 %366
%368 = load double*, double** %367
%369 = load i32, i32* %18
%370 = load i32, i32* %17
%371 = srem i32 %370, 2
%372 = add nsw i32 %369, %371
%373 = sext i32 %372 to i64
%374 = getelementptr inbounds double, double* %368, i64 %373
%375 = load double, double* %374
%376 = fadd double %363, %375
%377 = fmul double 2.500000e-01, %376
store double %377, double* %19
%378 = load double, double* %19
%379 = load double**, double*** %10
%380 = load i32, i32* %17
%381 = sext i32 %380 to i64
%382 = getelementptr inbounds double*, double** %379, i64 %381
%383 = load double*, double** %382
%384 = load i32, i32* %18
%385 = sext i32 %384 to i64
%386 = getelementptr inbounds double, double* %383, i64 %385
%387 = load double, double* %386
%388 = fsub double %378, %387
%389 = load double, double* %19
%390 = load double**, double*** %10
%391 = load i32, i32* %17
%392 = sext i32 %391 to i64
%393 = getelementptr inbounds double*, double** %390, i64 %392
%394 = load double*, double** %393
%395 = load i32, i32* %18
%396 = sext i32 %395 to i64
%397 = getelementptr inbounds double, double* %394, i64 %396
%398 = load double, double* %397
%399 = fsub double %389, %398
%400 = load double, double* %20
%401 = call double @llvm.fmuladd.f64(double %388, double %399, double %400)
store double %401, double* %20
%402 = load double, double* %19
%403 = load double**, double*** %10
%404 = load i32, i32* %17
%405 = sext i32 %404 to i64
%406 = getelementptr inbounds double*, double** %403, i64 %405
%407 = load double*, double** %406
%408 = load i32, i32* %18
%409 = sext i32 %408 to i64
%410 = getelementptr inbounds double, double* %407, i64 %409
store double %402, double* %410
br label %411
411: ; preds = %328
%412 = load i32, i32* %18
%413 = add nsw i32 %412, 1
store i32 %413, i32* %18
br label %320
414: ; preds = %320
br label %415
415: ; preds = %414
%416 = load i32, i32* %17
%417 = add nsw i32 %416, 1
store i32 %417, i32* %17
br label %311
418: ; preds = %311
%419 = load double, double* %20
%420 = call i32 @sqrt(double %419)
%421 = load i32, i32* %11
%422 = load i32, i32* %12
%423 = mul nsw i32 %421, %422
%424 = sdiv i32 %420, %423
%425 = sitofp i32 %424 to double
store double %425, double* %20
%426 = load i32*, i32** %16
%427 = load i32, i32* %426
%428 = add nsw i32 %427, 2
store i32 %428, i32* %426
br label %23
429: ; preds = %32
%430 = load double, double* %20
ret double %430
}

LLVM IR (-O2):
define double @RB_GS_OmpLoopV4err(double** nocapture %0, double** nocapture %1, i32 %2, i32 %3, double %4, i32 %5, i32 %6, i32* nocapture %7) {
%9 = fmul double %4, 1.000000e+01
%10 = fcmp ult double %9, %4
br i1 %10, label %427, label %11
11: ; preds = %8
%12 = add i32 %2, -1
%13 = icmp sgt i32 %2, 2
%14 = sdiv i32 %3, 2
%15 = mul nsw i32 %3, %2
%16 = load i32, i32* %7
%17 = zext i32 %12 to i64
%18 = zext i32 %12 to i64
%19 = zext i32 %12 to i64
%20 = zext i32 %12 to i64
%21 = sext i32 %14 to i64
%22 = sext i32 %14 to i64
%23 = sext i32 %14 to i64
%24 = sext i32 %14 to i64
br label %25
25: ; preds = %11, %419
%26 = phi i32 [ %16, %11 ], [ %425, %419 ]
%27 = phi double [ %9, %11 ], [ %423, %419 ]
%28 = icmp slt i32 %26, %5
br i1 %28, label %29, label %427
29: ; preds = %25
br i1 %13, label %34, label %419
30: ; preds = %153, %149, %34
%31 = icmp eq i64 %56, %17
%32 = xor i1 %35, true
br i1 %31, label %33, label %34
33: ; preds = %30
br i1 %13, label %177, label %419
34: ; preds = %29, %30
%35 = phi i1 [ %32, %30 ], [ false, %29 ]
%36 = phi i64 [ %56, %30 ], [ 1, %29 ]
%37 = phi i32 [ %57, %30 ], [ 1, %29 ]
%38 = sext i1 %35 to i64
%39 = add nsw i64 %38, %24
%40 = xor i1 %35, true
%41 = sext i1 %40 to i64
%42 = select i1 %35, i64 1, i64 2
%43 = call i64 @llvm.smax.i64(i64 %39, i64 %42)
%44 = add i64 %43, %41
%45 = xor i1 %35, true
%46 = zext i1 %45 to i64
%47 = zext i1 %35 to i64
%48 = sub nsw i64 %23, %47
%49 = select i1 %35, i64 1, i64 2
%50 = call i64 @llvm.smax.i64(i64 %48, i64 %49)
%51 = add nuw nsw i64 %46, %47
%52 = add nuw i64 %50, %47
%53 = sub nsw i64 %50, %46
%54 = trunc i64 %36 to i32
%55 = and i32 %54, 1
%56 = add nuw nsw i64 %36, 1
%57 = add nuw nsw i32 %37, 1
%58 = trunc i64 %56 to i32
%59 = and i32 %58, 1
%60 = sub nsw i32 %14, %59
%61 = icmp slt i32 %55, %60
br i1 %61, label %62, label %30
62: ; preds = %34
%63 = and i32 %37, 1
%64 = zext i32 %63 to i64
%65 = add nsw i64 %36, -1
%66 = getelementptr inbounds double*, double** %1, i64 %65
%67 = load double*, double** %66
%68 = getelementptr inbounds double*, double** %1, i64 %56
%69 = load double*, double** %68
%70 = getelementptr inbounds double*, double** %1, i64 %36
%71 = load double*, double** %70
%72 = getelementptr inbounds double*, double** %0, i64 %36
%73 = load double*, double** %72
%74 = zext i32 %55 to i64
%75 = zext i32 %59 to i64
%76 = sext i32 %60 to i64
%77 = icmp ult i64 %44, 4
br i1 %77, label %151, label %78
78: ; preds = %62
%79 = getelementptr double, double* %73, i64 %46
%80 = getelementptr double, double* %73, i64 %50
%81 = getelementptr double, double* %67, i64 %46
%82 = getelementptr double, double* %67, i64 %50
%83 = getelementptr double, double* %69, i64 %46
%84 = getelementptr double, double* %69, i64 %50
%85 = getelementptr double, double* %71, i64 %51
%86 = getelementptr double, double* %71, i64 %52
%87 = getelementptr double, double* %71, i64 %53
%88 = icmp ult double* %79, %82
%89 = icmp ult double* %81, %80
%90 = and i1 %88, %89
%91 = icmp ult double* %79, %84
%92 = icmp ult double* %83, %80
%93 = and i1 %91, %92
%94 = or i1 %90, %93
%95 = icmp ult double* %79, %86
%96 = icmp ult double* %85, %80
%97 = and i1 %95, %96
%98 = or i1 %94, %97
%99 = icmp ult double* %79, %87
%100 = icmp ult double* %71, %80
%101 = and i1 %99, %100
%102 = or i1 %98, %101
br i1 %102, label %151, label %103
103: ; preds = %78
%104 = and i64 %44, -4
%105 = or i64 %104, %64
br label %106
106: ; preds = %106, %103
%107 = phi i64 [ 0, %103 ], [ %147, %106 ]
%108 = or i64 %107, %64
%109 = getelementptr inbounds double, double* %67, i64 %108
%110 = bitcast double* %109 to <2 x double>*
%111 = load <2 x double>, <2 x double>* %110
%112 = getelementptr inbounds double, double* %109, i64 2
%113 = bitcast double* %112 to <2 x double>*
%114 = load <2 x double>, <2 x double>* %113
%115 = getelementptr inbounds double, double* %69, i64 %108
%116 = bitcast double* %115 to <2 x double>*
%117 = load <2 x double>, <2 x double>* %116
%118 = getelementptr inbounds double, double* %115, i64 2
%119 = bitcast double* %118 to <2 x double>*
%120 = load <2 x double>, <2 x double>* %119
%121 = fadd <2 x double> %111, %117
%122 = fadd <2 x double> %114, %120
%123 = sub nuw nsw i64 %108, %74
%124 = getelementptr inbounds double, double* %71, i64 %123
%125 = bitcast double* %124 to <2 x double>*
%126 = load <2 x double>, <2 x double>* %125
%127 = getelementptr inbounds double, double* %124, i64 2
%128 = bitcast double* %127 to <2 x double>*
%129 = load <2 x double>, <2 x double>* %128
%130 = fadd <2 x double> %121, %126
%131 = fadd <2 x double> %122, %129
%132 = add nuw nsw i64 %108, %75
%133 = getelementptr inbounds double, double* %71, i64 %132
%134 = bitcast double* %133 to <2 x double>*
%135 = load <2 x double>, <2 x double>* %134
%136 = getelementptr inbounds double, double* %133, i64 2
%137 = bitcast double* %136 to <2 x double>*
%138 = load <2 x double>, <2 x double>* %137
%139 = fadd <2 x double> %130, %135
%140 = fadd <2 x double> %131, %138
%141 = fmul <2 x double> %139, <double 2.500000e-01, double 2.500000e-01>
%142 = fmul <2 x double> %140, <double 2.500000e-01, double 2.500000e-01>
%143 = getelementptr inbounds double, double* %73, i64 %108
%144 = bitcast double* %143 to <2 x double>*
store <2 x double> %141, <2 x double>* %144
%145 = getelementptr inbounds double, double* %143, i64 2
%146 = bitcast double* %145 to <2 x double>*
store <2 x double> %142, <2 x double>* %146
%147 = add nuw i64 %107, 4
%148 = icmp eq i64 %147, %104
br i1 %148, label %149, label %106
149: ; preds = %106
%150 = icmp eq i64 %44, %104
br i1 %150, label %30, label %151
151: ; preds = %78, %62, %149
%152 = phi i64 [ %64, %78 ], [ %64, %62 ], [ %105, %149 ]
br label %153
153: ; preds = %151, %153
%154 = phi i64 [ %170, %153 ], [ %152, %151 ]
%155 = getelementptr inbounds double, double* %67, i64 %154
%156 = load double, double* %155
%157 = getelementptr inbounds double, double* %69, i64 %154
%158 = load double, double* %157
%159 = fadd double %156, %158
%160 = sub nuw nsw i64 %154, %74
%161 = getelementptr inbounds double, double* %71, i64 %160
%162 = load double, double* %161
%163 = fadd double %159, %162
%164 = add nuw nsw i64 %154, %75
%165 = getelementptr inbounds double, double* %71, i64 %164
%166 = load double, double* %165
%167 = fadd double %163, %166
%168 = fmul double %167, 2.500000e-01
%169 = getelementptr inbounds double, double* %73, i64 %154
store double %168, double* %169
%170 = add nuw nsw i64 %154, 1
%171 = icmp slt i64 %170, %76
br i1 %171, label %153, label %30
172: ; preds = %294, %290, %177
%173 = xor i1 %180, true
%174 = icmp eq i64 %197, %18
%175 = xor i1 %178, true
br i1 %174, label %176, label %177
176: ; preds = %172
br i1 %13, label %317, label %419
177: ; preds = %33, %172
%178 = phi i1 [ %175, %172 ], [ false, %33 ]
%179 = phi i64 [ %197, %172 ], [ 1, %33 ]
%180 = phi i1 [ %173, %172 ], [ false, %33 ]
%181 = xor i1 %178, true
%182 = sext i1 %181 to i64
%183 = add nsw i64 %182, %22
%184 = sext i1 %178 to i64
%185 = select i1 %178, i64 2, i64 1
%186 = call i64 @llvm.smax.i64(i64 %183, i64 %185)
%187 = add i64 %186, %184
%188 = zext i1 %178 to i64
%189 = xor i1 %178, true
%190 = zext i1 %189 to i64
%191 = sub nsw i64 %21, %190
%192 = select i1 %178, i64 2, i64 1
%193 = call i64 @llvm.smax.i64(i64 %191, i64 %192)
%194 = add nuw nsw i64 %190, %188
%195 = add nuw i64 %193, %190
%196 = sub nsw i64 %193, %188
%197 = add nuw nsw i64 %179, 1
%198 = trunc i64 %197 to i32
%199 = and i32 %198, 1
%200 = trunc i64 %179 to i32
%201 = and i32 %200, 1
%202 = sub nsw i32 %14, %201
%203 = icmp slt i32 %199, %202
br i1 %203, label %204, label %172
204: ; preds = %177
%205 = zext i1 %180 to i64
%206 = add nsw i64 %179, -1
%207 = getelementptr inbounds double*, double** %0, i64 %206
%208 = load double*, double** %207
%209 = getelementptr inbounds double*, double** %0, i64 %197
%210 = load double*, double** %209
%211 = getelementptr inbounds double*, double** %0, i64 %179
%212 = load double*, double** %211
%213 = getelementptr inbounds double*, double** %1, i64 %179
%214 = load double*, double** %213
%215 = zext i32 %199 to i64
%216 = zext i32 %201 to i64
%217 = sext i32 %202 to i64
%218 = icmp ult i64 %187, 4
br i1 %218, label %292, label %219
219: ; preds = %204
%220 = getelementptr double, double* %214, i64 %188
%221 = getelementptr double, double* %214, i64 %193
%222 = getelementptr double, double* %208, i64 %188
%223 = getelementptr double, double* %208, i64 %193
%224 = getelementptr double, double* %210, i64 %188
%225 = getelementptr double, double* %210, i64 %193
%226 = getelementptr double, double* %212, i64 %194
%227 = getelementptr double, double* %212, i64 %195
%228 = getelementptr double, double* %212, i64 %196
%229 = icmp ult double* %220, %223
%230 = icmp ult double* %222, %221
%231 = and i1 %229, %230
%232 = icmp ult double* %220, %225
%233 = icmp ult double* %224, %221
%234 = and i1 %232, %233
%235 = or i1 %231, %234
%236 = icmp ult double* %220, %227
%237 = icmp ult double* %226, %221
%238 = and i1 %236, %237
%239 = or i1 %235, %238
%240 = icmp ult double* %220, %228
%241 = icmp ult double* %212, %221
%242 = and i1 %240, %241
%243 = or i1 %239, %242
br i1 %243, label %292, label %244
244: ; preds = %219
%245 = and i64 %187, -4
%246 = or i64 %245, %205
br label %247
247: ; preds = %247, %244
%248 = phi i64 [ 0, %244 ], [ %288, %247 ]
%249 = or i64 %248, %205
%250 = getelementptr inbounds double, double* %208, i64 %249
%251 = bitcast double* %250 to <2 x double>*
%252 = load <2 x double>, <2 x double>* %251
%253 = getelementptr inbounds double, double* %250, i64 2
%254 = bitcast double* %253 to <2 x double>*
%255 = load <2 x double>, <2 x double>* %254
%256 = getelementptr inbounds double, double* %210, i64 %249
%257 = bitcast double* %256 to <2 x double>*
%258 = load <2 x double>, <2 x double>* %257
%259 = getelementptr inbounds double, double* %256, i64 2
%260 = bitcast double* %259 to <2 x double>*
%261 = load <2 x double>, <2 x double>* %260
%262 = fadd <2 x double> %252, %258
%263 = fadd <2 x double> %255, %261
%264 = sub nuw nsw i64 %249, %215
%265 = getelementptr inbounds double, double* %212, i64 %264
%266 = bitcast double* %265 to <2 x double>*
%267 = load <2 x double>, <2 x double>* %266
%268 = getelementptr inbounds double, double* %265, i64 2
%269 = bitcast double* %268 to <2 x double>*
%270 = load <2 x double>, <2 x double>* %269
%271 = fadd <2 x double> %262, %267
%272 = fadd <2 x double> %263, %270
%273 = add nuw nsw i64 %249, %216
%274 = getelementptr inbounds double, double* %212, i64 %273
%275 = bitcast double* %274 to <2 x double>*
%276 = load <2 x double>, <2 x double>* %275
%277 = getelementptr inbounds double, double* %274, i64 2
%278 = bitcast double* %277 to <2 x double>*
%279 = load <2 x double>, <2 x double>* %278
%280 = fadd <2 x double> %271, %276
%281 = fadd <2 x double> %272, %279
%282 = fmul <2 x double> %280, <double 2.500000e-01, double 2.500000e-01>
%283 = fmul <2 x double> %281, <double 2.500000e-01, double 2.500000e-01>
%284 = getelementptr inbounds double, double* %214, i64 %249
%285 = bitcast double* %284 to <2 x double>*
store <2 x double> %282, <2 x double>* %285
%286 = getelementptr inbounds double, double* %284, i64 2
%287 = bitcast double* %286 to <2 x double>*
store <2 x double> %283, <2 x double>* %287
%288 = add nuw i64 %248, 4
%289 = icmp eq i64 %288, %245
br i1 %289, label %290, label %247
290: ; preds = %247
%291 = icmp eq i64 %187, %245
br i1 %291, label %172, label %292
292: ; preds = %219, %204, %290
%293 = phi i64 [ %205, %219 ], [ %205, %204 ], [ %246, %290 ]
br label %294
294: ; preds = %292, %294
%295 = phi i64 [ %311, %294 ], [ %293, %292 ]
%296 = getelementptr inbounds double, double* %208, i64 %295
%297 = load double, double* %296
%298 = getelementptr inbounds double, double* %210, i64 %295
%299 = load double, double* %298
%300 = fadd double %297, %299
%301 = sub nuw nsw i64 %295, %215
%302 = getelementptr inbounds double, double* %212, i64 %301
%303 = load double, double* %302
%304 = fadd double %300, %303
%305 = add nuw nsw i64 %295, %216
%306 = getelementptr inbounds double, double* %212, i64 %305
%307 = load double, double* %306
%308 = fadd double %304, %307
%309 = fmul double %308, 2.500000e-01
%310 = getelementptr inbounds double, double* %214, i64 %295
store double %309, double* %310
%311 = add nuw nsw i64 %295, 1
%312 = icmp slt i64 %311, %217
br i1 %312, label %294, label %172
313: ; preds = %344, %317
%314 = phi double [ %319, %317 ], [ %364, %344 ]
%315 = icmp eq i64 %323, %19
br i1 %315, label %316, label %317
316: ; preds = %313
br i1 %13, label %371, label %419
317: ; preds = %176, %313
%318 = phi i64 [ %323, %313 ], [ 1, %176 ]
%319 = phi double [ %314, %313 ], [ %27, %176 ]
%320 = phi i32 [ %324, %313 ], [ 1, %176 ]
%321 = trunc i64 %318 to i32
%322 = and i32 %321, 1
%323 = add nuw nsw i64 %318, 1
%324 = add nuw nsw i32 %320, 1
%325 = trunc i64 %323 to i32
%326 = and i32 %325, 1
%327 = sub nsw i32 %14, %326
%328 = icmp slt i32 %322, %327
br i1 %328, label %329, label %313
329: ; preds = %317
%330 = and i32 %320, 1
%331 = zext i32 %330 to i64
%332 = add nsw i64 %318, -1
%333 = getelementptr inbounds double*, double** %1, i64 %332
%334 = load double*, double** %333
%335 = getelementptr inbounds double*, double** %1, i64 %323
%336 = load double*, double** %335
%337 = getelementptr inbounds double*, double** %1, i64 %318
%338 = load double*, double** %337
%339 = getelementptr inbounds double*, double** %0, i64 %318
%340 = load double*, double** %339
%341 = zext i32 %322 to i64
%342 = zext i32 %326 to i64
%343 = sext i32 %327 to i64
br label %344
344: ; preds = %329, %344
%345 = phi i64 [ %331, %329 ], [ %365, %344 ]
%346 = phi double [ %319, %329 ], [ %364, %344 ]
%347 = getelementptr inbounds double, double* %334, i64 %345
%348 = load double, double* %347
%349 = getelementptr inbounds double, double* %336, i64 %345
%350 = load double, double* %349
%351 = fadd double %348, %350
%352 = sub nuw nsw i64 %345, %341
%353 = getelementptr inbounds double, double* %338, i64 %352
%354 = load double, double* %353
%355 = fadd double %351, %354
%356 = add nuw nsw i64 %345, %342
%357 = getelementptr inbounds double, double* %338, i64 %356
%358 = load double, double* %357
%359 = fadd double %355, %358
%360 = fmul double %359, 2.500000e-01
%361 = getelementptr inbounds double, double* %340, i64 %345
%362 = load double, double* %361
%363 = fsub double %360, %362
%364 = tail call double @llvm.fmuladd.f64(double %363, double %363, double %346)
store double %360, double* %361
%365 = add nuw nsw i64 %345, 1
%366 = icmp slt i64 %365, %343
br i1 %366, label %344, label %313
367: ; preds = %396, %371
%368 = phi double [ %374, %371 ], [ %416, %396 ]
%369 = xor i1 %373, true
%370 = icmp eq i64 %375, %20
br i1 %370, label %419, label %371
371: ; preds = %316, %367
%372 = phi i64 [ %375, %367 ], [ 1, %316 ]
%373 = phi i1 [ %369, %367 ], [ false, %316 ]
%374 = phi double [ %368, %367 ], [ %314, %316 ]
%375 = add nuw nsw i64 %372, 1
%376 = trunc i64 %375 to i32
%377 = and i32 %376, 1
%378 = trunc i64 %372 to i32
%379 = and i32 %378, 1
%380 = sub nsw i32 %14, %379
%381 = icmp slt i32 %377, %380
br i1 %381, label %382, label %367
382: ; preds = %371
%383 = zext i1 %373 to i64
%384 = add nsw i64 %372, -1
%385 = getelementptr inbounds double*, double** %0, i64 %384
%386 = load double*, double** %385
%387 = getelementptr inbounds double*, double** %0, i64 %375
%388 = load double*, double** %387
%389 = getelementptr inbounds double*, double** %0, i64 %372
%390 = load double*, double** %389
%391 = getelementptr inbounds double*, double** %1, i64 %372
%392 = load double*, double** %391
%393 = zext i32 %377 to i64
%394 = zext i32 %379 to i64
%395 = sext i32 %380 to i64
br label %396
396: ; preds = %382, %396
%397 = phi i64 [ %383, %382 ], [ %417, %396 ]
%398 = phi double [ %374, %382 ], [ %416, %396 ]
%399 = getelementptr inbounds double, double* %386, i64 %397
%400 = load double, double* %399
%401 = getelementptr inbounds double, double* %388, i64 %397
%402 = load double, double* %401
%403 = fadd double %400, %402
%404 = sub nuw nsw i64 %397, %393
%405 = getelementptr inbounds double, double* %390, i64 %404
%406 = load double, double* %405
%407 = fadd double %403, %406
%408 = add nuw nsw i64 %397, %394
%409 = getelementptr inbounds double, double* %390, i64 %408
%410 = load double, double* %409
%411 = fadd double %407, %410
%412 = fmul double %411, 2.500000e-01
%413 = getelementptr inbounds double, double* %392, i64 %397
%414 = load double, double* %413
%415 = fsub double %412, %414
%416 = tail call double @llvm.fmuladd.f64(double %415, double %415, double %398)
store double %412, double* %413
%417 = add nuw nsw i64 %397, 1
%418 = icmp slt i64 %417, %395
br i1 %418, label %396, label %367
419: ; preds = %367, %29, %33, %176, %316
%420 = phi double [ %314, %316 ], [ %27, %176 ], [ %27, %33 ], [ %27, %29 ], [ %368, %367 ]
%421 = tail call i32 @sqrt(double %420)
%422 = sdiv i32 %421, %15
%423 = sitofp i32 %422 to double
%424 = load i32, i32* %7
%425 = add nsw i32 %424, 2
store i32 %425, i32* %7
%426 = fcmp ult double %423, %4
br i1 %426, label %427, label %25
427: ; preds = %25, %419, %8
%428 = phi double [ %9, %8 ], [ %423, %419 ], [ %27, %25 ]
ret double %428
}