#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 ceil(double);
void CalcFloorCeil(int n, double t, double *A, double *Atflo, double *Atcei) {
  int i;
  int ell = (int)t;
  double z = t - ell;
  double w = ceil(t) - t;
  if (z > 0.5) {
    for (i = 2; i <= 2 * n + 2; i += 2)
      Atflo[i] = i / 2 - 2 - ell;
    for (i = 1; i <= 2 * n + 2; i += 2)
      Atflo[i] = i / 2 - 1 - ell;
    for (i = 2; i <= 2 * n + 2; i += 2)
      Atcei[i] = i / 2 + ell;
    for (i = 1; i <= 2 * n + 2; i += 2)
      Atcei[i] = i / 2 + 1 + ell;
  } else if (z > 0.0) {
    for (i = 1; i <= 2 * n + 2; i++)
      Atflo[i] = i / 2 - 1 - ell;
    for (i = 2; i <= 2 * n + 2; i++)
      Atcei[i] = i / 2 + ell;
    Atcei[1] = 1 + ell;
  } else {
    for (i = 2; i <= 2 * n + 2; i += 2)
      Atflo[i] = i / 2 - 1 - ell;
    for (i = 1; i <= 2 * n + 2; i += 2)
      Atflo[i] = i / 2 - ell;
    for (i = 2; i <= 2 * n + 2; i += 2)
      Atcei[i] = i / 2 - 1 + ell;
    for (i = 1; i <= 2 * n + 2; i += 2)
      Atcei[i] = i / 2 + ell;
  }
  if (w < z)
    z = w;
  A[0] = A[1] = 0;
  A[2] = z;
  A[3] = 1 - A[2];
  for (i = 4; i <= 2 * n + 1; i++)
    A[i] = A[i - 2] + 1;
  A[2 * n + 2] = n;
}


