#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 pow(double, int);
double sqrt(double);
double LennarJonnes2D(double *coordinates) {
  double nx = 10;
  double ny = 10;
  int natoms = 10;
  double cutoff = 10;
  double eps = 0.2;
  double sigma = 3;
  double Energy = 0.0;
  for (int i = 0; i < natoms; i++) {
    for (int j = 0; j < i; j++) {
      double xdis =
          (((pow((((coordinates[i]) > (coordinates[j])) ? (coordinates[i])
                                                        : (coordinates[j])) -
                     (((coordinates[i]) < (coordinates[j])) ? (coordinates[i])
                                                            : (coordinates[j])),
                 2)) <
            (pow((((coordinates[i]) > (coordinates[j])) ? (coordinates[i])
                                                        : (coordinates[j])) -
                     (((coordinates[i]) < (coordinates[j]))
                          ? (coordinates[i])
                          : (coordinates[j])) +
                     nx,
                 2)))
               ? (pow((((coordinates[i]) > (coordinates[j]))
                           ? (coordinates[i])
                           : (coordinates[j])) -
                          (((coordinates[i]) < (coordinates[j]))
                               ? (coordinates[i])
                               : (coordinates[j])),
                      2))
               : (pow((((coordinates[i]) > (coordinates[j]))
                           ? (coordinates[i])
                           : (coordinates[j])) -
                          (((coordinates[i]) < (coordinates[j]))
                               ? (coordinates[i])
                               : (coordinates[j])) +
                          nx,
                      2)));
      double ydis =
          (((pow((((coordinates[i + natoms]) > (coordinates[j + natoms]))
                      ? (coordinates[i + natoms])
                      : (coordinates[j + natoms])) -
                     (((coordinates[i + natoms]) < (coordinates[j + natoms]))
                          ? (coordinates[i + natoms])
                          : (coordinates[j + natoms])),
                 2)) <
            (pow((((coordinates[i + natoms]) > (coordinates[j + natoms]))
                      ? (coordinates[i + natoms])
                      : (coordinates[j + natoms])) -
                     (((coordinates[i + natoms]) < (coordinates[j + natoms]))
                          ? (coordinates[i + natoms])
                          : (coordinates[j + natoms])) +
                     ny,
                 2)))
               ? (pow((((coordinates[i + natoms]) > (coordinates[j + natoms]))
                           ? (coordinates[i + natoms])
                           : (coordinates[j + natoms])) -
                          (((coordinates[i + natoms]) <
                            (coordinates[j + natoms]))
                               ? (coordinates[i + natoms])
                               : (coordinates[j + natoms])),
                      2))
               : (pow((((coordinates[i + natoms]) > (coordinates[j + natoms]))
                           ? (coordinates[i + natoms])
                           : (coordinates[j + natoms])) -
                          (((coordinates[i + natoms]) <
                            (coordinates[j + natoms]))
                               ? (coordinates[i + natoms])
                               : (coordinates[j + natoms])) +
                          ny,
                      2)));
      double distance = sqrt(xdis * ydis);
      if (distance < cutoff)
        Energy +=
            4.0 * eps * (pow(sigma / distance, 12) - pow(sigma / distance, 6));
    }
  }
  return Energy;
}


