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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double fabs(double);
double RB_GS_OmpLoopV4(double **black, double **red, int m, int n, double eps,
                       int maxit, int iterations_print, int *iterations) {
  int i, j;
  double v;
  double my_diff, my_diffR, my_diffB;
  double diff = eps;
  while (eps <= diff && *iterations < maxit) {
    diff = 0.0;
#pragma omp parallel private(j, v, my_diff, my_diffR, my_diffB)
    {
#pragma omp for schedule(OMP_SCHED)
      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)
      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;
        }
      my_diffB = 0.0;
#pragma omp for schedule(OMP_SCHED)
      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]);
          if (my_diffB < fabs(v - black[i][j]))
            my_diffB = fabs(v - black[i][j]);
          black[i][j] = v;
        }
      my_diffR = 0.0;
#pragma omp for schedule(OMP_SCHED) 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]);
          if (my_diffR < fabs(v - red[i][j]))
            my_diffR = fabs(v - red[i][j]);
          red[i][j] = v;
        }
      my_diff = my_diffR < my_diffB ? my_diffB : my_diffR;
#pragma omp barrier
      if (diff < my_diff)
#pragma omp atomic write
        diff = my_diff;
    }
    *iterations += 2;
  }
  return diff;
}


x86 assembly (clang, -O0):
<RB_GS_OmpLoopV4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%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  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
xor    %eax,%eax
ucomisd %xmm1,%xmm0
mov    %al,-0x59(%rbp)
jb     1159 <RB_GS_OmpLoopV4+0x59>
mov    0x10(%rbp),%rax
mov    (%rax),%eax
cmp    -0x24(%rbp),%eax
setl   %al
mov    %al,-0x59(%rbp)
mov    -0x59(%rbp),%al
test   $0x1,%al
jne    1169 <RB_GS_OmpLoopV4+0x69>
jmp    1791 <RB_GS_OmpLoopV4+0x691>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12a0 <RB_GS_OmpLoopV4+0x1a0>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x60(%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    -0x60(%rbp),%eax
sub    %edx,%ecx
cmp    %ecx,%eax
jge    128d <RB_GS_OmpLoopV4+0x18d>
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,-0x70(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x70(%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,-0x68(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x68(%rbp),%rax
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xdb4(%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    1197 <RB_GS_OmpLoopV4+0x97>
jmp    1292 <RB_GS_OmpLoopV4+0x192>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1178 <RB_GS_OmpLoopV4+0x78>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13d5 <RB_GS_OmpLoopV4+0x2d5>
mov    -0x2c(%rbp),%eax
add    $0x1,%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
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x74(%rbp),%eax
sub    %edx,%ecx
cmp    %ecx,%eax
jge    13c2 <RB_GS_OmpLoopV4+0x2c2>
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,-0x88(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x88(%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,-0x80(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x80(%rbp),%rax
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xc7f(%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    12c9 <RB_GS_OmpLoopV4+0x1c9>
jmp    13c7 <RB_GS_OmpLoopV4+0x2c7>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12a7 <RB_GS_OmpLoopV4+0x1a7>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    157c <RB_GS_OmpLoopV4+0x47c>
mov    -0x2c(%rbp),%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
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x8c(%rbp),%eax
sub    %edx,%ecx
cmp    %ecx,%eax
jge    1569 <RB_GS_OmpLoopV4+0x469>
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,-0xa0(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0xa0(%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,-0x98(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0x98(%rbp),%rax
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xb36(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x50(%rbp),%xmm1
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
movaps 0xaf7(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1541 <RB_GS_OmpLoopV4+0x441>
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
movaps 0xac8(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x50(%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    1403 <RB_GS_OmpLoopV4+0x303>
jmp    156e <RB_GS_OmpLoopV4+0x46e>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    13e4 <RB_GS_OmpLoopV4+0x2e4>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1723 <RB_GS_OmpLoopV4+0x623>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0xa4(%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    -0xa4(%rbp),%eax
sub    %edx,%ecx
cmp    %ecx,%eax
jge    1710 <RB_GS_OmpLoopV4+0x610>
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,-0xb8(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0xb8(%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,-0xb0(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
mov    $0x2,%esi
cltd
idiv   %esi
mov    -0xb0(%rbp),%rax
add    %edx,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0x98f(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x48(%rbp),%xmm1
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
movaps 0x950(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    16e8 <RB_GS_OmpLoopV4+0x5e8>
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
movaps 0x921(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x48(%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    15ad <RB_GS_OmpLoopV4+0x4ad>
jmp    1715 <RB_GS_OmpLoopV4+0x615>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    158b <RB_GS_OmpLoopV4+0x48b>
movsd  -0x48(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1749 <RB_GS_OmpLoopV4+0x649>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    1756 <RB_GS_OmpLoopV4+0x656>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x40(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1781 <RB_GS_OmpLoopV4+0x681>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x2,%ecx
mov    %ecx,(%rax)
jmp    1131 <RB_GS_OmpLoopV4+0x31>
movsd  -0x58(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<RB_GS_OmpLoopV4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rsi,-0x18(%rsp)
mov    %rdi,-0x20(%rsp)
ucomisd %xmm0,%xmm0
jp     1966 <RB_GS_OmpLoopV4+0x866>
mov    0x50(%rsp),%rax
mov    (%rax),%r12d
cmp    %r8d,%r12d
jge    1966 <RB_GS_OmpLoopV4+0x866>
lea    -0x1(%rdx),%eax
mov    %rax,-0x10(%rsp)
mov    %ecx,%eax
shr    $0x1f,%eax
add    %ecx,%eax
sar    %eax
mov    %eax,-0x24(%rsp)
movslq %eax,%r9
movsd  0xecd(%rip),%xmm2
movapd 0xea5(%rip),%xmm3
movapd 0xead(%rip),%xmm4
xorpd  %xmm8,%xmm8
mov    %r9,-0x78(%rsp)
mov    %r8d,-0x2c(%rsp)
mov    %rdx,(%rsp)
cs nopw 0x0(%rax,%rax,1)
xorpd  %xmm1,%xmm1
xorpd  %xmm7,%xmm7
cmp    $0x3,%edx
jl     1940 <RB_GS_OmpLoopV4+0x840>
mov    %r12d,-0x28(%rsp)
mov    $0x1,%eax
mov    %rax,-0x58(%rsp)
mov    $0x1,%r13d
xor    %eax,%eax
jmp    11cf <RB_GS_OmpLoopV4+0xcf>
nopw   0x0(%rax,%rax,1)
mov    -0x58(%rsp),%rax
add    $0x1,%eax
mov    %rax,-0x58(%rsp)
add    $0x1,%r14b
mov    %r14d,%eax
cmp    -0x10(%rsp),%r13
je     1460 <RB_GS_OmpLoopV4+0x360>
movzbl %al,%r14d
and    $0x1,%r14d
mov    %r9,%rbp
sub    %r14,%rbp
mov    $0x2,%r15d
sub    %r14,%r15
cmp    %r15,%rbp
mov    %r15,%rdx
cmovg  %rbp,%rdx
mov    %r13,%rsi
mov    %r15,%r12
cmovg  %rbp,%r12
mov    %esi,%ecx
and    $0x1,%ecx
add    $0x1,%r13
mov    %r13d,%edi
and    $0x1,%edi
mov    %r9d,%ebx
sub    %edi,%ebx
cmp    %ebx,%ecx
jge    11b0 <RB_GS_OmpLoopV4+0xb0>
mov    %edi,-0x8(%rsp)
mov    %ecx,-0x38(%rsp)
mov    %ebx,-0x60(%rsp)
mov    -0x58(%rsp),%r9
mov    %r9d,%ebx
and    $0x1,%ebx
neg    %rbx
mov    %rbx,-0x68(%rsp)
not    %al
mov    %r13,%rbx
movzbl %al,%r13d
and    $0x1,%r13d
sub    %r13,%rdx
and    $0x1,%r9d
mov    -0x18(%rsp),%rcx
mov    -0x8(%rcx,%rsi,8),%rax
mov    (%rcx,%rsi,8),%r10
mov    %rbx,-0x80(%rsp)
mov    (%rcx,%rbx,8),%r11
mov    -0x20(%rsp),%rcx
mov    (%rcx,%rsi,8),%r8
mov    %rdx,-0x70(%rsp)
cmp    $0x4,%rdx
jae    12d0 <RB_GS_OmpLoopV4+0x1d0>
mov    %r9,%rdx
mov    -0x78(%rsp),%r9
mov    -0x80(%rsp),%r13
mov    -0x60(%rsp),%esi
mov    -0x68(%rsp),%r12
movslq %esi,%rsi
lea    (%r10,%r14,8),%rdi
lea    (%r10,%r12,8),%rbp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%rax,%rdx,8),%xmm1
addsd  (%r11,%rdx,8),%xmm1
addsd  0x0(%rbp,%rdx,8),%xmm1
addsd  (%rdi,%rdx,8),%xmm1
mulsd  %xmm2,%xmm1
movsd  %xmm1,(%r8,%rdx,8)
add    $0x1,%rdx
cmp    %rsi,%rdx
jl     12a0 <RB_GS_OmpLoopV4+0x1a0>
jmp    11b0 <RB_GS_OmpLoopV4+0xb0>
xchg   %ax,%ax
lea    (%r14,%r13,1),%rbx
lea    (%r12,%r14,1),%rcx
mov    %rcx,-0x50(%rsp)
mov    %r12,%rsi
sub    %r13,%rsi
lea    (%r8,%r13,8),%rdx
lea    (%r8,%r12,8),%rcx
lea    (%rax,%r13,8),%rdi
mov    %rdi,-0x40(%rsp)
lea    (%rax,%r12,8),%rdi
mov    %rdi,0x8(%rsp)
lea    (%r11,%r13,8),%rdi
mov    %rdi,-0x48(%rsp)
lea    (%r11,%r12,8),%rdi
lea    (%r10,%rbx,8),%rbx
mov    %rbx,0x10(%rsp)
mov    -0x50(%rsp),%rbx
lea    (%r10,%rbx,8),%r13
lea    (%r10,%rsi,8),%rsi
mov    %rsi,-0x50(%rsp)
cmp    0x8(%rsp),%rdx
setb   %r12b
cmp    %rcx,-0x40(%rsp)
setb   -0x40(%rsp)
cmp    %rdi,%rdx
setb   %sil
cmp    %rcx,-0x48(%rsp)
setb   -0x48(%rsp)
cmp    %r13,%rdx
setb   %dil
cmp    %rcx,0x10(%rsp)
setb   %bl
cmp    -0x50(%rsp),%rdx
setb   %r13b
cmp    %rcx,%r10
setb   %cl
test   %r12b,-0x40(%rsp)
jne    1270 <RB_GS_OmpLoopV4+0x170>
and    -0x48(%rsp),%sil
jne    1270 <RB_GS_OmpLoopV4+0x170>
and    %bl,%dil
jne    1270 <RB_GS_OmpLoopV4+0x170>
and    %cl,%r13b
jne    1270 <RB_GS_OmpLoopV4+0x170>
mov    -0x38(%rsp),%edi
mov    -0x8(%rsp),%esi
mov    -0x70(%rsp),%r13
and    $0xfffffffffffffffc,%r13
cmp    %rbp,%r15
cmovg  %r15,%rbp
lea    (%r9,%r13,1),%rdx
mov    -0x68(%rsp),%r12
add    %r12,%rbp
and    $0xfffffffffffffffc,%rbp
xor    %r15d,%r15d
nopw   0x0(%rax,%rax,1)
mov    %r15,%rcx
or     %r9,%rcx
movupd (%rax,%rcx,8),%xmm1
movupd 0x10(%rax,%rcx,8),%xmm6
movupd (%r11,%rcx,8),%xmm7
addpd  %xmm1,%xmm7
movupd 0x10(%r11,%rcx,8),%xmm1
addpd  %xmm6,%xmm1
mov    %rcx,%rbx
sub    %rdi,%rbx
movupd (%r10,%rbx,8),%xmm6
addpd  %xmm7,%xmm6
movupd 0x10(%r10,%rbx,8),%xmm7
addpd  %xmm1,%xmm7
lea    (%rcx,%rsi,1),%rbx
movupd (%r10,%rbx,8),%xmm1
addpd  %xmm6,%xmm1
movupd 0x10(%r10,%rbx,8),%xmm6
addpd  %xmm7,%xmm6
mulpd  %xmm3,%xmm1
mulpd  %xmm3,%xmm6
movupd %xmm1,(%r8,%rcx,8)
movupd %xmm6,0x10(%r8,%rcx,8)
add    $0x4,%r15
cmp    %r15,%rbp
jne    13c0 <RB_GS_OmpLoopV4+0x2c0>
cmp    %r13,-0x70(%rsp)
mov    -0x78(%rsp),%r9
mov    -0x80(%rsp),%r13
mov    -0x60(%rsp),%esi
je     11b0 <RB_GS_OmpLoopV4+0xb0>
jmp    1286 <RB_GS_OmpLoopV4+0x186>
cs nopw 0x0(%rax,%rax,1)
xorpd  %xmm1,%xmm1
xorpd  %xmm7,%xmm7
mov    (%rsp),%rdx
cmp    $0x3,%edx
mov    -0x2c(%rsp),%r8d
mov    -0x28(%rsp),%r12d
jl     1940 <RB_GS_OmpLoopV4+0x840>
mov    $0x1,%r15d
xor    %r12d,%r12d
jmp    149f <RB_GS_OmpLoopV4+0x39f>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r12b
cmp    -0x10(%rsp),%r15
je     1770 <RB_GS_OmpLoopV4+0x670>
mov    %r15,%rbx
mov    %ebx,%edx
and    $0x1,%edx
movzbl %r12b,%eax
mov    %eax,%r12d
and    $0x1,%r12d
not    %al
movzbl %al,%esi
and    $0x1,%esi
mov    %r9,%rdi
sub    %rsi,%rdi
lea    0x1(%r12),%r14
cmp    %r14,%rdi
mov    %r14,%r11
cmovg  %rdi,%r11
cmovle %r14,%rdi
add    $0x1,%r15
mov    %r15d,%r8d
and    $0x1,%r8d
mov    %r9d,%eax
sub    %edx,%eax
cmp    %eax,%r8d
jge    1490 <RB_GS_OmpLoopV4+0x390>
mov    %eax,-0x58(%rsp)
mov    %r12,%r10
neg    %r10
sub    %r12,%r11
mov    %r10,-0x80(%rsp)
and    $0x1,%r10d
mov    -0x20(%rsp),%rax
mov    -0x8(%rax,%rbx,8),%rbp
mov    (%rax,%rbx,8),%r13
mov    (%rax,%r15,8),%rcx
mov    -0x18(%rsp),%rax
mov    (%rax,%rbx,8),%rbx
cmp    $0x4,%r11
jae    1580 <RB_GS_OmpLoopV4+0x480>
mov    %r10,%rdi
mov    -0x58(%rsp),%eax
mov    -0x80(%rsp),%r14
cltq
lea    0x0(,%rdx,8),%rsi
add    %r13,%rsi
lea    0x0(,%r14,8),%rdx
add    %r13,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  0x0(%rbp,%rdi,8),%xmm1
addsd  (%rcx,%rdi,8),%xmm1
addsd  (%rdx,%rdi,8),%xmm1
addsd  (%rsi,%rdi,8),%xmm1
mulsd  %xmm2,%xmm1
movsd  %xmm1,(%rbx,%rdi,8)
add    $0x1,%rdi
cmp    %rax,%rdi
jl     1550 <RB_GS_OmpLoopV4+0x450>
jmp    1490 <RB_GS_OmpLoopV4+0x390>
nopl   0x0(%rax)
mov    %rdx,-0x68(%rsp)
mov    %r15,-0x60(%rsp)
lea    (%rdi,%rsi,1),%rax
mov    %rax,-0x70(%rsp)
add    %r12,%rsi
mov    %rdi,%rax
sub    %r12,%rax
lea    (%rbx,%r12,8),%r9
lea    (%rbx,%rdi,8),%rdx
mov    %rdx,-0x48(%rsp)
lea    0x0(,%r12,8),%rdx
add    %rbp,%rdx
mov    %rdx,-0x40(%rsp)
lea    0x0(%rbp,%rdi,8),%rdx
lea    (%rcx,%r12,8),%r15
mov    %r15,-0x50(%rsp)
lea    (%rcx,%rdi,8),%rdi
lea    0x0(%r13,%rsi,8),%rsi
mov    %rsi,-0x38(%rsp)
mov    -0x70(%rsp),%rsi
lea    0x0(,%rsi,8),%rsi
add    %r13,%rsi
lea    0x0(,%rax,8),%rax
add    %r13,%rax
mov    %rax,-0x8(%rsp)
cmp    %rdx,%r9
setb   -0x70(%rsp)
mov    -0x48(%rsp),%rdx
cmp    %rdx,-0x40(%rsp)
setb   %r15b
cmp    %rdi,%r9
setb   %al
cmp    %rdx,-0x50(%rsp)
setb   -0x50(%rsp)
cmp    %rsi,%r9
setb   %sil
cmp    %rdx,-0x38(%rsp)
setb   -0x38(%rsp)
cmp    -0x8(%rsp),%r9
setb   %dil
cmp    %rdx,%r13
setb   %dl
test   %r15b,-0x70(%rsp)
jne    174a <RB_GS_OmpLoopV4+0x64a>
mov    %dl,-0x70(%rsp)
and    -0x50(%rsp),%al
mov    -0x78(%rsp),%r9
mov    -0x60(%rsp),%r15
mov    -0x68(%rsp),%rdx
jne    151f <RB_GS_OmpLoopV4+0x41f>
and    -0x38(%rsp),%sil
jne    151f <RB_GS_OmpLoopV4+0x41f>
and    -0x70(%rsp),%dil
jne    151f <RB_GS_OmpLoopV4+0x41f>
sub    %rdx,%r9
mov    %r8d,%r15d
mov    %edx,%r8d
mov    %r11,%rax
and    $0xfffffffffffffffc,%rax
cmp    %r9,%r14
cmovg  %r14,%r9
mov    %rax,-0x70(%rsp)
lea    (%rax,%r10,1),%rdi
mov    -0x80(%rsp),%r14
add    %r14,%r9
and    $0xfffffffffffffffc,%r9
xor    %esi,%esi
nopw   0x0(%rax,%rax,1)
mov    %rsi,%rax
or     %r10,%rax
movupd 0x0(%rbp,%rax,8),%xmm1
movupd 0x10(%rbp,%rax,8),%xmm6
movupd (%rcx,%rax,8),%xmm7
addpd  %xmm1,%xmm7
movupd 0x10(%rcx,%rax,8),%xmm1
addpd  %xmm6,%xmm1
mov    %rax,%rdx
sub    %r15,%rdx
movupd 0x0(%r13,%rdx,8),%xmm6
addpd  %xmm7,%xmm6
movupd 0x10(%r13,%rdx,8),%xmm7
addpd  %xmm1,%xmm7
lea    (%rax,%r8,1),%rdx
movupd 0x0(%r13,%rdx,8),%xmm1
addpd  %xmm6,%xmm1
movupd 0x10(%r13,%rdx,8),%xmm6
addpd  %xmm7,%xmm6
mulpd  %xmm3,%xmm1
mulpd  %xmm3,%xmm6
movupd %xmm1,(%rbx,%rax,8)
movupd %xmm6,0x10(%rbx,%rax,8)
add    $0x4,%rsi
cmp    %rsi,%r9
jne    16b0 <RB_GS_OmpLoopV4+0x5b0>
cmp    -0x70(%rsp),%r11
mov    -0x78(%rsp),%r9
mov    -0x60(%rsp),%r15
mov    -0x68(%rsp),%rdx
mov    -0x58(%rsp),%eax
je     1490 <RB_GS_OmpLoopV4+0x390>
jmp    152b <RB_GS_OmpLoopV4+0x42b>
mov    %r10,%rdi
mov    -0x78(%rsp),%r9
mov    -0x60(%rsp),%r15
mov    -0x68(%rsp),%rdx
jmp    1522 <RB_GS_OmpLoopV4+0x422>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorpd  %xmm1,%xmm1
xorpd  %xmm7,%xmm7
mov    (%rsp),%rdx
cmp    $0x3,%edx
mov    -0x2c(%rsp),%r8d
mov    -0x28(%rsp),%r12d
jl     1940 <RB_GS_OmpLoopV4+0x840>
mov    $0x1,%r10d
xorpd  %xmm1,%xmm1
mov    $0x1,%r11d
xor    %r9d,%r9d
jmp    17c3 <RB_GS_OmpLoopV4+0x6c3>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r10d
add    $0x1,%r9b
cmp    -0x10(%rsp),%r11
je     1865 <RB_GS_OmpLoopV4+0x765>
mov    %r11,%r15
mov    %r15d,%edi
and    $0x1,%edi
add    $0x1,%r11
mov    %r11d,%esi
and    $0x1,%esi
mov    -0x24(%rsp),%eax
sub    %esi,%eax
cmp    %eax,%edi
jge    17b0 <RB_GS_OmpLoopV4+0x6b0>
mov    %r10d,%edi
and    $0x1,%edi
movzbl %r9b,%r14d
and    $0x1,%r14d
add    %rdi,%r14
mov    %r10d,%edi
and    $0x1,%edi
mov    -0x18(%rsp),%rsi
mov    -0x8(%rsi,%r15,8),%rbp
mov    (%rsi,%r15,8),%rbx
mov    (%rsi,%r11,8),%rsi
mov    -0x20(%rsp),%rcx
mov    (%rcx,%r15,8),%rcx
cltq
movapd %xmm1,%xmm6
nopl   0x0(%rax,%rax,1)
movsd  0x0(%rbp,%rdi,8),%xmm7
addsd  (%rsi,%rdi,8),%xmm7
addsd  (%rbx),%xmm7
addsd  (%rbx,%r14,8),%xmm7
mulsd  %xmm2,%xmm7
movapd %xmm7,%xmm1
subsd  (%rcx,%rdi,8),%xmm1
andpd  %xmm4,%xmm1
maxsd  %xmm6,%xmm1
movsd  %xmm7,(%rcx,%rdi,8)
add    $0x1,%rdi
add    $0x8,%rbx
movapd %xmm1,%xmm6
cmp    %rax,%rdi
jl     1820 <RB_GS_OmpLoopV4+0x720>
jmp    17b0 <RB_GS_OmpLoopV4+0x6b0>
xorpd  %xmm7,%xmm7
cmp    $0x3,%edx
jl     1936 <RB_GS_OmpLoopV4+0x836>
xorpd  %xmm7,%xmm7
mov    $0x1,%r10d
xor    %r9d,%r9d
jmp    189f <RB_GS_OmpLoopV4+0x79f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r9b
cmp    -0x10(%rsp),%r10
je     1936 <RB_GS_OmpLoopV4+0x836>
mov    %r10,%r14
mov    %r14d,%edi
and    $0x1,%edi
add    $0x1,%r10
mov    %r10d,%esi
and    $0x1,%esi
mov    -0x24(%rsp),%eax
sub    %edi,%eax
cmp    %eax,%esi
jge    1890 <RB_GS_OmpLoopV4+0x790>
movzbl %r9b,%esi
mov    %esi,%r11d
and    $0x1,%r11d
add    %rdi,%r11
and    $0x1,%esi
mov    -0x20(%rsp),%rcx
mov    -0x8(%rcx,%r14,8),%rdi
mov    (%rcx,%r14,8),%rbp
mov    (%rcx,%r10,8),%rbx
mov    -0x18(%rsp),%rcx
mov    (%rcx,%r14,8),%rcx
cltq
movapd %xmm7,%xmm5
xchg   %ax,%ax
movsd  (%rdi,%rsi,8),%xmm6
addsd  (%rbx,%rsi,8),%xmm6
addsd  0x0(%rbp),%xmm6
addsd  0x0(%rbp,%r11,8),%xmm6
mulsd  %xmm2,%xmm6
movapd %xmm6,%xmm7
subsd  (%rcx,%rsi,8),%xmm7
andpd  %xmm4,%xmm7
maxsd  %xmm5,%xmm7
movsd  %xmm6,(%rcx,%rsi,8)
add    $0x1,%rsi
add    $0x8,%rbp
movapd %xmm7,%xmm5
cmp    %rax,%rsi
jl     18f0 <RB_GS_OmpLoopV4+0x7f0>
jmp    1890 <RB_GS_OmpLoopV4+0x790>
mov    -0x78(%rsp),%r9
nopl   0x0(%rax,%rax,1)
maxsd  %xmm7,%xmm1
maxsd  %xmm8,%xmm1
add    $0x2,%r12d
ucomisd %xmm0,%xmm1
jb     195c <RB_GS_OmpLoopV4+0x85c>
cmp    %r8d,%r12d
jl     1180 <RB_GS_OmpLoopV4+0x80>
mov    0x50(%rsp),%rax
mov    %r12d,(%rax)
jmp    196a <RB_GS_OmpLoopV4+0x86a>
movapd %xmm0,%xmm1
movapd %xmm1,%xmm0
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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