void mgh_umipt(int n, double x[], int prob, double factor) {
  double h;
  int j;
  switch (prob) {
  case 1:
    x[0] = -1.0;
    x[1] = 0.0;
    x[2] = 0.0;
    break;
  case 2:
    x[0] = 1.0;
    x[1] = 2.0;
    x[2] = 1.0;
    x[3] = 1.0;
    x[4] = 1.0;
    x[5] = 1.0;
    break;
  case 3:
    x[0] = 0.4;
    x[1] = 1.0;
    x[2] = 0.0;
    break;
  case 4:
    x[0] = 0.0;
    x[1] = 1.0;
    break;
  case 5:
    x[0] = 0.0;
    x[1] = 10.0;
    x[2] = 20.0;
    break;
  case 6:
    h = 1.0 / ((double)n);
    for (j = 0; j < n; ++j) {
      x[j] = 1.0 - ((double)(j + 1)) * h;
    }
    break;
  case 7:
    for (j = 0; j < n; ++j) {
      x[j] = 0.0;
    }
    break;
  case 8:
    for (j = 0; j < n; ++j) {
      x[j] = ((double)(j + 1));
    }
    break;
  case 9:
    for (j = 0; j < n; ++j) {
      x[j] = 0.5;
    }
    break;
  case 10:
    x[0] = 1.0;
    x[1] = 1.0;
    break;
  case 11:
    x[0] = 25.0;
    x[1] = 5.0;
    x[2] = -5.0;
    x[3] = -1.0;
    break;
  case 12:
    x[0] = 5.0;
    x[1] = 2.5;
    x[2] = 0.15;
    break;
  case 13:
    h = 1.0 / ((double)n);
    for (j = 0; j < n; ++j) {
      x[j] = h;
    }
    break;
  case 14:
    for (j = 0; j < n; j += 2) {
      x[j] = -1.2;
      x[j + 1] = 1.0;
    }
    break;
  case 15:
    for (j = 0; j < n; j += 4) {
      x[j] = 3.0;
      x[j + 1] = -1.0;
      x[j + 2] = 0.0;
      x[j + 3] = 1.0;
    }
    break;
  case 16:
    x[0] = 1.0;
    x[1] = 1.0;
    break;
  case 17:
    x[0] = -3.0;
    x[1] = -1.0;
    x[2] = -3.0;
    x[3] = -1.0;
    break;
  case 18:
    h = 1.0 / ((double)(n + 1));
    for (j = 0; j < n; ++j) {
      x[j] = ((double)(j + 1)) * h;
    }
  }
  if (factor != 1.0) {
    if (prob == 7) {
      for (j = 0; j < n; ++j) {
        x[j] = factor;
      }
    } else {
      for (j = 0; j < n; ++j) {
        x[j] *= factor;
      }
    }
  }
}


