void cgjpost2l(float part[], float cu[], float qm, float dt, int nop, int idimp,
               int nx, int ny, int nxv, int nyv, int ipbc) {
  int j, nn, mm, np, mp, nxv3;
  float edgelx, edgely, edgerx, edgery, dxp, dyp, amx, amy;
  float dx, dy, vx, vy, vz;
  nxv3 = 3 * nxv;
  edgelx = 0.0;
  edgely = 0.0;
  edgerx = (float)nx;
  edgery = (float)ny;
  if (ipbc == 2) {
    edgelx = 1.0;
    edgely = 1.0;
    edgerx = (float)(nx - 1);
    edgery = (float)(ny - 1);
  } else if (ipbc == 3) {
    edgelx = 1.0;
    edgerx = (float)(nx - 1);
  }
  for (j = 0; j < nop; j++) {
    nn = part[idimp * j];
    mm = part[1 + idimp * j];
    dxp = qm * (part[idimp * j] - (float)nn);
    dyp = part[1 + idimp * j] - (float)mm;
    nn = 3 * nn;
    mm = nxv3 * mm;
    amx = qm - dxp;
    mp = mm + nxv3;
    amy = 1.0 - dyp;
    np = nn + 3;
    dx = dxp * dyp;
    dy = amx * dyp;
    vx = part[2 + idimp * j];
    vy = part[3 + idimp * j];
    vz = part[4 + idimp * j];
    cu[np + mp] += vx * dx;
    cu[1 + np + mp] += vy * dx;
    cu[2 + np + mp] += vz * dx;
    dx = dxp * amy;
    cu[nn + mp] += vx * dy;
    cu[1 + nn + mp] += vy * dy;
    cu[2 + nn + mp] += vz * dy;
    dy = amx * amy;
    cu[np + mm] += vx * dx;
    cu[1 + np + mm] += vy * dx;
    cu[2 + np + mm] += vz * dx;
    cu[nn + mm] += vx * dy;
    cu[1 + nn + mm] += vy * dy;
    cu[2 + nn + mm] += vz * dy;
    dx = part[idimp * j] + vx * dt;
    dy = part[1 + idimp * j] + vy * dt;
    if (ipbc == 1) {
      if (dx < edgelx)
        dx += edgerx;
      if (dx >= edgerx)
        dx -= edgerx;
      if (dy < edgely)
        dy += edgery;
      if (dy >= edgery)
        dy -= edgery;
    } else if (ipbc == 2) {
      if ((dx < edgelx) || (dx >= edgerx)) {
        dx = part[idimp * j];
        part[2 + idimp * j] = -part[2 + idimp * j];
      }
      if ((dy < edgely) || (dy >= edgery)) {
        dy = part[1 + idimp * j];
        part[3 + idimp * j] = -part[3 + idimp * j];
      }
    } else if (ipbc == 3) {
      if ((dx < edgelx) || (dx >= edgerx)) {
        dx = part[idimp * j];
        part[2 + idimp * j] = -part[2 + idimp * j];
      }
      if (dy < edgely)
        dy += edgery;
      if (dy >= edgery)
        dy -= edgery;
    }
    part[idimp * j] = dx;
    part[1 + idimp * j] = dy;
  }
  return;
}