x86 assembly (clang, -O0):
<CalcFloorCeil>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
cvttsd2si -0x10(%rbp),%eax
mov    %eax,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x30(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1030 <ceil@plt>
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0xe98(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12a0 <CalcFloorCeil+0x190>
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     11bd <CalcFloorCeil+0xad>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
sub    $0x2,%eax
sub    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1179 <CalcFloorCeil+0x69>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     1208 <CalcFloorCeil+0xf8>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
sub    $0x1,%eax
sub    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    11c4 <CalcFloorCeil+0xb4>
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     1250 <CalcFloorCeil+0x140>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    120f <CalcFloorCeil+0xff>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     129b <CalcFloorCeil+0x18b>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    $0x1,%eax
add    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1257 <CalcFloorCeil+0x147>
jmp    148d <CalcFloorCeil+0x37d>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    135d <CalcFloorCeil+0x24d>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     12fd <CalcFloorCeil+0x1ed>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
sub    $0x1,%eax
sub    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12b9 <CalcFloorCeil+0x1a9>
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     1345 <CalcFloorCeil+0x235>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1304 <CalcFloorCeil+0x1f4>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
jmp    1488 <CalcFloorCeil+0x378>
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     13a8 <CalcFloorCeil+0x298>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
sub    $0x1,%eax
sub    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1364 <CalcFloorCeil+0x254>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     13f0 <CalcFloorCeil+0x2e0>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
sub    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    13af <CalcFloorCeil+0x29f>
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     143b <CalcFloorCeil+0x32b>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
sub    $0x1,%eax
add    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    13f7 <CalcFloorCeil+0x2e7>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     1483 <CalcFloorCeil+0x373>
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1442 <CalcFloorCeil+0x332>
jmp    1488 <CalcFloorCeil+0x378>
jmp    148d <CalcFloorCeil+0x37d>
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    14ab <CalcFloorCeil+0x39b>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movsd  0xb2c(%rip),%xmm0
subsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movl   $0x4,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     153a <CalcFloorCeil+0x42a>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  0xaee(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    14f1 <CalcFloorCeil+0x3e1>
cvtsi2sdl -0x4(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<CalcFloorCeil>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x20,%rsp
movapd %xmm0,0x10(%rsp)
cvttsd2si %xmm0,%r13d
cvttpd2dq %xmm0,%xmm1
mov    %rcx,%r15
mov    %rdx,%rbx
mov    %rsi,%r12
mov    %edi,%r14d
cvtdq2pd %xmm1,%xmm1
movapd %xmm0,%xmm2
subsd  %xmm1,%xmm2
movapd %xmm2,(%rsp)
call   1030 <ceil@plt>
movapd (%rsp),%xmm9
subsd  0x10(%rsp),%xmm0
lea    (%r14,%r14,1),%eax
ucomisd 0xe99(%rip),%xmm9
jbe    1231 <CalcFloorCeil+0x121>
test   %r14d,%r14d
js     161f <CalcFloorCeil+0x50f>
movslq %eax,%rcx
mov    %r13d,%edx
not    %edx
xor    %esi,%esi
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
movsd  %xmm1,0x10(%rbx,%rsi,8)
add    $0x2,%rsi
add    $0x1,%edx
cmp    %rcx,%rsi
jle    1180 <CalcFloorCeil+0x70>
test   %r14d,%r14d
js     161f <CalcFloorCeil+0x50f>
mov    %r13d,%edx
not    %edx
mov    $0xffffffffffffffff,%rsi
xchg   %ax,%ax
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
movsd  %xmm1,0x10(%rbx,%rsi,8)
add    $0x2,%rsi
add    $0x1,%edx
cmp    %rcx,%rsi
jle    11b0 <CalcFloorCeil+0xa0>
test   %r14d,%r14d
js     161f <CalcFloorCeil+0x50f>
lea    0x1(%r13),%edx
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
movsd  %xmm1,0x10(%r15,%rsi,8)
add    $0x2,%rsi
add    $0x1,%edx
cmp    %rcx,%rsi
jle    11e0 <CalcFloorCeil+0xd0>
test   %r14d,%r14d
js     161f <CalcFloorCeil+0x50f>
add    $0x1,%r13d
mov    $0xffffffffffffffff,%rdx
xchg   %ax,%ax
xorps  %xmm1,%xmm1
cvtsi2sd %r13d,%xmm1
movsd  %xmm1,0x10(%r15,%rdx,8)
add    $0x2,%rdx
add    $0x1,%r13d
cmp    %rcx,%rdx
jle    1210 <CalcFloorCeil+0x100>
jmp    161f <CalcFloorCeil+0x50f>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm9
jbe    14bc <CalcFloorCeil+0x3ac>
test   %r14d,%r14d
js     160d <CalcFloorCeil+0x4fd>
lea    0x2(%rax),%r8d
mov    %r13d,%edx
not    %edx
cmp    $0x2,%r8d
mov    $0x1,%r10d
cmovge %r8d,%r10d
mov    $0x1,%esi
cmp    $0x4,%r10d
jb     138c <CalcFloorCeil+0x27c>
mov    %r10d,%esi
and    $0xfffffffc,%esi
movd   %edx,%xmm1
pshufd $0x50,%xmm1,%xmm1
lea    -0x4(%rsi),%rcx
mov    %rcx,%r9
shr    $0x2,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     1581 <CalcFloorCeil+0x471>
mov    %r9,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xd6b(%rip),%xmm3
xor    %ecx,%ecx
movdqa 0xd70(%rip),%xmm8
movdqa 0xd78(%rip),%xmm4
movdqa 0xd80(%rip),%xmm5
movdqa 0xd88(%rip),%xmm6
nopl   0x0(%rax,%rax,1)
movdqa %xmm3,%xmm7
paddd  %xmm8,%xmm7
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
psrld  $0x1,%xmm7
paddd  %xmm1,%xmm2
cvtdq2pd %xmm2,%xmm2
paddd  %xmm1,%xmm7
cvtdq2pd %xmm7,%xmm7
movups %xmm2,0x8(%rbx,%rcx,8)
movups %xmm7,0x18(%rbx,%rcx,8)
movdqa %xmm3,%xmm2
paddd  %xmm4,%xmm2
movdqa %xmm3,%xmm7
paddd  %xmm5,%xmm7
psrld  $0x1,%xmm2
psrld  $0x1,%xmm7
paddd  %xmm1,%xmm2
cvtdq2pd %xmm2,%xmm2
paddd  %xmm1,%xmm7
cvtdq2pd %xmm7,%xmm7
movupd %xmm2,0x28(%rbx,%rcx,8)
movups %xmm7,0x38(%rbx,%rcx,8)
add    $0x8,%rcx
paddd  %xmm6,%xmm3
add    $0xfffffffffffffffe,%rdi
jne    12d0 <CalcFloorCeil+0x1c0>
test   $0x1,%r9b
je     1383 <CalcFloorCeil+0x273>
movdqa 0xcce(%rip),%xmm2
paddd  %xmm3,%xmm2
psrld  $0x1,%xmm3
psrld  $0x1,%xmm2
paddd  %xmm1,%xmm3
paddd  %xmm1,%xmm2
cvtdq2pd %xmm3,%xmm1
cvtdq2pd %xmm2,%xmm2
shl    $0x3,%rcx
or     $0x8,%rcx
movdqu %xmm1,(%rbx,%rcx,1)
movupd %xmm2,0x10(%rbx,%rcx,1)
cmp    %rsi,%r10
je     13ab <CalcFloorCeil+0x29b>
or     $0x1,%rsi
lea    0x1(%r10),%rcx
mov    %esi,%edi
shr    %edi
add    %edx,%edi
xorps  %xmm1,%xmm1
cvtsi2sd %edi,%xmm1
movsd  %xmm1,(%rbx,%rsi,8)
add    $0x1,%rsi
cmp    %rsi,%rcx
jne    1390 <CalcFloorCeil+0x280>
test   %r14d,%r14d
js     160d <CalcFloorCeil+0x4fd>
cmp    $0x3,%r8d
mov    $0x2,%edx
cmovge %r8d,%edx
or     $0x1,%edx
lea    -0x2(%rdx),%rcx
mov    $0x2,%esi
cmp    $0x4,%rcx
jb     15f0 <CalcFloorCeil+0x4e0>
and    $0xfffffffffffffffc,%rcx
movd   %r13d,%xmm1
pshufd $0x50,%xmm1,%xmm1
lea    -0x4(%rcx),%rsi
mov    %rsi,%rbx
shr    $0x2,%rbx
add    $0x1,%rbx
test   %rsi,%rsi
je     159a <CalcFloorCeil+0x48a>
mov    %rbx,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xc54(%rip),%xmm3
mov    $0x2,%esi
movdqa 0xc06(%rip),%xmm8
movdqa 0xc0e(%rip),%xmm4
movdqa 0xc16(%rip),%xmm5
movdqa 0xc1e(%rip),%xmm6
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm3,%xmm7
paddd  %xmm8,%xmm7
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
psrld  $0x1,%xmm7
paddd  %xmm1,%xmm2
cvtdq2pd %xmm2,%xmm2
paddd  %xmm1,%xmm7
cvtdq2pd %xmm7,%xmm7
movups %xmm2,(%r15,%rsi,8)
movups %xmm7,0x10(%r15,%rsi,8)
movdqa %xmm3,%xmm2
paddd  %xmm4,%xmm2
movdqa %xmm3,%xmm7
paddd  %xmm5,%xmm7
psrld  $0x1,%xmm2
psrld  $0x1,%xmm7
paddd  %xmm1,%xmm2
cvtdq2pd %xmm2,%xmm2
paddd  %xmm1,%xmm7
cvtdq2pd %xmm7,%xmm7
movupd %xmm2,0x20(%r15,%rsi,8)
movups %xmm7,0x30(%r15,%rsi,8)
paddd  %xmm6,%xmm3
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rdi
jne    1440 <CalcFloorCeil+0x330>
jmp    15a7 <CalcFloorCeil+0x497>
test   %r14d,%r14d
js     161f <CalcFloorCeil+0x50f>
movslq %eax,%rcx
mov    %r13d,%edx
neg    %edx
xor    %esi,%esi
nop
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
movsd  %xmm1,0x10(%rbx,%rsi,8)
add    $0x2,%rsi
add    $0x1,%edx
cmp    %rcx,%rsi
jle    14d0 <CalcFloorCeil+0x3c0>
test   %r14d,%r14d
js     161f <CalcFloorCeil+0x50f>
mov    %r13d,%edx
neg    %edx
mov    $0xffffffffffffffff,%rsi
xchg   %ax,%ax
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
movsd  %xmm1,0x10(%rbx,%rsi,8)
add    $0x2,%rsi
add    $0x1,%edx
cmp    %rcx,%rsi
jle    1500 <CalcFloorCeil+0x3f0>
test   %r14d,%r14d
js     161f <CalcFloorCeil+0x50f>
xor    %edx,%edx
mov    %r13d,%esi
nopw   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
movsd  %xmm1,0x10(%r15,%rdx,8)
add    $0x2,%rdx
add    $0x1,%esi
cmp    %rcx,%rdx
jle    1530 <CalcFloorCeil+0x420>
test   %r14d,%r14d
js     161f <CalcFloorCeil+0x50f>
mov    $0xffffffffffffffff,%rdx
nopw   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sd %r13d,%xmm1
movsd  %xmm1,0x10(%r15,%rdx,8)
add    $0x2,%rdx
add    $0x1,%r13d
cmp    %rcx,%rdx
jle    1560 <CalcFloorCeil+0x450>
jmp    161f <CalcFloorCeil+0x50f>
movdqa 0xa87(%rip),%xmm3
xor    %ecx,%ecx
test   $0x1,%r9b
jne    134a <CalcFloorCeil+0x23a>
jmp    1383 <CalcFloorCeil+0x273>
movdqa 0xabe(%rip),%xmm3
mov    $0x2,%esi
or     $0x2,%rcx
test   $0x1,%bl
je     15e3 <CalcFloorCeil+0x4d3>
movdqa 0xa68(%rip),%xmm2
paddd  %xmm3,%xmm2
psrld  $0x1,%xmm3
psrld  $0x1,%xmm2
paddd  %xmm1,%xmm3
paddd  %xmm1,%xmm2
cvtdq2pd %xmm3,%xmm1
cvtdq2pd %xmm2,%xmm2
movdqu %xmm1,(%r15,%rsi,8)
movupd %xmm2,0x10(%r15,%rsi,8)
mov    %rcx,%rsi
cs nopw 0x0(%rax,%rax,1)
mov    %esi,%ecx
shr    %ecx
add    %r13d,%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
movsd  %xmm1,(%r15,%rsi,8)
add    $0x1,%rsi
cmp    %rsi,%rdx
jne    15f0 <CalcFloorCeil+0x4e0>
add    $0x1,%r13d
xorps  %xmm1,%xmm1
cvtsi2sd %r13d,%xmm1
movsd  %xmm1,0x8(%r15)
minsd  %xmm9,%xmm0
xorpd  %xmm1,%xmm1
movupd %xmm1,(%r12)
movsd  %xmm0,0x10(%r12)
movsd  0x9cb(%rip),%xmm1
movapd %xmm1,%xmm2
subsd  %xmm0,%xmm2
movsd  %xmm2,0x18(%r12)
mov    %eax,%ecx
or     $0x1,%ecx
add    $0x2,%eax
cmp    $0x4,%ecx
jl     1742 <CalcFloorCeil+0x632>
mov    %eax,%esi
cmp    $0x4,%eax
jne    168f <CalcFloorCeil+0x57f>
mov    $0x4,%ecx
nopl   0x0(%rax)
movsd  -0x10(%r12,%rcx,8),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r12,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rsi
jne    1670 <CalcFloorCeil+0x560>
jmp    1742 <CalcFloorCeil+0x632>
movupd 0x10(%r12),%xmm0
add    $0xfffffffffffffffa,%rsi
mov    %rsi,%rdx
shr    %rdx
add    $0x1,%rdx
mov    %edx,%ecx
and    $0x3,%ecx
cmp    $0x6,%rsi
jae    16b3 <CalcFloorCeil+0x5a3>
xor    %esi,%esi
jmp    1706 <CalcFloorCeil+0x5f6>
and    $0xfffffffffffffffc,%rdx
xor    %esi,%esi
movapd 0x9af(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addpd  %xmm1,%xmm0
movupd %xmm0,0x20(%r12,%rsi,8)
addpd  %xmm1,%xmm0
movupd %xmm0,0x30(%r12,%rsi,8)
addpd  %xmm1,%xmm0
movupd %xmm0,0x40(%r12,%rsi,8)
addpd  %xmm1,%xmm0
movupd %xmm0,0x50(%r12,%rsi,8)
add    $0x8,%rsi
add    $0xfffffffffffffffc,%rdx
jne    16d0 <CalcFloorCeil+0x5c0>
test   %rcx,%rcx
je     1742 <CalcFloorCeil+0x632>
lea    (%r12,%rsi,8),%rdx
add    $0x20,%rdx
shl    $0x4,%rcx
xor    %esi,%esi
movapd 0x94f(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addpd  %xmm1,%xmm0
movupd %xmm0,(%rdx,%rsi,1)
add    $0x10,%rsi
cmp    %rsi,%rcx
jne    1730 <CalcFloorCeil+0x620>
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
cltq
movsd  %xmm0,(%r12,%rax,8)
add    $0x20,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

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

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