x86 assembly (clang, -O0):
<mgh_umipt>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x11,%eax
ja     161c <mgh_umipt+0x51c>
mov    -0x38(%rbp),%rax
lea    0xf45(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
movsd  0xec0(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
movsd  0xe8b(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xeeb(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0xe6a(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0xe59(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x10(%rbp),%rax
movsd  0xe48(%rip),%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x10(%rbp),%rax
movsd  0xe37(%rip),%xmm0
movsd  %xmm0,0x28(%rax)
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
movsd  0xe89(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xe11(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xde4(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xe23(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0xe0a(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
jmp    161c <mgh_umipt+0x51c>
cvtsi2sdl -0x4(%rbp),%xmm1
movsd  0xd9b(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    12d2 <mgh_umipt+0x1d2>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x28(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xd4d(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1275 <mgh_umipt+0x175>
jmp    161c <mgh_umipt+0x51c>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1308 <mgh_umipt+0x208>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12de <mgh_umipt+0x1de>
jmp    161c <mgh_umipt+0x51c>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1345 <mgh_umipt+0x245>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1314 <mgh_umipt+0x214>
jmp    161c <mgh_umipt+0x51c>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1380 <mgh_umipt+0x280>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  0xce3(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1351 <mgh_umipt+0x251>
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
movsd  0xc6f(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xc5f(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
movsd  0xc91(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xc71(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0xc68(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0xc1f(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
movsd  0xc39(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xc21(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0xc08(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
jmp    161c <mgh_umipt+0x51c>
cvtsi2sdl -0x4(%rbp),%xmm1
movsd  0xbc9(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1473 <mgh_umipt+0x373>
movsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1447 <mgh_umipt+0x347>
jmp    161c <mgh_umipt+0x51c>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    14c8 <mgh_umipt+0x3c8>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  0xb85(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  0xb4b(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    147f <mgh_umipt+0x37f>
jmp    161c <mgh_umipt+0x51c>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    154c <mgh_umipt+0x44c>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  0xb28(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  0xafe(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  0xac7(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    14d4 <mgh_umipt+0x3d4>
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
movsd  0xaa3(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xa93(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
jmp    161c <mgh_umipt+0x51c>
mov    -0x10(%rbp),%rax
movsd  0xa8d(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xa75(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0xa6c(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0xa53(%rip),%xmm0
movsd  %xmm0,0x18(%rax)
jmp    161c <mgh_umipt+0x51c>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  0xa2f(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1617 <mgh_umipt+0x517>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    15e1 <mgh_umipt+0x4e1>
jmp    161c <mgh_umipt+0x51c>
movsd  -0x20(%rbp),%xmm0
movsd  0x9d7(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    163e <mgh_umipt+0x53e>
jp     163e <mgh_umipt+0x53e>
jmp    16c2 <mgh_umipt+0x5c2>
cmpl   $0x7,-0x14(%rbp)
jne    1680 <mgh_umipt+0x580>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    167b <mgh_umipt+0x57b>
movsd  -0x20(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    164f <mgh_umipt+0x54f>
jmp    16bd <mgh_umipt+0x5bd>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    16b8 <mgh_umipt+0x5b8>
movsd  -0x20(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1687 <mgh_umipt+0x587>
jmp    16bd <mgh_umipt+0x5bd>
jmp    16c2 <mgh_umipt+0x5c2>
pop    %rbp
ret

x86 assembly (clang, -O2):
<mgh_umipt>:
push   %r15
push   %r14
push   %rbx
sub    $0x10,%rsp
movdqa %xmm0,%xmm11
mov    %edx,%r15d
mov    %rsi,%rbx
mov    %edi,%r14d
lea    -0x1(%r15),%eax
cmp    $0x11,%eax
ja     1c3c <mgh_umipt+0xb2c>
lea    0xfb5(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movdqa 0xf14(%rip),%xmm0
movdqu %xmm0,(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
movabs $0xbff0000000000000,%rax
mov    %rax,(%rbx)
pxor   %xmm0,%xmm0
movdqu %xmm0,0x8(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
movaps 0xf69(%rip),%xmm0
movups %xmm0,(%rbx)
movdqa 0xede(%rip),%xmm0
movdqu %xmm0,0x10(%rbx)
movdqu %xmm0,0x20(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
movdqa 0xf37(%rip),%xmm0
movdqu %xmm0,(%rbx)
movq   $0x0,0x10(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
pxor   %xmm0,%xmm0
movhps 0xe4b(%rip),%xmm0
movups %xmm0,(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
pxor   %xmm0,%xmm0
movhps 0xe40(%rip),%xmm0
movups %xmm0,(%rbx)
movabs $0x4034000000000000,%rax
mov    %rax,0x10(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
test   %r14d,%r14d
jle    1c3c <mgh_umipt+0xb2c>
cvtsi2sd %r14d,%xmm2
movsd  0xe0b(%rip),%xmm8
movapd %xmm8,%xmm1
divsd  %xmm2,%xmm1
mov    %r14d,%eax
cmp    $0x4,%r14d
jae    1369 <mgh_umipt+0x259>
xor    %ecx,%ecx
jmp    1410 <mgh_umipt+0x300>
test   %r14d,%r14d
jle    1c3c <mgh_umipt+0xb2c>
mov    %r14d,%edx
shl    $0x3,%rdx
mov    %rbx,%rdi
xor    %esi,%esi
movdqa %xmm11,(%rsp)
call   1030 <memset@plt>
movdqa (%rsp),%xmm11
jmp    1c3c <mgh_umipt+0xb2c>
test   %r14d,%r14d
jle    1c3c <mgh_umipt+0xb2c>
mov    %r14d,%eax
cmp    $0x4,%r14d
jae    143a <mgh_umipt+0x32a>
xor    %ecx,%ecx
jmp    1bb0 <mgh_umipt+0xaa0>
test   %r14d,%r14d
jle    1c3c <mgh_umipt+0xb2c>
mov    %r14d,%eax
cmp    $0x4,%r14d
jae    14f2 <mgh_umipt+0x3e2>
xor    %ecx,%ecx
jmp    176d <mgh_umipt+0x65d>
movaps 0xe22(%rip),%xmm0
movups %xmm0,(%rbx)
movdqa 0xe27(%rip),%xmm0
movdqu %xmm0,0x10(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
movdqa 0xdf5(%rip),%xmm0
movdqu %xmm0,(%rbx)
movabs $0x3fc3333333333333,%rax
33 c3 3f
mov    %rax,0x10(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
test   %r14d,%r14d
jle    1c3c <mgh_umipt+0xb2c>
cvtsi2sd %r14d,%xmm1
movsd  0xd38(%rip),%xmm0
divsd  %xmm1,%xmm0
mov    %r14d,%eax
cmp    $0x4,%r14d
jae    151c <mgh_umipt+0x40c>
xor    %ecx,%ecx
jmp    1860 <mgh_umipt+0x750>
test   %r14d,%r14d
jle    1c3c <mgh_umipt+0xb2c>
mov    %r14d,%r9d
lea    -0x1(%r9),%r8
cmp    $0x6,%r8
jae    154e <mgh_umipt+0x43e>
xor    %ecx,%ecx
jmp    1969 <mgh_umipt+0x859>
test   %r14d,%r14d
jle    1c3c <mgh_umipt+0xb2c>
mov    %r14d,%r9d
lea    -0x1(%r9),%r8
cmp    $0xc,%r8
jae    1581 <mgh_umipt+0x471>
xor    %ecx,%ecx
jmp    1b22 <mgh_umipt+0xa12>
movdqa 0xd26(%rip),%xmm0
movdqu %xmm0,(%rbx)
movdqu %xmm0,0x10(%rbx)
jmp    1c3c <mgh_umipt+0xb2c>
test   %r14d,%r14d
jle    1c3c <mgh_umipt+0xb2c>
lea    0x1(%r14),%eax
cvtsi2sd %eax,%xmm1
movsd  0xcaf(%rip),%xmm0
divsd  %xmm1,%xmm0
mov    %r14d,%eax
cmp    $0x4,%r14d
jae    15bf <mgh_umipt+0x4af>
xor    %ecx,%ecx
jmp    1c20 <mgh_umipt+0xb10>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movapd %xmm1,%xmm2
unpcklpd %xmm1,%xmm2
lea    0x0(,%rax,8),%rdx
and    $0xffffffffffffffe0,%rdx
movdqa 0xc86(%rip),%xmm3
xor    %esi,%esi
pcmpeqd %xmm9,%xmm9
movdqa 0xc86(%rip),%xmm10
movapd 0xcbe(%rip),%xmm5
movdqa 0xc86(%rip),%xmm7
nopw   0x0(%rax,%rax,1)
pshufd $0xe8,%xmm3,%xmm4
movdqa %xmm4,%xmm0
psubd  %xmm9,%xmm0
cvtdq2pd %xmm0,%xmm0
paddd  %xmm10,%xmm4
cvtdq2pd %xmm4,%xmm4
mulpd  %xmm2,%xmm0
movapd %xmm5,%xmm6
subpd  %xmm0,%xmm6
mulpd  %xmm2,%xmm4
movapd %xmm5,%xmm0
subpd  %xmm4,%xmm0
movupd %xmm6,(%rbx,%rsi,1)
movupd %xmm0,0x10(%rbx,%rsi,1)
paddq  %xmm7,%xmm3
add    $0x20,%rsi
cmp    %rsi,%rdx
jne    13b0 <mgh_umipt+0x2a0>
cmp    %rax,%rcx
je     1c3c <mgh_umipt+0xb2c>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    0x1(%rcx),%rdx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm8,%xmm2
subsd  %xmm0,%xmm2
movsd  %xmm2,(%rbx,%rcx,8)
mov    %rdx,%rcx
cmp    %rdx,%rax
jne    1410 <mgh_umipt+0x300>
jmp    1c3c <mgh_umipt+0xb2c>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     1b65 <mgh_umipt+0xa55>
movabs $0x7ffffffffffffff8,%rdi
ff ff 7f
or     $0x6,%rdi
and    %rdx,%rdi
movdqa 0xba0(%rip),%xmm0
xor    %esi,%esi
pcmpeqd %xmm1,%xmm1
movdqa 0xba2(%rip),%xmm2
movdqa 0xbaa(%rip),%xmm3
movdqa 0xbb2(%rip),%xmm4
xchg   %ax,%ax
pshufd $0xe8,%xmm0,%xmm5
movdqa %xmm5,%xmm6
psubd  %xmm1,%xmm6
paddd  %xmm2,%xmm5
cvtdq2pd %xmm6,%xmm6
cvtdq2pd %xmm5,%xmm5
movups %xmm6,(%rbx,%rsi,8)
movups %xmm5,0x10(%rbx,%rsi,8)
movdqa %xmm0,%xmm5
paddq  %xmm3,%xmm5
pshufd $0xe8,%xmm5,%xmm5
movdqa %xmm5,%xmm6
psubd  %xmm1,%xmm6
cvtdq2pd %xmm6,%xmm6
paddd  %xmm2,%xmm5
cvtdq2pd %xmm5,%xmm5
movupd %xmm6,0x20(%rbx,%rsi,8)
movupd %xmm5,0x30(%rbx,%rsi,8)
add    $0x8,%rsi
paddq  %xmm4,%xmm0
add    $0xfffffffffffffffe,%rdi
jne    1490 <mgh_umipt+0x380>
jmp    1b6f <mgh_umipt+0xa5f>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x1c,%rdi
jae    1696 <mgh_umipt+0x586>
xor    %edi,%edi
jmp    1735 <mgh_umipt+0x625>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x1c,%rdi
jae    1792 <mgh_umipt+0x682>
xor    %edi,%edi
jmp    1825 <mgh_umipt+0x715>
shr    %r8
add    $0x1,%r8
mov    %r8,%rcx
and    $0xfffffffffffffffc,%rcx
lea    -0x4(%rcx),%rax
mov    %rax,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x3,%edx
cmp    $0xc,%rax
jae    1873 <mgh_umipt+0x763>
xor    %edi,%edi
jmp    1911 <mgh_umipt+0x801>
shr    $0x2,%r8
add    $0x1,%r8
movabs $0x7ffffffffffffff8,%rax
ff ff 7f
lea    0x4(%rax),%rcx
and    %r8,%rcx
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x3,%edx
cmp    $0xc,%rdi
jae    1997 <mgh_umipt+0x887>
xor    %edi,%edi
jmp    1aaf <mgh_umipt+0x99f>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rcx),%rdx
mov    %rdx,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
test   %rdx,%rdx
je     1bca <mgh_umipt+0xaba>
movabs $0x7ffffffffffffff8,%rdi
ff ff 7f
or     $0x6,%rdi
and    %rsi,%rdi
movdqa 0xa13(%rip),%xmm2
xor    %edx,%edx
pcmpeqd %xmm3,%xmm3
movdqa 0xa15(%rip),%xmm4
movdqa 0xa1c(%rip),%xmm8
movdqa 0xa23(%rip),%xmm9
nopl   (%rax)
pshufd $0xe8,%xmm2,%xmm7
movdqa %xmm7,%xmm5
psubd  %xmm3,%xmm5
paddd  %xmm4,%xmm7
cvtdq2pd %xmm5,%xmm5
cvtdq2pd %xmm7,%xmm7
mulpd  %xmm1,%xmm5
mulpd  %xmm1,%xmm7
movupd %xmm5,(%rbx,%rdx,8)
movdqa %xmm2,%xmm5
paddq  %xmm8,%xmm5
pshufd $0xe8,%xmm5,%xmm5
movdqa %xmm5,%xmm6
psubd  %xmm3,%xmm6
paddd  %xmm4,%xmm5
cvtdq2pd %xmm6,%xmm6
cvtdq2pd %xmm5,%xmm5
movupd %xmm7,0x10(%rbx,%rdx,8)
mulpd  %xmm1,%xmm6
mulpd  %xmm1,%xmm5
movupd %xmm6,0x20(%rbx,%rdx,8)
movupd %xmm5,0x30(%rbx,%rdx,8)
add    $0x8,%rdx
paddq  %xmm9,%xmm2
add    $0xfffffffffffffffe,%rdi
jne    1620 <mgh_umipt+0x510>
jmp    1bd4 <mgh_umipt+0xac4>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
movdqa 0xa1c(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqu %xmm0,(%rbx,%rdi,8)
movdqu %xmm0,0x10(%rbx,%rdi,8)
movdqu %xmm0,0x20(%rbx,%rdi,8)
movdqu %xmm0,0x30(%rbx,%rdi,8)
movdqu %xmm0,0x40(%rbx,%rdi,8)
movdqu %xmm0,0x50(%rbx,%rdi,8)
movdqu %xmm0,0x60(%rbx,%rdi,8)
movdqu %xmm0,0x70(%rbx,%rdi,8)
movdqu %xmm0,0x80(%rbx,%rdi,8)
movdqu %xmm0,0x90(%rbx,%rdi,8)
movdqu %xmm0,0xa0(%rbx,%rdi,8)
movdqu %xmm0,0xb0(%rbx,%rdi,8)
movdqu %xmm0,0xc0(%rbx,%rdi,8)
movdqu %xmm0,0xd0(%rbx,%rdi,8)
movdqu %xmm0,0xe0(%rbx,%rdi,8)
movdqu %xmm0,0xf0(%rbx,%rdi,8)
add    $0x20,%rdi
add    $0xfffffffffffffff8,%rsi
jne    16b0 <mgh_umipt+0x5a0>
test   %rdx,%rdx
je     1764 <mgh_umipt+0x654>
lea    (%rbx,%rdi,8),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
movdqa 0x970(%rip),%xmm0
movdqu %xmm0,-0x10(%rsi,%rdi,1)
movdqu %xmm0,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1750 <mgh_umipt+0x640>
cmp    %rax,%rcx
je     1c3c <mgh_umipt+0xb2c>
movabs $0x3fe0000000000000,%rdx
nopw   0x0(%rax,%rax,1)
mov    %rdx,(%rbx,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1780 <mgh_umipt+0x670>
jmp    1c3c <mgh_umipt+0xb2c>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movupd %xmm1,(%rbx,%rdi,8)
movupd %xmm1,0x10(%rbx,%rdi,8)
movupd %xmm1,0x20(%rbx,%rdi,8)
movupd %xmm1,0x30(%rbx,%rdi,8)
movupd %xmm1,0x40(%rbx,%rdi,8)
movupd %xmm1,0x50(%rbx,%rdi,8)
movupd %xmm1,0x60(%rbx,%rdi,8)
movupd %xmm1,0x70(%rbx,%rdi,8)
movupd %xmm1,0x80(%rbx,%rdi,8)
movupd %xmm1,0x90(%rbx,%rdi,8)
movupd %xmm1,0xa0(%rbx,%rdi,8)
movupd %xmm1,0xb0(%rbx,%rdi,8)
movupd %xmm1,0xc0(%rbx,%rdi,8)
movupd %xmm1,0xd0(%rbx,%rdi,8)
movupd %xmm1,0xe0(%rbx,%rdi,8)
movupd %xmm1,0xf0(%rbx,%rdi,8)
add    $0x20,%rdi
add    $0xfffffffffffffff8,%rsi
jne    17a0 <mgh_umipt+0x690>
test   %rdx,%rdx
je     1854 <mgh_umipt+0x744>
lea    (%rbx,%rdi,8),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movupd %xmm1,-0x10(%rsi,%rdi,1)
movupd %xmm1,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1840 <mgh_umipt+0x730>
cmp    %rax,%rcx
je     1c3c <mgh_umipt+0xb2c>
nopl   (%rax)
movsd  %xmm0,(%rbx,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1860 <mgh_umipt+0x750>
jmp    1c3c <mgh_umipt+0xb2c>
movabs $0x7ffffffffffffff8,%rax
ff ff 7f
or     $0x4,%rax
and    %rax,%rsi
lea    0xe0(%rbx),%rax
xor    %edi,%edi
movdqa 0x7eb(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nop
movdqu %xmm0,-0xd0(%rax)
ff
movdqu %xmm0,-0xe0(%rax)
ff
movdqu %xmm0,-0xb0(%rax)
ff
movdqu %xmm0,-0xc0(%rax)
ff
movdqu %xmm0,-0x90(%rax)
ff
movdqu %xmm0,-0xa0(%rax)
ff
movdqu %xmm0,-0x70(%rax)
movdqu %xmm0,-0x80(%rax)
movdqu %xmm0,-0x50(%rax)
movdqu %xmm0,-0x60(%rax)
movdqu %xmm0,-0x30(%rax)
movdqu %xmm0,-0x40(%rax)
movdqu %xmm0,-0x10(%rax)
movdqu %xmm0,-0x20(%rax)
movdqu %xmm0,0x10(%rax)
movdqu %xmm0,(%rax)
add    $0x10,%rdi
add    $0x100,%rax
add    $0xfffffffffffffffc,%rsi
jne    18a0 <mgh_umipt+0x790>
test   %rdx,%rdx
je     195d <mgh_umipt+0x84d>
add    %rdi,%rdi
movdqa 0x75f(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    0x0(,%rdi,8),%rax
movdqu %xmm0,0x10(%rbx,%rdi,8)
movdqu %xmm0,(%rbx,%rdi,8)
or     $0x28,%rax
movdqu %xmm0,0x8(%rbx,%rax,1)
movdqu %xmm0,-0x8(%rbx,%rax,1)
add    $0x8,%rdi
add    $0xffffffffffffffff,%rdx
jne    1930 <mgh_umipt+0x820>
cmp    %rcx,%r8
je     1c3c <mgh_umipt+0xb2c>
add    %rcx,%rcx
movabs $0xbff3333333333333,%rax
33 f3 bf
movabs $0x3ff0000000000000,%rdx
nopl   (%rax)
mov    %rax,(%rbx,%rcx,8)
mov    %rdx,0x8(%rbx,%rcx,8)
add    $0x2,%rcx
cmp    %r9,%rcx
jb     1980 <mgh_umipt+0x870>
jmp    1c3c <mgh_umipt+0xb2c>
add    $0x4,%rax
and    %rax,%rsi
lea    0x1c0(%rbx),%rax
xor    %edi,%edi
movdqa 0x6c1(%rip),%xmm0
xorpd  %xmm1,%xmm1
movhpd 0x645(%rip),%xmm1
nopl   0x0(%rax,%rax,1)
movdqu %xmm0,-0x1a0(%rax)
ff
movdqu %xmm0,-0x1c0(%rax)
ff
movupd %xmm1,-0x190(%rax)
ff
movupd %xmm1,-0x1b0(%rax)
ff
movdqu %xmm0,-0x160(%rax)
ff
movdqu %xmm0,-0x180(%rax)
ff
movupd %xmm1,-0x150(%rax)
ff
movupd %xmm1,-0x170(%rax)
ff
movdqu %xmm0,-0x120(%rax)
ff
movdqu %xmm0,-0x140(%rax)
ff
movupd %xmm1,-0x110(%rax)
ff
movupd %xmm1,-0x130(%rax)
ff
movdqu %xmm0,-0xe0(%rax)
ff
movdqu %xmm0,-0x100(%rax)
ff
movupd %xmm1,-0xd0(%rax)
ff
movupd %xmm1,-0xf0(%rax)
ff
movdqu %xmm0,-0xa0(%rax)
ff
movdqu %xmm0,-0xc0(%rax)
ff
movupd %xmm1,-0x90(%rax)
ff
movupd %xmm1,-0xb0(%rax)
ff
movdqu %xmm0,-0x60(%rax)
movdqu %xmm0,-0x80(%rax)
movupd %xmm1,-0x50(%rax)
movupd %xmm1,-0x70(%rax)
movdqu %xmm0,-0x20(%rax)
movdqu %xmm0,-0x40(%rax)
movupd %xmm1,-0x10(%rax)
movupd %xmm1,-0x30(%rax)
movdqu %xmm0,0x20(%rax)
movdqu %xmm0,(%rax)
movupd %xmm1,0x30(%rax)
movupd %xmm1,0x10(%rax)
add    $0x10,%rdi
add    $0x200,%rax
add    $0xfffffffffffffffc,%rsi
jne    19c0 <mgh_umipt+0x8b0>
test   %rdx,%rdx
je     1b15 <mgh_umipt+0xa05>
shl    $0x2,%rdi
movdqa 0x5b0(%rip),%xmm0
xorpd  %xmm1,%xmm1
movhpd 0x534(%rip),%xmm1
nopl   0x0(%rax)
lea    0x0(,%rdi,8),%rax
movdqu %xmm0,0x20(%rbx,%rdi,8)
movdqu %xmm0,(%rbx,%rdi,8)
movupd %xmm1,0x30(%rbx,%rdi,8)
movupd %xmm1,0x10(%rbx,%rdi,8)
or     $0x58,%rax
movdqu %xmm0,0x8(%rbx,%rax,1)
movupd %xmm1,0x18(%rbx,%rax,1)
movdqu %xmm0,-0x18(%rbx,%rax,1)
movupd %xmm1,-0x8(%rbx,%rax,1)
add    $0x10,%rdi
add    $0xffffffffffffffff,%rdx
jne    1ad0 <mgh_umipt+0x9c0>
cmp    %rcx,%r8
je     1c3c <mgh_umipt+0xb2c>
shl    $0x2,%rcx
movabs $0x4008000000000000,%rax
movabs $0xbff0000000000000,%rdx
movabs $0x3ff0000000000000,%rsi
mov    %rax,(%rbx,%rcx,8)
mov    %rdx,0x8(%rbx,%rcx,8)
movq   $0x0,0x10(%rbx,%rcx,8)
mov    %rsi,0x18(%rbx,%rcx,8)
add    $0x4,%rcx
cmp    %r9,%rcx
jb     1b40 <mgh_umipt+0xa30>
jmp    1c3c <mgh_umipt+0xb2c>
movdqa 0x4a3(%rip),%xmm0
xor    %esi,%esi
test   $0x1,%dl
je     1ba0 <mgh_umipt+0xa90>
pshufd $0xe8,%xmm0,%xmm0
pcmpeqd %xmm1,%xmm1
movdqa %xmm0,%xmm2
psubd  %xmm1,%xmm2
paddd  0x493(%rip),%xmm0
cvtdq2pd %xmm2,%xmm1
cvtdq2pd %xmm0,%xmm0
movdqu %xmm1,(%rbx,%rsi,8)
movdqu %xmm0,0x10(%rbx,%rsi,8)
cmp    %rax,%rcx
je     1c3c <mgh_umipt+0xb2c>
nopl   0x0(%rax)
lea    0x1(%rcx),%rdx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
movsd  %xmm0,(%rbx,%rcx,8)
mov    %rdx,%rcx
cmp    %rdx,%rax
jne    1bb0 <mgh_umipt+0xaa0>
jmp    1c3c <mgh_umipt+0xb2c>
movdqa 0x43e(%rip),%xmm2
xor    %edx,%edx
test   $0x1,%sil
je     1c0e <mgh_umipt+0xafe>
pshufd $0xe8,%xmm2,%xmm2
pcmpeqd %xmm3,%xmm3
movdqa %xmm2,%xmm4
psubd  %xmm3,%xmm4
paddd  0x42d(%rip),%xmm2
cvtdq2pd %xmm4,%xmm3
cvtdq2pd %xmm2,%xmm2
mulpd  %xmm1,%xmm3
mulpd  %xmm1,%xmm2
movupd %xmm3,(%rbx,%rdx,8)
movupd %xmm2,0x10(%rbx,%rdx,8)
cmp    %rax,%rcx
je     1c3c <mgh_umipt+0xb2c>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x1(%rcx),%rdx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx,%rcx,8)
mov    %rdx,%rcx
cmp    %rdx,%rax
jne    1c20 <mgh_umipt+0xb10>
ucomisd 0x3bb(%rip),%xmm11
jne    1c4d <mgh_umipt+0xb3d>
jnp    1e7f <mgh_umipt+0xd6f>
cmp    $0x7,%r15d
jne    1c6c <mgh_umipt+0xb5c>
test   %r14d,%r14d
jle    1e7f <mgh_umipt+0xd6f>
mov    %r14d,%eax
cmp    $0x4,%r14d
jae    1c85 <mgh_umipt+0xb75>
xor    %ecx,%ecx
jmp    1e70 <mgh_umipt+0xd60>
test   %r14d,%r14d
jle    1e7f <mgh_umipt+0xd6f>
mov    %r14d,%eax
cmp    $0x4,%r14d
jae    1cb9 <mgh_umipt+0xba9>
xor    %ecx,%ecx
jmp    1d80 <mgh_umipt+0xc70>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movapd %xmm11,%xmm0
unpcklpd %xmm11,%xmm0
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x1c,%rdi
jae    1d9d <mgh_umipt+0xc8d>
xor    %edi,%edi
jmp    1e35 <mgh_umipt+0xd25>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movapd %xmm11,%xmm0
unpcklpd %xmm11,%xmm0
lea    -0x4(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     1e89 <mgh_umipt+0xd79>
movabs $0x7ffffffffffffff8,%rdi
ff ff 7f
or     $0x6,%rdi
and    %rdx,%rdi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd (%rbx,%rsi,8),%xmm1
movupd 0x10(%rbx,%rsi,8),%xmm2
movupd 0x20(%rbx,%rsi,8),%xmm3
movupd 0x30(%rbx,%rsi,8),%xmm4
mulpd  %xmm0,%xmm1
mulpd  %xmm0,%xmm2
movupd %xmm1,(%rbx,%rsi,8)
movupd %xmm2,0x10(%rbx,%rsi,8)
mulpd  %xmm0,%xmm3
mulpd  %xmm0,%xmm4
movupd %xmm3,0x20(%rbx,%rsi,8)
movupd %xmm4,0x30(%rbx,%rsi,8)
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rdi
jne    1d00 <mgh_umipt+0xbf0>
test   $0x1,%dl
je     1d6b <mgh_umipt+0xc5b>
movupd (%rbx,%rsi,8),%xmm1
movupd 0x10(%rbx,%rsi,8),%xmm2
mulpd  %xmm0,%xmm1
mulpd  %xmm0,%xmm2
movupd %xmm1,(%rbx,%rsi,8)
movupd %xmm2,0x10(%rbx,%rsi,8)
cmp    %rax,%rcx
je     1e7f <mgh_umipt+0xd6f>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rbx,%rcx,8),%xmm0
mulsd  %xmm11,%xmm0
movsd  %xmm0,(%rbx,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1d80 <mgh_umipt+0xc70>
jmp    1e7f <mgh_umipt+0xd6f>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd %xmm0,(%rbx,%rdi,8)
movupd %xmm0,0x10(%rbx,%rdi,8)
movupd %xmm0,0x20(%rbx,%rdi,8)
movupd %xmm0,0x30(%rbx,%rdi,8)
movupd %xmm0,0x40(%rbx,%rdi,8)
movupd %xmm0,0x50(%rbx,%rdi,8)
movupd %xmm0,0x60(%rbx,%rdi,8)
movupd %xmm0,0x70(%rbx,%rdi,8)
movupd %xmm0,0x80(%rbx,%rdi,8)
movupd %xmm0,0x90(%rbx,%rdi,8)
movupd %xmm0,0xa0(%rbx,%rdi,8)
movupd %xmm0,0xb0(%rbx,%rdi,8)
movupd %xmm0,0xc0(%rbx,%rdi,8)
movupd %xmm0,0xd0(%rbx,%rdi,8)
movupd %xmm0,0xe0(%rbx,%rdi,8)
movupd %xmm0,0xf0(%rbx,%rdi,8)
add    $0x20,%rdi
add    $0xfffffffffffffff8,%rsi
jne    1db0 <mgh_umipt+0xca0>
test   %rdx,%rdx
je     1e64 <mgh_umipt+0xd54>
lea    (%rbx,%rdi,8),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movupd %xmm0,-0x10(%rsi,%rdi,1)
movupd %xmm0,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1e50 <mgh_umipt+0xd40>
cmp    %rax,%rcx
je     1e7f <mgh_umipt+0xd6f>
nopl   0x0(%rax)
movsd  %xmm11,(%rbx,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1e70 <mgh_umipt+0xd60>
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret
xor    %esi,%esi
test   $0x1,%dl
jne    1d4d <mgh_umipt+0xc3d>
jmp    1d6b <mgh_umipt+0xc5b>

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

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