#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 cg_update_inf(double *gold, double *gnew, double *d, long int n) {
  long int i, n5;
  double s, t;
  t = ((double)0);
  n5 = n % 5;
  if (d == 0) {
    for (i = 0; i < n5; i++) {
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
    }
    for (; i < n;) {
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
    }
  } else {
    for (i = 0; i < n5; i++) {
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
    }
    for (; i < n;) {
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
    }
  }
  return (t);
}


x86 assembly (clang, -O0):
<cg_update_inf>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    $0x5,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x30(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    13ce <cg_update_inf+0x2ce>
movq   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x30(%rbp),%rax
jge    11bd <cg_update_inf+0xbd>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xe7c(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    11a7 <cg_update_inf+0xa7>
movsd  -0x38(%rbp),%xmm0
movaps 0xe62(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    11ac <cg_update_inf+0xac>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1141 <cg_update_inf+0x41>
jmp    11c2 <cg_update_inf+0xc2>
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jge    13c9 <cg_update_inf+0x2c9>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xdfb(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1228 <cg_update_inf+0x128>
movsd  -0x38(%rbp),%xmm0
movaps 0xde1(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xd97(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    128c <cg_update_inf+0x18c>
movsd  -0x38(%rbp),%xmm0
movaps 0xd7d(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xd33(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    12f0 <cg_update_inf+0x1f0>
movsd  -0x38(%rbp),%xmm0
movaps 0xd19(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xccf(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1354 <cg_update_inf+0x254>
movsd  -0x38(%rbp),%xmm0
movaps 0xcb5(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xc6b(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    13b8 <cg_update_inf+0x2b8>
movsd  -0x38(%rbp),%xmm0
movaps 0xc51(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    11c2 <cg_update_inf+0xc2>
jmp    1759 <cg_update_inf+0x659>
movq   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x30(%rbp),%rax
jge    147b <cg_update_inf+0x37b>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xbbe(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1465 <cg_update_inf+0x365>
movsd  -0x38(%rbp),%xmm0
movaps 0xba4(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    146a <cg_update_inf+0x36a>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    13d6 <cg_update_inf+0x2d6>
jmp    1480 <cg_update_inf+0x380>
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jge    1754 <cg_update_inf+0x654>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xb14(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    150f <cg_update_inf+0x40f>
movsd  -0x38(%rbp),%xmm0
movaps 0xafa(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0xa87(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    159c <cg_update_inf+0x49c>
movsd  -0x38(%rbp),%xmm0
movaps 0xa6d(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0x9fa(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1629 <cg_update_inf+0x529>
movsd  -0x38(%rbp),%xmm0
movaps 0x9e0(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0x96d(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    16b6 <cg_update_inf+0x5b6>
movsd  -0x38(%rbp),%xmm0
movaps 0x953(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movaps 0x8e0(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1743 <cg_update_inf+0x643>
movsd  -0x38(%rbp),%xmm0
movaps 0x8c6(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1480 <cg_update_inf+0x380>
jmp    1759 <cg_update_inf+0x659>
movsd  -0x40(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<cg_update_inf>:
mov    %rcx,%r8
mov    %rdx,%rcx
movabs $0x6666666666666667,%rdx
66 66 66
mov    %r8,%rax
imul   %rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    %rdx
add    %rax,%rdx
lea    (%rdx,%rdx,4),%rdx
mov    %r8,%rax
sub    %rdx,%rax
test   %rcx,%rcx
je     120f <cg_update_inf+0x10f>
test   %rax,%rax
jle    1263 <cg_update_inf+0x163>
movsd  (%rsi),%xmm0
movsd  %xmm0,(%rdi)
movapd 0xeb1(%rip),%xmm1
xorpd  %xmm0,%xmm1
andpd  0xeb5(%rip),%xmm0
movlpd %xmm1,(%rcx)
xorpd  %xmm1,%xmm1
maxsd  %xmm1,%xmm0
cmp    $0x1,%rax
je     1269 <cg_update_inf+0x169>
movsd  0x8(%rsi),%xmm1
movsd  %xmm1,0x8(%rdi)
movapd 0xe7d(%rip),%xmm2
xorpd  %xmm1,%xmm2
movlpd %xmm2,0x8(%rcx)
andpd  0xe7c(%rip),%xmm1
maxsd  %xmm0,%xmm1
cmp    $0x2,%rax
je     1200 <cg_update_inf+0x100>
movsd  0x10(%rsi),%xmm0
movsd  %xmm0,0x10(%rdi)
movapd 0xe50(%rip),%xmm2
xorpd  %xmm0,%xmm2
movlpd %xmm2,0x10(%rcx)
andpd  0xe4f(%rip),%xmm0
maxsd  %xmm1,%xmm0
cmp    $0x3,%rax
je     1269 <cg_update_inf+0x169>
movsd  0x18(%rsi),%xmm1
movsd  %xmm1,0x18(%rdi)
movapd 0xe1f(%rip),%xmm2
xorpd  %xmm1,%xmm2
movlpd %xmm2,0x18(%rcx)
andpd  0xe1e(%rip),%xmm1
maxsd  %xmm0,%xmm1
cmp    $0x4,%rax
jne    144f <cg_update_inf+0x34f>
movapd %xmm1,%xmm0
cmp    %r8,%rax
jge    13cb <cg_update_inf+0x2cb>
jmp    1272 <cg_update_inf+0x172>
test   %rax,%rax
jle    1349 <cg_update_inf+0x249>
movsd  (%rsi),%xmm0
movsd  %xmm0,(%rdi)
andpd  0xde8(%rip),%xmm0
xorpd  %xmm1,%xmm1
maxsd  %xmm1,%xmm0
cmp    $0x1,%rax
je     134f <cg_update_inf+0x24f>
movsd  0x8(%rsi),%xmm1
movsd  %xmm1,0x8(%rdi)
andpd  0xdc4(%rip),%xmm1
maxsd  %xmm0,%xmm1
cmp    $0x2,%rax
jne    13cc <cg_update_inf+0x2cc>
movapd %xmm1,%xmm0
jmp    134f <cg_update_inf+0x24f>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
cmp    %r8,%rax
jge    13cb <cg_update_inf+0x2cb>
movapd 0xd86(%rip),%xmm1
movapd 0xd8e(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rsi,%rax,8),%xmm3
movsd  %xmm3,(%rdi,%rax,8)
movapd %xmm3,%xmm4
xorpd  %xmm1,%xmm4
movlpd %xmm4,(%rcx,%rax,8)
andpd  %xmm2,%xmm3
maxsd  %xmm0,%xmm3
movsd  0x8(%rsi,%rax,8),%xmm0
movsd  %xmm0,0x8(%rdi,%rax,8)
movapd %xmm0,%xmm4
xorpd  %xmm1,%xmm4
movlpd %xmm4,0x8(%rcx,%rax,8)
andpd  %xmm2,%xmm0
maxsd  %xmm3,%xmm0
movsd  0x10(%rsi,%rax,8),%xmm3
movsd  %xmm3,0x10(%rdi,%rax,8)
movapd %xmm3,%xmm4
xorpd  %xmm1,%xmm4
movlpd %xmm4,0x10(%rcx,%rax,8)
andpd  %xmm2,%xmm3
maxsd  %xmm0,%xmm3
movsd  0x18(%rsi,%rax,8),%xmm4
movsd  %xmm4,0x18(%rdi,%rax,8)
movapd %xmm4,%xmm0
xorpd  %xmm1,%xmm0
movlpd %xmm0,0x18(%rcx,%rax,8)
andpd  %xmm2,%xmm4
maxsd  %xmm3,%xmm4
movsd  0x20(%rsi,%rax,8),%xmm0
movsd  %xmm0,0x20(%rdi,%rax,8)
movapd %xmm0,%xmm3
xorpd  %xmm1,%xmm3
movlpd %xmm3,0x20(%rcx,%rax,8)
andpd  %xmm2,%xmm0
maxsd  %xmm4,%xmm0
add    $0x5,%rax
cmp    %r8,%rax
jl     1290 <cg_update_inf+0x190>
jmp    13cb <cg_update_inf+0x2cb>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
cmp    %r8,%rax
jge    13cb <cg_update_inf+0x2cb>
movapd 0xcb4(%rip),%xmm1
nopl   0x0(%rax)
movsd  (%rsi,%rax,8),%xmm2
movsd  %xmm2,(%rdi,%rax,8)
andpd  %xmm1,%xmm2
maxsd  %xmm0,%xmm2
movsd  0x8(%rsi,%rax,8),%xmm0
movsd  %xmm0,0x8(%rdi,%rax,8)
andpd  %xmm1,%xmm0
maxsd  %xmm2,%xmm0
movsd  0x10(%rsi,%rax,8),%xmm2
movsd  %xmm2,0x10(%rdi,%rax,8)
andpd  %xmm1,%xmm2
maxsd  %xmm0,%xmm2
movsd  0x18(%rsi,%rax,8),%xmm3
movsd  %xmm3,0x18(%rdi,%rax,8)
andpd  %xmm1,%xmm3
maxsd  %xmm2,%xmm3
movsd  0x20(%rsi,%rax,8),%xmm0
movsd  %xmm0,0x20(%rdi,%rax,8)
andpd  %xmm1,%xmm0
maxsd  %xmm3,%xmm0
add    $0x5,%rax
cmp    %r8,%rax
jl     1360 <cg_update_inf+0x260>
ret
movsd  0x10(%rsi),%xmm0
movsd  %xmm0,0x10(%rdi)
andpd  0xc32(%rip),%xmm0
maxsd  %xmm1,%xmm0
cmp    $0x3,%rax
je     134f <cg_update_inf+0x24f>
movsd  0x18(%rsi),%xmm1
movsd  %xmm1,0x18(%rdi)
andpd  0xc12(%rip),%xmm1
maxsd  %xmm0,%xmm1
cmp    $0x4,%rax
je     125a <cg_update_inf+0x15a>
movsd  0x20(%rsi),%xmm0
movsd  %xmm0,0x20(%rdi)
movapd 0xbf2(%rip),%xmm2
andpd  %xmm2,%xmm0
maxsd  %xmm1,%xmm0
movsd  0x28(%rsi),%xmm1
movsd  %xmm1,0x28(%rdi)
andpd  %xmm2,%xmm1
maxsd  %xmm0,%xmm1
movsd  0x30(%rsi),%xmm0
movsd  %xmm0,0x30(%rdi)
andpd  %xmm2,%xmm0
maxsd  %xmm1,%xmm0
jmp    134f <cg_update_inf+0x24f>
movsd  0x20(%rsi),%xmm0
movsd  %xmm0,0x20(%rdi)
movapd 0xb9f(%rip),%xmm2
movapd %xmm0,%xmm3
xorpd  %xmm2,%xmm3
movlpd %xmm3,0x20(%rcx)
movapd 0xb9a(%rip),%xmm3
andpd  %xmm3,%xmm0
maxsd  %xmm1,%xmm0
movsd  0x28(%rsi),%xmm1
movsd  %xmm1,0x28(%rdi)
movapd %xmm1,%xmm4
xorpd  %xmm2,%xmm4
movlpd %xmm4,0x28(%rcx)
andpd  %xmm3,%xmm1
maxsd  %xmm0,%xmm1
movsd  0x30(%rsi),%xmm0
movsd  %xmm0,0x30(%rdi)
xorpd  %xmm0,%xmm2
movlpd %xmm2,0x30(%rcx)
andpd  %xmm3,%xmm0
maxsd  %xmm1,%xmm0
cmp    %r8,%rax
jge    13cb <cg_update_inf+0x2cb>
jmp    1272 <cg_update_inf+0x172>

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

LLVM IR (-O2):
define double @cg_update_inf(double* nocapture writeonly %0, double* nocapture %1, double* writeonly %2, i64 %3) {
%5 = srem i64 %3, 5
%6 = icmp eq double* %2, null
%7 = icmp sgt i64 %5, 0
br i1 %6, label %9, label %8
8: ; preds = %4
br i1 %7, label %106, label %102
9: ; preds = %4
br i1 %7, label %14, label %10
10: ; preds = %14, %20, %28, %36, %44, %9
%11 = phi i64 [ 0, %9 ], [ %5, %44 ], [ %5, %36 ], [ %5, %28 ], [ %5, %20 ], [ %5, %14 ]
%12 = phi double [ 0.000000e+00, %9 ], [ %18, %14 ], [ %26, %20 ], [ %34, %28 ], [ %42, %36 ], [ %62, %44 ]
%13 = icmp slt i64 %11, %3
br i1 %13, label %63, label %217
14: ; preds = %9
%15 = load double, double* %1
store double %15, double* %0
%16 = tail call double @llvm.fabs.f64(double %15)
%17 = fcmp ogt double %16, 0.000000e+00
%18 = select i1 %17, double %16, double 0.000000e+00
%19 = icmp eq i64 %5, 1
br i1 %19, label %10, label %20
20: ; preds = %14
%21 = getelementptr inbounds double, double* %1, i64 1
%22 = load double, double* %21
%23 = getelementptr inbounds double, double* %0, i64 1
store double %22, double* %23
%24 = tail call double @llvm.fabs.f64(double %22)
%25 = fcmp olt double %18, %24
%26 = select i1 %25, double %24, double %18
%27 = icmp eq i64 %5, 2
br i1 %27, label %10, label %28
28: ; preds = %20
%29 = getelementptr inbounds double, double* %1, i64 2
%30 = load double, double* %29
%31 = getelementptr inbounds double, double* %0, i64 2
store double %30, double* %31
%32 = tail call double @llvm.fabs.f64(double %30)
%33 = fcmp olt double %26, %32
%34 = select i1 %33, double %32, double %26
%35 = icmp eq i64 %5, 3
br i1 %35, label %10, label %36
36: ; preds = %28
%37 = getelementptr inbounds double, double* %1, i64 3
%38 = load double, double* %37
%39 = getelementptr inbounds double, double* %0, i64 3
store double %38, double* %39
%40 = tail call double @llvm.fabs.f64(double %38)
%41 = fcmp olt double %34, %40
%42 = select i1 %41, double %40, double %34
%43 = icmp eq i64 %5, 4
br i1 %43, label %10, label %44
44: ; preds = %36
%45 = getelementptr inbounds double, double* %1, i64 4
%46 = load double, double* %45
%47 = getelementptr inbounds double, double* %0, i64 4
store double %46, double* %47
%48 = tail call double @llvm.fabs.f64(double %46)
%49 = fcmp olt double %42, %48
%50 = select i1 %49, double %48, double %42
%51 = getelementptr inbounds double, double* %1, i64 5
%52 = load double, double* %51
%53 = getelementptr inbounds double, double* %0, i64 5
store double %52, double* %53
%54 = tail call double @llvm.fabs.f64(double %52)
%55 = fcmp olt double %50, %54
%56 = select i1 %55, double %54, double %50
%57 = getelementptr inbounds double, double* %1, i64 6
%58 = load double, double* %57
%59 = getelementptr inbounds double, double* %0, i64 6
store double %58, double* %59
%60 = tail call double @llvm.fabs.f64(double %58)
%61 = fcmp olt double %56, %60
%62 = select i1 %61, double %60, double %56
br label %10
63: ; preds = %10, %63
%64 = phi double [ %99, %63 ], [ %12, %10 ]
%65 = phi i64 [ %100, %63 ], [ %11, %10 ]
%66 = getelementptr inbounds double, double* %1, i64 %65
%67 = load double, double* %66
%68 = getelementptr inbounds double, double* %0, i64 %65
store double %67, double* %68
%69 = tail call double @llvm.fabs.f64(double %67)
%70 = fcmp olt double %64, %69
%71 = select i1 %70, double %69, double %64
%72 = add nuw nsw i64 %65, 1
%73 = getelementptr inbounds double, double* %1, i64 %72
%74 = load double, double* %73
%75 = getelementptr inbounds double, double* %0, i64 %72
store double %74, double* %75
%76 = tail call double @llvm.fabs.f64(double %74)
%77 = fcmp olt double %71, %76
%78 = select i1 %77, double %76, double %71
%79 = add nuw nsw i64 %65, 2
%80 = getelementptr inbounds double, double* %1, i64 %79
%81 = load double, double* %80
%82 = getelementptr inbounds double, double* %0, i64 %79
store double %81, double* %82
%83 = tail call double @llvm.fabs.f64(double %81)
%84 = fcmp olt double %78, %83
%85 = select i1 %84, double %83, double %78
%86 = add nuw nsw i64 %65, 3
%87 = getelementptr inbounds double, double* %1, i64 %86
%88 = load double, double* %87
%89 = getelementptr inbounds double, double* %0, i64 %86
store double %88, double* %89
%90 = tail call double @llvm.fabs.f64(double %88)
%91 = fcmp olt double %85, %90
%92 = select i1 %91, double %90, double %85
%93 = add nuw nsw i64 %65, 4
%94 = getelementptr inbounds double, double* %1, i64 %93
%95 = load double, double* %94
%96 = getelementptr inbounds double, double* %0, i64 %93
store double %95, double* %96
%97 = tail call double @llvm.fabs.f64(double %95)
%98 = fcmp olt double %92, %97
%99 = select i1 %98, double %97, double %92
%100 = add nuw nsw i64 %65, 5
%101 = icmp slt i64 %100, %3
br i1 %101, label %63, label %217
102: ; preds = %106, %113, %123, %133, %143, %8
%103 = phi i64 [ 0, %8 ], [ %5, %143 ], [ %5, %133 ], [ %5, %123 ], [ %5, %113 ], [ %5, %106 ]
%104 = phi double [ 0.000000e+00, %8 ], [ %111, %106 ], [ %121, %113 ], [ %131, %123 ], [ %141, %133 ], [ %167, %143 ]
%105 = icmp slt i64 %103, %3
br i1 %105, label %168, label %217
106: ; preds = %8
%107 = load double, double* %1
store double %107, double* %0
%108 = fneg double %107
store double %108, double* %2
%109 = tail call double @llvm.fabs.f64(double %107)
%110 = fcmp ogt double %109, 0.000000e+00
%111 = select i1 %110, double %109, double 0.000000e+00
%112 = icmp eq i64 %5, 1
br i1 %112, label %102, label %113
113: ; preds = %106
%114 = getelementptr inbounds double, double* %1, i64 1
%115 = load double, double* %114
%116 = getelementptr inbounds double, double* %0, i64 1
store double %115, double* %116
%117 = fneg double %115
%118 = getelementptr inbounds double, double* %2, i64 1
store double %117, double* %118
%119 = tail call double @llvm.fabs.f64(double %115)
%120 = fcmp olt double %111, %119
%121 = select i1 %120, double %119, double %111
%122 = icmp eq i64 %5, 2
br i1 %122, label %102, label %123
123: ; preds = %113
%124 = getelementptr inbounds double, double* %1, i64 2
%125 = load double, double* %124
%126 = getelementptr inbounds double, double* %0, i64 2
store double %125, double* %126
%127 = fneg double %125
%128 = getelementptr inbounds double, double* %2, i64 2
store double %127, double* %128
%129 = tail call double @llvm.fabs.f64(double %125)
%130 = fcmp olt double %121, %129
%131 = select i1 %130, double %129, double %121
%132 = icmp eq i64 %5, 3
br i1 %132, label %102, label %133
133: ; preds = %123
%134 = getelementptr inbounds double, double* %1, i64 3
%135 = load double, double* %134
%136 = getelementptr inbounds double, double* %0, i64 3
store double %135, double* %136
%137 = fneg double %135
%138 = getelementptr inbounds double, double* %2, i64 3
store double %137, double* %138
%139 = tail call double @llvm.fabs.f64(double %135)
%140 = fcmp olt double %131, %139
%141 = select i1 %140, double %139, double %131
%142 = icmp eq i64 %5, 4
br i1 %142, label %102, label %143
143: ; preds = %133
%144 = getelementptr inbounds double, double* %1, i64 4
%145 = load double, double* %144
%146 = getelementptr inbounds double, double* %0, i64 4
store double %145, double* %146
%147 = fneg double %145
%148 = getelementptr inbounds double, double* %2, i64 4
store double %147, double* %148
%149 = tail call double @llvm.fabs.f64(double %145)
%150 = fcmp olt double %141, %149
%151 = select i1 %150, double %149, double %141
%152 = getelementptr inbounds double, double* %1, i64 5
%153 = load double, double* %152
%154 = getelementptr inbounds double, double* %0, i64 5
store double %153, double* %154
%155 = fneg double %153
%156 = getelementptr inbounds double, double* %2, i64 5
store double %155, double* %156
%157 = tail call double @llvm.fabs.f64(double %153)
%158 = fcmp olt double %151, %157
%159 = select i1 %158, double %157, double %151
%160 = getelementptr inbounds double, double* %1, i64 6
%161 = load double, double* %160
%162 = getelementptr inbounds double, double* %0, i64 6
store double %161, double* %162
%163 = fneg double %161
%164 = getelementptr inbounds double, double* %2, i64 6
store double %163, double* %164
%165 = tail call double @llvm.fabs.f64(double %161)
%166 = fcmp olt double %159, %165
%167 = select i1 %166, double %165, double %159
br label %102
168: ; preds = %102, %168
%169 = phi double [ %214, %168 ], [ %104, %102 ]
%170 = phi i64 [ %215, %168 ], [ %103, %102 ]
%171 = getelementptr inbounds double, double* %1, i64 %170
%172 = load double, double* %171
%173 = getelementptr inbounds double, double* %0, i64 %170
store double %172, double* %173
%174 = fneg double %172
%175 = getelementptr inbounds double, double* %2, i64 %170
store double %174, double* %175
%176 = tail call double @llvm.fabs.f64(double %172)
%177 = fcmp olt double %169, %176
%178 = select i1 %177, double %176, double %169
%179 = add nuw nsw i64 %170, 1
%180 = getelementptr inbounds double, double* %1, i64 %179
%181 = load double, double* %180
%182 = getelementptr inbounds double, double* %0, i64 %179
store double %181, double* %182
%183 = fneg double %181
%184 = getelementptr inbounds double, double* %2, i64 %179
store double %183, double* %184
%185 = tail call double @llvm.fabs.f64(double %181)
%186 = fcmp olt double %178, %185
%187 = select i1 %186, double %185, double %178
%188 = add nuw nsw i64 %170, 2
%189 = getelementptr inbounds double, double* %1, i64 %188
%190 = load double, double* %189
%191 = getelementptr inbounds double, double* %0, i64 %188
store double %190, double* %191
%192 = fneg double %190
%193 = getelementptr inbounds double, double* %2, i64 %188
store double %192, double* %193
%194 = tail call double @llvm.fabs.f64(double %190)
%195 = fcmp olt double %187, %194
%196 = select i1 %195, double %194, double %187
%197 = add nuw nsw i64 %170, 3
%198 = getelementptr inbounds double, double* %1, i64 %197
%199 = load double, double* %198
%200 = getelementptr inbounds double, double* %0, i64 %197
store double %199, double* %200
%201 = fneg double %199
%202 = getelementptr inbounds double, double* %2, i64 %197
store double %201, double* %202
%203 = tail call double @llvm.fabs.f64(double %199)
%204 = fcmp olt double %196, %203
%205 = select i1 %204, double %203, double %196
%206 = add nuw nsw i64 %170, 4
%207 = getelementptr inbounds double, double* %1, i64 %206
%208 = load double, double* %207
%209 = getelementptr inbounds double, double* %0, i64 %206
store double %208, double* %209
%210 = fneg double %208
%211 = getelementptr inbounds double, double* %2, i64 %206
store double %210, double* %211
%212 = tail call double @llvm.fabs.f64(double %208)
%213 = fcmp olt double %205, %212
%214 = select i1 %213, double %212, double %205
%215 = add nuw nsw i64 %170, 5
%216 = icmp slt i64 %215, %3
br i1 %216, label %168, label %217
217: ; preds = %168, %63, %102, %10
%218 = phi double [ %12, %10 ], [ %104, %102 ], [ %99, %63 ], [ %214, %168 ]
ret double %218
}