x86 assembly (clang, -O0):
<LennarJonnes2D>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
mov    %rdi,-0x8(%rbp)
movsd  0xed9(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xecc(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movl   $0xa,-0x1c(%rbp)
movsd  0xeb8(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xea3(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe8e(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    19ef <LennarJonnes2D+0x8cf>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    19dc <LennarJonnes2D+0x8bc>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    11dc <LennarJonnes2D+0xbc>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    11ee <LennarJonnes2D+0xce>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    1233 <LennarJonnes2D+0x113>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    1245 <LennarJonnes2D+0x125>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0x80(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    129c <LennarJonnes2D+0x17c>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    12b1 <LennarJonnes2D+0x191>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    12ff <LennarJonnes2D+0x1df>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1314 <LennarJonnes2D+0x1f4>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
addsd  -0x10(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0x80(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jbe    1423 <LennarJonnes2D+0x303>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    1380 <LennarJonnes2D+0x260>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1395 <LennarJonnes2D+0x275>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    13e3 <LennarJonnes2D+0x2c3>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    13f8 <LennarJonnes2D+0x2d8>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    1500 <LennarJonnes2D+0x3e0>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    145d <LennarJonnes2D+0x33d>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    1472 <LennarJonnes2D+0x352>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    14c0 <LennarJonnes2D+0x3a0>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    14d5 <LennarJonnes2D+0x3b5>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
addsd  -0x10(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x50(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    1556 <LennarJonnes2D+0x436>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
jmp    1570 <LennarJonnes2D+0x450>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    15cd <LennarJonnes2D+0x4ad>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
jmp    15e7 <LennarJonnes2D+0x4c7>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xe8(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    1656 <LennarJonnes2D+0x536>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
jmp    1670 <LennarJonnes2D+0x550>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    16cd <LennarJonnes2D+0x5ad>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
jmp    16e7 <LennarJonnes2D+0x5c7>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x108(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
addsd  -0x18(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  -0xf0(%rbp),%xmm1
ff
ucomisd %xmm1,%xmm0
jbe    1821 <LennarJonnes2D+0x701>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    1765 <LennarJonnes2D+0x645>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
jmp    177f <LennarJonnes2D+0x65f>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    17dc <LennarJonnes2D+0x6bc>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
jmp    17f6 <LennarJonnes2D+0x6d6>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
movsd  -0x120(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0x128(%rbp)
ff
jmp    1926 <LennarJonnes2D+0x806>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    186a <LennarJonnes2D+0x74a>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
jmp    1884 <LennarJonnes2D+0x764>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    18e1 <LennarJonnes2D+0x7c1>
mov    -0x8(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
jmp    18fb <LennarJonnes2D+0x7db>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
movsd  -0x140(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
addsd  -0x18(%rbp),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    19c9 <LennarJonnes2D+0x8a9>
movsd  0x6b5(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
divsd  -0x60(%rbp),%xmm0
mov    $0xc,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
divsd  -0x60(%rbp),%xmm0
mov    $0x6,%edi
call   1030 <pow@plt>
movsd  -0x150(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0x148(%rbp),%xmm0
ff
subsd  %xmm1,%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    19ce <LennarJonnes2D+0x8ae>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1199 <LennarJonnes2D+0x79>
jmp    19e1 <LennarJonnes2D+0x8c1>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1186 <LennarJonnes2D+0x66>
movsd  -0x40(%rbp),%xmm0
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<LennarJonnes2D>:
push   %r15
push   %r14
push   %rbx
sub    $0x30,%rsp
mov    %rdi,%r15
xor    %r14d,%r14d
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
jmp    114e <LennarJonnes2D+0x2e>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r14
cmp    $0xa,%r14
je     1354 <LennarJonnes2D+0x234>
test   %r14,%r14
je     1140 <LennarJonnes2D+0x20>
xor    %ebx,%ebx
jmp    1169 <LennarJonnes2D+0x49>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rbx
cmp    %rbx,%r14
je     1140 <LennarJonnes2D+0x20>
movsd  (%r15,%r14,8),%xmm1
movsd  (%r15,%rbx,8),%xmm2
movapd %xmm1,%xmm0
maxsd  %xmm2,%xmm0
minsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movapd %xmm0,0x10(%rsp)
movsd  (%r15,%r14,8),%xmm1
movsd  (%r15,%rbx,8),%xmm2
movapd %xmm1,%xmm0
maxsd  %xmm2,%xmm0
minsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  0xe47(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  (%r15,%r14,8),%xmm1
movsd  (%r15,%rbx,8),%xmm2
movapd %xmm1,%xmm3
maxsd  %xmm2,%xmm3
minsd  %xmm2,%xmm1
subsd  %xmm1,%xmm3
movapd 0x10(%rsp),%xmm1
cmpltsd %xmm0,%xmm1
movapd %xmm1,%xmm0
andpd  %xmm3,%xmm0
addsd  0xe02(%rip),%xmm3
andnpd %xmm3,%xmm1
orpd   %xmm0,%xmm1
movapd %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x50(%r15,%r14,8),%xmm1
movsd  0x50(%r15,%rbx,8),%xmm2
movapd %xmm1,%xmm0
maxsd  %xmm2,%xmm0
minsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movapd %xmm0,0x20(%rsp)
movsd  0x50(%r15,%r14,8),%xmm1
movsd  0x50(%r15,%rbx,8),%xmm2
movapd %xmm1,%xmm0
maxsd  %xmm2,%xmm0
minsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
addsd  0xd92(%rip),%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
movsd  0x50(%r15,%r14,8),%xmm1
movsd  0x50(%r15,%rbx,8),%xmm2
movapd %xmm1,%xmm3
maxsd  %xmm2,%xmm3
minsd  %xmm2,%xmm1
subsd  %xmm1,%xmm3
movapd 0x20(%rsp),%xmm1
cmpltsd %xmm0,%xmm1
movapd %xmm1,%xmm0
andpd  %xmm3,%xmm0
addsd  0xd4f(%rip),%xmm3
andnpd %xmm3,%xmm1
orpd   %xmm0,%xmm1
movapd %xmm1,%xmm0
mov    $0x2,%edi
call   1030 <pow@plt>
mulsd  0x10(%rsp),%xmm0
ucomisd 0xd43(%rip),%xmm0
jb     12e0 <LennarJonnes2D+0x1c0>
sqrtsd %xmm0,%xmm0
jmp    12e5 <LennarJonnes2D+0x1c5>
nopl   (%rax)
call   1040 <sqrt@plt>
movsd  0xd13(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    1160 <LennarJonnes2D+0x40>
movsd  0xd09(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rsp)
movapd %xmm1,%xmm0
mov    $0xc,%edi
call   1030 <pow@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x20(%rsp),%xmm0
mov    $0x6,%edi
call   1030 <pow@plt>
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0xcd1(%rip),%xmm1
movsd  0x8(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rsp)
jmp    1160 <LennarJonnes2D+0x40>
movsd  0x8(%rsp),%xmm0
add    $0x30,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

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

LLVM IR (-O2):
define double @LennarJonnes2D(double* nocapture %0) {
br label %2
2: ; preds = %1, %11
%3 = phi i64 [ 0, %1 ], [ %13, %11 ]
%4 = phi double [ 0.000000e+00, %1 ], [ %12, %11 ]
%5 = icmp eq i64 %3, 0
br i1 %5, label %11, label %6
6: ; preds = %2
%7 = getelementptr inbounds double, double* %0, i64 %3
%8 = add nuw nsw i64 %3, 10
%9 = getelementptr inbounds double, double* %0, i64 %8
br label %15
10: ; preds = %11
ret double %12
11: ; preds = %86, %2
%12 = phi double [ %4, %2 ], [ %87, %86 ]
%13 = add nuw nsw i64 %3, 1
%14 = icmp eq i64 %13, 10
br i1 %14, label %10, label %2
15: ; preds = %6, %86
%16 = phi i64 [ 0, %6 ], [ %88, %86 ]
%17 = phi double [ %4, %6 ], [ %87, %86 ]
%18 = load double, double* %7
%19 = getelementptr inbounds double, double* %0, i64 %16
%20 = load double, double* %19
%21 = fcmp ogt double %18, %20
%22 = select i1 %21, double %18, double %20
%23 = fcmp olt double %18, %20
%24 = select i1 %23, double %18, double %20
%25 = fsub double %22, %24
%26 = tail call double @pow(double %25, i32 2)
%27 = load double, double* %7
%28 = load double, double* %19
%29 = fcmp ogt double %27, %28
%30 = select i1 %29, double %27, double %28
%31 = fcmp olt double %27, %28
%32 = select i1 %31, double %27, double %28
%33 = fsub double %30, %32
%34 = fadd double %33, 1.000000e+01
%35 = tail call double @pow(double %34, i32 2)
%36 = fcmp olt double %26, %35
%37 = load double, double* %7
%38 = load double, double* %19
%39 = fcmp ogt double %37, %38
%40 = select i1 %39, double %37, double %38
%41 = fcmp olt double %37, %38
%42 = select i1 %41, double %37, double %38
%43 = fsub double %40, %42
%44 = fadd double %43, 1.000000e+01
%45 = select i1 %36, double %43, double %44
%46 = tail call double @pow(double %45, i32 2)
%47 = load double, double* %9
%48 = add nuw nsw i64 %16, 10
%49 = getelementptr inbounds double, double* %0, i64 %48
%50 = load double, double* %49
%51 = fcmp ogt double %47, %50
%52 = select i1 %51, double %47, double %50
%53 = fcmp olt double %47, %50
%54 = select i1 %53, double %47, double %50
%55 = fsub double %52, %54
%56 = tail call double @pow(double %55, i32 2)
%57 = load double, double* %9
%58 = load double, double* %49
%59 = fcmp ogt double %57, %58
%60 = select i1 %59, double %57, double %58
%61 = fcmp olt double %57, %58
%62 = select i1 %61, double %57, double %58
%63 = fsub double %60, %62
%64 = fadd double %63, 1.000000e+01
%65 = tail call double @pow(double %64, i32 2)
%66 = fcmp olt double %56, %65
%67 = load double, double* %9
%68 = load double, double* %49
%69 = fcmp ogt double %67, %68
%70 = select i1 %69, double %67, double %68
%71 = fcmp olt double %67, %68
%72 = select i1 %71, double %67, double %68
%73 = fsub double %70, %72
%74 = fadd double %73, 1.000000e+01
%75 = select i1 %66, double %73, double %74
%76 = tail call double @pow(double %75, i32 2)
%77 = fmul double %46, %76
%78 = tail call double @sqrt(double %77)
%79 = fcmp olt double %78, 1.000000e+01
br i1 %79, label %80, label %86
80: ; preds = %15
%81 = fdiv double 3.000000e+00, %78
%82 = tail call double @pow(double %81, i32 12)
%83 = tail call double @pow(double %81, i32 6)
%84 = fsub double %82, %83
%85 = tail call double @llvm.fmuladd.f64(double %84, double 8.000000e-01, double %17)
br label %86
86: ; preds = %80, %15
%87 = phi double [ %85, %80 ], [ %17, %15 ]
%88 = add nuw nsw i64 %16, 1
%89 = icmp eq i64 %88, %3
br i1 %89, label %11, label %15
}