x86 assembly (clang, -O0):
<cgjpost2l>:
push   %rbp
mov    %rsp,%rbp
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movss  %xmm0,-0x14(%rbp)
movss  %xmm1,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %ecx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    %r9d,-0x28(%rbp)
imul   $0x3,0x10(%rbp),%eax
mov    %eax,-0x40(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
cvtsi2ssl -0x24(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
cvtsi2ssl -0x28(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
cmpl   $0x2,0x20(%rbp)
jne    119f <cgjpost2l+0x9f>
movss  0xe96(%rip),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  0xe89(%rip),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x28(%rbp),%eax
sub    $0x1,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    11ca <cgjpost2l+0xca>
cmpl   $0x3,0x20(%rbp)
jne    11c5 <cgjpost2l+0xc5>
movss  0xe4f(%rip),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x4c(%rbp)
jmp    11ca <cgjpost2l+0xca>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1832 <cgjpost2l+0x732>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
movslq %ecx,%rcx
cvttss2si (%rax,%rcx,4),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cvttss2si (%rax,%rcx,4),%eax
mov    %eax,-0x34(%rbp)
movss  -0x14(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtsi2ssl -0x30(%rbp),%xmm2
subss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtsi2ssl -0x34(%rbp),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
imul   $0x3,-0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x40(%rbp),%eax
imul   -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
movss  -0x14(%rbp),%xmm0
subss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movss  -0x58(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd74(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x30(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x38(%rbp)
movss  -0x54(%rbp),%xmm0
mulss  -0x58(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x5c(%rbp),%xmm0
mulss  -0x58(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x6c(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x70(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x74(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x54(%rbp),%xmm0
mulss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x6c(%rbp),%xmm0
movss  -0x68(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x70(%rbp),%xmm0
movss  -0x68(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x74(%rbp),%xmm0
movss  -0x68(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x2,%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x5c(%rbp),%xmm0
mulss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x6c(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x70(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x74(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x6c(%rbp),%xmm0
movss  -0x68(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x70(%rbp),%xmm0
movss  -0x68(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x74(%rbp),%xmm0
movss  -0x68(%rbp),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x2,%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
movss  -0x6c(%rbp),%xmm0
movss  -0x18(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
movss  -0x70(%rbp),%xmm0
movss  -0x18(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
cmpl   $0x1,0x20(%rbp)
jne    1629 <cgjpost2l+0x529>
movss  -0x64(%rbp),%xmm1
movss  -0x44(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    15be <cgjpost2l+0x4be>
movss  -0x4c(%rbp),%xmm0
addss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x64(%rbp),%xmm0
ucomiss -0x4c(%rbp),%xmm0
jb     15e0 <cgjpost2l+0x4e0>
movss  -0x4c(%rbp),%xmm1
movss  -0x64(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x68(%rbp),%xmm1
movss  -0x48(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1602 <cgjpost2l+0x502>
movss  -0x50(%rbp),%xmm0
addss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x68(%rbp),%xmm0
ucomiss -0x50(%rbp),%xmm0
jb     1624 <cgjpost2l+0x524>
movss  -0x50(%rbp),%xmm1
movss  -0x68(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
jmp    17f1 <cgjpost2l+0x6f1>
cmpl   $0x2,0x20(%rbp)
jne    1721 <cgjpost2l+0x621>
movss  -0x64(%rbp),%xmm1
movss  -0x44(%rbp),%xmm0
ucomiss %xmm1,%xmm0
ja     1655 <cgjpost2l+0x555>
movss  -0x64(%rbp),%xmm0
ucomiss -0x4c(%rbp),%xmm0
jb     16a6 <cgjpost2l+0x5a6>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm1
movss  -0x48(%rbp),%xmm0
ucomiss %xmm1,%xmm0
ja     16c8 <cgjpost2l+0x5c8>
movss  -0x68(%rbp),%xmm0
ucomiss -0x50(%rbp),%xmm0
jb     171c <cgjpost2l+0x61c>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    17ec <cgjpost2l+0x6ec>
cmpl   $0x3,0x20(%rbp)
jne    17e7 <cgjpost2l+0x6e7>
movss  -0x64(%rbp),%xmm1
movss  -0x44(%rbp),%xmm0
ucomiss %xmm1,%xmm0
ja     174d <cgjpost2l+0x64d>
movss  -0x64(%rbp),%xmm0
ucomiss -0x4c(%rbp),%xmm0
jb     179e <cgjpost2l+0x69e>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm1
movss  -0x48(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    17c0 <cgjpost2l+0x6c0>
movss  -0x50(%rbp),%xmm0
addss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x68(%rbp),%xmm0
ucomiss -0x50(%rbp),%xmm0
jb     17e2 <cgjpost2l+0x6e2>
movss  -0x50(%rbp),%xmm1
movss  -0x68(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
jmp    17e7 <cgjpost2l+0x6e7>
jmp    17ec <cgjpost2l+0x6ec>
jmp    17f1 <cgjpost2l+0x6f1>
movss  -0x64(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11d1 <cgjpost2l+0xd1>
pop    %rbp
ret

x86 assembly (clang, -O2):
<cgjpost2l>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x48(%rsp),%ebp
cmp    $0x2,%ebp
jne    1131 <cgjpost2l+0x31>
add    $0xffffffff,%r8d
add    $0xffffffff,%r9d
movss  0xedc(%rip),%xmm12
movaps %xmm12,%xmm11
test   %edx,%edx
jg     1159 <cgjpost2l+0x59>
jmp    1463 <cgjpost2l+0x363>
xor    %eax,%eax
xorps  %xmm12,%xmm12
cmp    $0x3,%ebp
sete   %al
je     1145 <cgjpost2l+0x45>
xorps  %xmm11,%xmm11
jmp    114e <cgjpost2l+0x4e>
movss  0xeb2(%rip),%xmm11
sub    %eax,%r8d
test   %edx,%edx
jle    1463 <cgjpost2l+0x363>
cvtsi2ss %r8d,%xmm14
cvtsi2ss %r9d,%xmm13
mov    0x38(%rsp),%eax
lea    (%rax,%rax,2),%r9d
movslq %ecx,%r8
mov    %edx,%r14d
shl    $0x2,%r8
movss  0xe86(%rip),%xmm10
jmp    119a <cgjpost2l+0x9a>
movaps %xmm7,%xmm3
movss  %xmm9,(%rdi)
movss  %xmm3,0x4(%rdi)
add    %r8,%rdi
add    $0xffffffffffffffff,%r14
je     1463 <cgjpost2l+0x363>
movss  (%rdi),%xmm8
movss  0x4(%rdi),%xmm5
cvttss2si %xmm8,%r11d
cvttss2si %xmm5,%ecx
lea    (%r11,%r11,2),%eax
imul   %r9d,%ecx
lea    (%rcx,%r9,1),%r10d
lea    (%r11,%r11,2),%ebp
add    $0x3,%ebp
add    %r10d,%ebp
lea    (%r11,%r11,2),%ebx
add    $0x4,%ebx
add    %r10d,%ebx
lea    (%r11,%r11,2),%edx
add    $0x5,%edx
add    %r10d,%edx
lea    (%r10,%rax,1),%r15d
lea    (%r11,%r11,2),%r13d
add    $0x1,%r13d
add    %r10d,%r13d
lea    (%r11,%r11,2),%r12d
add    $0x2,%r12d
add    %r10d,%r12d
lea    (%rcx,%rax,1),%r11d
cvttps2dq %xmm8,%xmm2
cvtdq2ps %xmm2,%xmm2
subss  %xmm2,%xmm8
mulss  %xmm0,%xmm8
cvttps2dq %xmm5,%xmm2
cvtdq2ps %xmm2,%xmm2
subss  %xmm2,%xmm5
movaps %xmm0,%xmm4
subss  %xmm8,%xmm4
movss  0xdde(%rip),%xmm2
subss  %xmm5,%xmm2
movaps %xmm8,%xmm3
mulss  %xmm5,%xmm3
mulss  %xmm4,%xmm5
movss  0x8(%rdi),%xmm9
movss  0xc(%rdi),%xmm7
movss  0x10(%rdi),%xmm15
movslq %ebp,%rbp
movaps %xmm9,%xmm6
mulss  %xmm3,%xmm6
addss  (%rsi,%rbp,4),%xmm6
movss  %xmm6,(%rsi,%rbp,4)
movslq %ebx,%rbp
movaps %xmm7,%xmm6
mulss  %xmm3,%xmm6
addss  (%rsi,%rbp,4),%xmm6
movss  %xmm6,(%rsi,%rbp,4)
movslq %edx,%rdx
mulss  %xmm15,%xmm3
addss  (%rsi,%rdx,4),%xmm3
movss  %xmm3,(%rsi,%rdx,4)
mulss  %xmm2,%xmm8
movslq %r15d,%rdx
movaps %xmm9,%xmm3
mulss  %xmm5,%xmm3
addss  (%rsi,%rdx,4),%xmm3
movss  %xmm3,(%rsi,%rdx,4)
movslq %r13d,%rdx
movaps %xmm7,%xmm3
mulss  %xmm5,%xmm3
addss  (%rsi,%rdx,4),%xmm3
movss  %xmm3,(%rsi,%rdx,4)
movslq %r12d,%rdx
mulss  %xmm15,%xmm5
addss  (%rsi,%rdx,4),%xmm5
movss  %xmm5,(%rsi,%rdx,4)
lea    0x3(%rcx,%rax,1),%edx
movslq %edx,%rdx
movaps %xmm9,%xmm3
mulss  %xmm8,%xmm3
addss  (%rsi,%rdx,4),%xmm3
movss  %xmm3,(%rsi,%rdx,4)
lea    0x4(%rcx,%rax,1),%edx
movslq %edx,%rdx
movaps %xmm7,%xmm3
mulss  %xmm8,%xmm3
addss  (%rsi,%rdx,4),%xmm3
mulss  %xmm4,%xmm2
movss  %xmm3,(%rsi,%rdx,4)
lea    0x5(%rcx,%rax,1),%edx
movslq %edx,%rdx
mulss  %xmm15,%xmm8
addss  (%rsi,%rdx,4),%xmm8
movss  %xmm8,(%rsi,%rdx,4)
movslq %r11d,%rdx
movaps %xmm9,%xmm3
mulss  %xmm2,%xmm3
addss  (%rsi,%rdx,4),%xmm3
movss  %xmm3,(%rsi,%rdx,4)
lea    0x1(%rcx,%rax,1),%edx
movslq %edx,%rdx
movaps %xmm7,%xmm3
mulss  %xmm2,%xmm3
addss  (%rsi,%rdx,4),%xmm3
movss  %xmm3,(%rsi,%rdx,4)
lea    0x2(%rcx,%rax,1),%eax
cltq
mulss  %xmm15,%xmm2
addss  (%rsi,%rax,4),%xmm2
movss  %xmm2,(%rsi,%rax,4)
movss  (%rdi),%xmm2
movss  0x4(%rdi),%xmm3
mulss  %xmm1,%xmm9
addss  %xmm2,%xmm9
mulss  %xmm1,%xmm7
addss  %xmm3,%xmm7
mov    0x48(%rsp),%eax
cmp    $0x1,%eax
jne    13e0 <cgjpost2l+0x2e0>
movaps %xmm9,%xmm2
cmpltss %xmm11,%xmm2
movaps %xmm2,%xmm3
andps  %xmm14,%xmm3
andnps %xmm10,%xmm2
orps   %xmm3,%xmm2
addss  %xmm2,%xmm9
movaps %xmm14,%xmm2
cmpnless %xmm9,%xmm2
andnps %xmm14,%xmm2
subss  %xmm2,%xmm9
movaps %xmm7,%xmm3
cmpltss %xmm12,%xmm3
movaps %xmm3,%xmm2
andps  %xmm13,%xmm2
andnps %xmm10,%xmm3
orps   %xmm2,%xmm3
addss  %xmm7,%xmm3
ucomiss %xmm13,%xmm3
jb     1183 <cgjpost2l+0x83>
subss  %xmm13,%xmm3
jmp    1183 <cgjpost2l+0x83>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x2,%eax
jne    1430 <cgjpost2l+0x330>
ucomiss %xmm9,%xmm11
ja     13f1 <cgjpost2l+0x2f1>
ucomiss %xmm14,%xmm9
jb     1406 <cgjpost2l+0x306>
movss  0x8(%rdi),%xmm4
xorps  0xc13(%rip),%xmm4
movss  %xmm4,0x8(%rdi)
movaps %xmm2,%xmm9
ucomiss %xmm7,%xmm12
ja     1416 <cgjpost2l+0x316>
ucomiss %xmm13,%xmm7
jb     1180 <cgjpost2l+0x80>
movss  0xc(%rdi),%xmm2
xorps  0xbee(%rip),%xmm2
movss  %xmm2,0xc(%rdi)
jmp    1183 <cgjpost2l+0x83>
nopl   0x0(%rax)
cmp    $0x3,%eax
jne    1180 <cgjpost2l+0x80>
ucomiss %xmm9,%xmm11
ja     1449 <cgjpost2l+0x349>
ucomiss %xmm14,%xmm9
jb     13a3 <cgjpost2l+0x2a3>
movss  0x8(%rdi),%xmm3
xorps  0xbbb(%rip),%xmm3
movss  %xmm3,0x8(%rdi)
movaps %xmm2,%xmm9
jmp    13a3 <cgjpost2l+0x2a3>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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