int Calc(void) {
  double crustThick = 40000;
  double mantleThick = 150000;
  double dz = 100;
  int NCell = (crustThick + mantleThick) / dz + 0.5;
  int NNode = NCell + 1;
  dz = (crustThick + mantleThick) / NCell;
  double T[100];
  double T0 = 298;
  double termGrad = 1.5 / 100;
  int i;
  for (i = 0; i <= NNode + 1; i++) {
    T[i] = T0 + i * termGrad * dz;
  }
  printf("%f %f %f\n", T[NNode - 1], T[NNode + 1], T[NNode + 100]);
  double P[NCell], Ro[NCell], CP[NCell], H[NCell], LAMBDA[NCell], Cp, H0, P0,
      Ro0, alfa, beta, lambda;
  double depth = 0;
  const double g = 9.8;
  P[0] = P0 = 1e5;
  Ro[0] = 2300;
  int D = 1e4;
  for (i = 1; i < NCell; i++) {
    depth += dz;
    if (i < 20) {
      Ro0 = 2300;
      alfa = 3 * 9.5e-10;
      beta = 2.2e-11;
      lambda = 1.8;
      Cp = 1000;
      H0 = 1.55e-6;
    } else if (i >= 20 && i < 220) {
      Ro0 = 2700;
      alfa = 3 * 8e-10;
      beta = 2.0e-11;
      lambda = 2.42;
      Cp = 936;
      H0 = 2.56e-6;
    } else if (i >= 220 && i < 400) {
      Ro0 = 3000;
      alfa = 3 * 5.4e-10;
      beta = 1.2e-11;
      lambda = 2.41;
      Cp = 1005;
      H0 = 4.6e-7;
    } else {
      Ro0 = 3300;
      alfa = 3 * 5e-10;
      beta = 9.5e-12;
      lambda = 4.37;
      Cp = 1006;
      H0 = 1.3e-8;
    }
    P[i] = P[i - 1] + (Ro[i - 1] * g * dz);
    Ro[i] = Ro0 * ((1 + beta * (P[i] - P0)) / (1 + alfa * (T[i] - T0)));
    CP[i] = Cp;
    H[i] = H0 * exp(depth / D);
    LAMBDA[i] = lambda;
  }
  double dt, RoMin = 2300, CpMin = 936, lambdaMax = 4.37;
  dt = 0.25 * dz * dz * RoMin * CpMin / lambdaMax;
  double time;
  for (time = 0; time < 1e11; time += dt) {
    double Ttemp[NNode];
    Ttemp[0] = 298;
    Ttemp[NNode - 1] = T[NNode - 1];
    depth = 0;
    int j;
    for (j = 1; j < NNode - 1; j++) {
      depth += dz;
      Ttemp[j] = dt / (dz * Ro[j] * CP[j]) *
                     (LAMBDA[j] * (T[j + 1] - T[j]) / dz -
                      LAMBDA[j] * (T[j] - T[j - 1]) / dz) +
                 (H[j] * dt / (Ro[j] * CP[j])) - T[j];
    }
    for (j = 0; j < NNode; j++) {
      T[j] = Ttemp[j];
    }
    for (i = 1; i < NCell; i++) {
      depth += dz;
      if (i < 20) {
        Ro0 = 2300;
        alfa = 3 * 9.5e-10;
        beta = 2.2e-11;
      } else if (i >= 20 && i < 220) {
        Ro0 = 2700;
        alfa = 3 * 8e-10;
        beta = 2.0e-11;
      } else if (i >= 220 && i < 400) {
        Ro0 = 3000;
        alfa = 3 * 5.4e-10;
        beta = 1.2e-11;
      } else {
        Ro0 = 3300;
        alfa = 3 * 5e-10;
        beta = 9.5e-12;
      }
      P[i] = P[i - 1] + (Ro[i - 1] * g * dz);
      Ro[i] = Ro0 * ((1 + beta * (P[i] - P0)) / (1 + alfa * (T[i] - T0)));
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<Calc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x450,%rsp
movsd  0xef5(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  0xee0(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xecb(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x8(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  0xea7(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
movsd  -0x8(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe6b(%rip),%xmm0
movsd  %xmm0,-0x348(%rbp)
ff
movsd  0xe53(%rip),%xmm0
movsd  %xmm0,-0x350(%rbp)
ff
movl   $0x0,-0x354(%rbp)
mov    -0x354(%rbp),%eax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     121c <Calc+0xfc>
movsd  -0x348(%rbp),%xmm1
ff
cvtsi2sdl -0x354(%rbp),%xmm0
ff
mulsd  -0x350(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq -0x354(%rbp),%rax
movsd  %xmm0,-0x340(%rbp,%rax,8)
ff ff
mov    -0x354(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x354(%rbp)
jmp    11bf <Calc+0x9f>
movslq -0x20(%rbp),%rax
mov    %eax,%ecx
add    $0xffffffff,%ecx
movslq %ecx,%rcx
movsd  -0x340(%rbp,%rcx,8),%xmm0
ff ff
movsd  -0x338(%rbp,%rax,8),%xmm1
ff ff
movsd  -0x20(%rbp,%rax,8),%xmm2
lea    0xed1(%rip),%rdi
mov    $0x3,%al
call   1030 <printf@plt>
mov    -0x1c(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x360(%rbp)
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x440(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x368(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,%edx
lea    0xf(,%rdx,8),%rsi
and    $0xfffffffffffffff0,%rsi
mov    %rsp,%rax
sub    %rsi,%rax
mov    %rax,-0x438(%rbp)
mov    %rax,%rsp
mov    %rdx,-0x370(%rbp)
mov    -0x1c(%rbp),%edx
lea    0xf(,%rdx,8),%rdi
and    $0xfffffffffffffff0,%rdi
mov    %rsp,%rsi
sub    %rdi,%rsi
mov    %rsi,-0x430(%rbp)
mov    %rsi,%rsp
mov    %rdx,-0x378(%rbp)
mov    -0x1c(%rbp),%edx
lea    0xf(,%rdx,8),%rdi
and    $0xfffffffffffffff0,%rdi
mov    %rsp,%rsi
sub    %rdi,%rsi
mov    %rsi,-0x428(%rbp)
mov    %rsi,%rsp
mov    %rdx,-0x380(%rbp)
mov    -0x1c(%rbp),%edx
lea    0xf(,%rdx,8),%rdi
and    $0xfffffffffffffff0,%rdi
mov    %rsp,%rsi
sub    %rdi,%rsi
mov    %rsi,-0x420(%rbp)
mov    %rsi,%rsp
mov    %rdx,-0x388(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x3c8(%rbp)
ff
movsd  0xd15(%rip),%xmm0
movsd  %xmm0,-0x3d0(%rbp)
ff
movsd  0xcfd(%rip),%xmm0
movsd  %xmm0,-0x3a0(%rbp)
ff
movsd  0xced(%rip),%xmm0
movsd  %xmm0,(%rcx)
movsd  0xcd9(%rip),%xmm0
movsd  %xmm0,(%rax)
movl   $0x2710,-0x3d4(%rbp)
movl   $0x1,-0x354(%rbp)
mov    -0x354(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    16d4 <Calc+0x5b4>
movsd  -0x18(%rbp),%xmm0
addsd  -0x3c8(%rbp),%xmm0
ff
movsd  %xmm0,-0x3c8(%rbp)
ff
cmpl   $0x14,-0x354(%rbp)
jge    1405 <Calc+0x2e5>
movsd  0xc88(%rip),%xmm0
movsd  %xmm0,-0x3a8(%rbp)
ff
movsd  0xd00(%rip),%xmm0
movsd  %xmm0,-0x3b0(%rbp)
ff
movsd  0xce8(%rip),%xmm0
movsd  %xmm0,-0x3b8(%rbp)
ff
movsd  0xd38(%rip),%xmm0
movsd  %xmm0,-0x3c0(%rbp)
ff
movsd  0xd20(%rip),%xmm0
movsd  %xmm0,-0x390(%rbp)
ff
movsd  0xd08(%rip),%xmm0
movsd  %xmm0,-0x398(%rbp)
ff
jmp    1576 <Calc+0x456>
cmpl   $0x14,-0x354(%rbp)
jl     1487 <Calc+0x367>
cmpl   $0xdc,-0x354(%rbp)
jge    1487 <Calc+0x367>
movsd  0xc7e(%rip),%xmm0
movsd  %xmm0,-0x3a8(%rbp)
ff
movsd  0xc66(%rip),%xmm0
movsd  %xmm0,-0x3b0(%rbp)
ff
movsd  0xc4e(%rip),%xmm0
movsd  %xmm0,-0x3b8(%rbp)
ff
movsd  0xc9e(%rip),%xmm0
movsd  %xmm0,-0x3c0(%rbp)
ff
movsd  0xbee(%rip),%xmm0
movsd  %xmm0,-0x390(%rbp)
ff
movsd  0xc76(%rip),%xmm0
movsd  %xmm0,-0x398(%rbp)
ff
jmp    1571 <Calc+0x451>
cmpl   $0xdc,-0x354(%rbp)
jl     150c <Calc+0x3ec>
cmpl   $0x190,-0x354(%rbp)
jge    150c <Calc+0x3ec>
movsd  0xbe1(%rip),%xmm0
movsd  %xmm0,-0x3a8(%rbp)
ff
movsd  0xbc9(%rip),%xmm0
movsd  %xmm0,-0x3b0(%rbp)
ff
movsd  0xbb1(%rip),%xmm0
movsd  %xmm0,-0x3b8(%rbp)
ff
movsd  0xc09(%rip),%xmm0
movsd  %xmm0,-0x3c0(%rbp)
ff
movsd  0xbf1(%rip),%xmm0
movsd  %xmm0,-0x390(%rbp)
ff
movsd  0xbd9(%rip),%xmm0
movsd  %xmm0,-0x398(%rbp)
ff
jmp    156c <Calc+0x44c>
movsd  0xb64(%rip),%xmm0
movsd  %xmm0,-0x3a8(%rbp)
ff
movsd  0xb4c(%rip),%xmm0
movsd  %xmm0,-0x3b0(%rbp)
ff
movsd  0xb34(%rip),%xmm0
movsd  %xmm0,-0x3b8(%rbp)
ff
movsd  0xb0c(%rip),%xmm0
movsd  %xmm0,-0x3c0(%rbp)
ff
movsd  0xb7c(%rip),%xmm0
movsd  %xmm0,-0x390(%rbp)
ff
movsd  0xb64(%rip),%xmm0
movsd  %xmm0,-0x398(%rbp)
ff
jmp    1571 <Calc+0x451>
jmp    1576 <Calc+0x456>
mov    -0x430(%rbp),%rax
mov    -0x438(%rbp),%rcx
mov    -0x440(%rbp),%rdx
mov    -0x354(%rbp),%esi
sub    $0x1,%esi
movslq %esi,%rsi
movsd  (%rdx,%rsi,8),%xmm1
mov    -0x354(%rbp),%esi
sub    $0x1,%esi
movslq %esi,%rsi
movsd  0xa90(%rip),%xmm0
mulsd  (%rcx,%rsi,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq -0x354(%rbp),%rsi
movsd  %xmm0,(%rdx,%rsi,8)
movsd  -0x3a8(%rbp),%xmm0
ff
movsd  -0x3b8(%rbp),%xmm1
ff
movslq -0x354(%rbp),%rsi
movsd  (%rdx,%rsi,8),%xmm2
subsd  -0x3a0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
movsd  0xac2(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x3b0(%rbp),%xmm2
ff
movslq -0x354(%rbp),%rdx
movsd  -0x340(%rbp,%rdx,8),%xmm3
ff ff
subsd  -0x348(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
movsd  0xa92(%rip),%xmm3
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movslq -0x354(%rbp),%rdx
movsd  %xmm0,(%rcx,%rdx,8)
movsd  -0x390(%rbp),%xmm0
ff
movslq -0x354(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x398(%rbp),%xmm0
ff
movsd  %xmm0,-0x448(%rbp)
ff
movsd  -0x3c8(%rbp),%xmm0
ff
cvtsi2sdl -0x3d4(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1040 <exp@plt>
mov    -0x428(%rbp),%rcx
mov    -0x420(%rbp),%rax
movaps %xmm0,%xmm1
movsd  -0x448(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movslq -0x354(%rbp),%rdx
movsd  %xmm0,(%rcx,%rdx,8)
movsd  -0x3c0(%rbp),%xmm0
ff
movslq -0x354(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x354(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x354(%rbp)
jmp    136f <Calc+0x24f>
movsd  0x954(%rip),%xmm0
movsd  %xmm0,-0x3e8(%rbp)
ff
movsd  0x96c(%rip),%xmm0
movsd  %xmm0,-0x3f0(%rbp)
ff
movsd  0x954(%rip),%xmm0
movsd  %xmm0,-0x3f8(%rbp)
ff
movsd  0x93c(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x3e8(%rbp),%xmm0
ff
mulsd  -0x3f0(%rbp),%xmm0
ff
divsd  -0x3f8(%rbp),%xmm0
ff
movsd  %xmm0,-0x3e0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x400(%rbp)
ff
movsd  0x917(%rip),%xmm0
ucomisd -0x400(%rbp),%xmm0
ff
jbe    1bcc <Calc+0xaac>
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
mov    %rsp,%rax
mov    %rax,-0x408(%rbp)
lea    0xf(,%rcx,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rax
sub    %rdx,%rax
mov    %rax,-0x450(%rbp)
mov    %rax,%rsp
mov    %rcx,-0x410(%rbp)
movsd  0x877(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  -0x340(%rbp,%rcx,8),%xmm0
ff ff
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x3c8(%rbp)
ff
movl   $0x1,-0x414(%rbp)
mov    -0x414(%rbp),%eax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1927 <Calc+0x807>
mov    -0x450(%rbp),%rax
mov    -0x430(%rbp),%rcx
mov    -0x438(%rbp),%rdx
mov    -0x428(%rbp),%rsi
mov    -0x420(%rbp),%rdi
movsd  -0x18(%rbp),%xmm0
addsd  -0x3c8(%rbp),%xmm0
ff
movsd  %xmm0,-0x3c8(%rbp)
ff
movsd  -0x3e0(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
movslq -0x414(%rbp),%r8
mulsd  (%rdx,%r8,8),%xmm1
movslq -0x414(%rbp),%r8
mulsd  (%rcx,%r8,8),%xmm1
divsd  %xmm1,%xmm0
movslq -0x414(%rbp),%r8
movsd  (%rdi,%r8,8),%xmm2
mov    -0x414(%rbp),%r8d
add    $0x1,%r8d
movslq %r8d,%r8
movsd  -0x340(%rbp,%r8,8),%xmm1
fc ff ff
movslq -0x414(%rbp),%r8
subsd  -0x340(%rbp,%r8,8),%xmm1
fc ff ff
mulsd  %xmm1,%xmm2
divsd  -0x18(%rbp),%xmm2
movslq -0x414(%rbp),%r8
movsd  (%rdi,%r8,8),%xmm1
movslq -0x414(%rbp),%rdi
movsd  -0x340(%rbp,%rdi,8),%xmm3
ff ff
mov    -0x414(%rbp),%edi
sub    $0x1,%edi
movslq %edi,%rdi
subsd  -0x340(%rbp,%rdi,8),%xmm3
ff ff
mulsd  %xmm3,%xmm1
divsd  -0x18(%rbp),%xmm1
subsd  %xmm1,%xmm2
movslq -0x414(%rbp),%rdi
movsd  (%rsi,%rdi,8),%xmm1
mulsd  -0x3e0(%rbp),%xmm1
ff
movslq -0x414(%rbp),%rsi
movsd  (%rdx,%rsi,8),%xmm3
movslq -0x414(%rbp),%rdx
mulsd  (%rcx,%rdx,8),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq -0x414(%rbp),%rcx
subsd  -0x340(%rbp,%rcx,8),%xmm0
ff ff
movslq -0x414(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x414(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x414(%rbp)
jmp    17ca <Calc+0x6aa>
movl   $0x0,-0x414(%rbp)
mov    -0x414(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1977 <Calc+0x857>
mov    -0x450(%rbp),%rax
movslq -0x414(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x414(%rbp),%rax
movsd  %xmm0,-0x340(%rbp,%rax,8)
ff ff
mov    -0x414(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x414(%rbp)
jmp    1931 <Calc+0x811>
movl   $0x1,-0x354(%rbp)
mov    -0x354(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1ba5 <Calc+0xa85>
movsd  -0x18(%rbp),%xmm0
addsd  -0x3c8(%rbp),%xmm0
ff
movsd  %xmm0,-0x3c8(%rbp)
ff
cmpl   $0x14,-0x354(%rbp)
jge    19e7 <Calc+0x8c7>
movsd  0x676(%rip),%xmm0
movsd  %xmm0,-0x3a8(%rbp)
ff
movsd  0x6ee(%rip),%xmm0
movsd  %xmm0,-0x3b0(%rbp)
ff
movsd  0x6d6(%rip),%xmm0
movsd  %xmm0,-0x3b8(%rbp)
ff
jmp    1ac8 <Calc+0x9a8>
cmpl   $0x14,-0x354(%rbp)
jl     1a39 <Calc+0x919>
cmpl   $0xdc,-0x354(%rbp)
jge    1a39 <Calc+0x919>
movsd  0x69c(%rip),%xmm0
movsd  %xmm0,-0x3a8(%rbp)
ff
movsd  0x684(%rip),%xmm0
movsd  %xmm0,-0x3b0(%rbp)
ff
movsd  0x66c(%rip),%xmm0
movsd  %xmm0,-0x3b8(%rbp)
ff
jmp    1ac3 <Calc+0x9a3>
cmpl   $0xdc,-0x354(%rbp)
jl     1a8e <Calc+0x96e>
cmpl   $0x190,-0x354(%rbp)
jge    1a8e <Calc+0x96e>
movsd  0x62f(%rip),%xmm0
movsd  %xmm0,-0x3a8(%rbp)
ff
movsd  0x617(%rip),%xmm0
movsd  %xmm0,-0x3b0(%rbp)
ff
movsd  0x5ff(%rip),%xmm0
movsd  %xmm0,-0x3b8(%rbp)
ff
jmp    1abe <Calc+0x99e>
movsd  0x5e2(%rip),%xmm0
movsd  %xmm0,-0x3a8(%rbp)
ff
movsd  0x5ca(%rip),%xmm0
movsd  %xmm0,-0x3b0(%rbp)
ff
movsd  0x5b2(%rip),%xmm0
movsd  %xmm0,-0x3b8(%rbp)
ff
jmp    1ac3 <Calc+0x9a3>
jmp    1ac8 <Calc+0x9a8>
mov    -0x438(%rbp),%rax
mov    -0x440(%rbp),%rcx
mov    -0x354(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movsd  (%rcx,%rdx,8),%xmm1
mov    -0x354(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movsd  0x545(%rip),%xmm0
mulsd  (%rax,%rdx,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq -0x354(%rbp),%rdx
movsd  %xmm0,(%rcx,%rdx,8)
movsd  -0x3a8(%rbp),%xmm0
ff
movsd  -0x3b8(%rbp),%xmm1
ff
movslq -0x354(%rbp),%rdx
movsd  (%rcx,%rdx,8),%xmm2
subsd  -0x3a0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
movsd  0x577(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x3b0(%rbp),%xmm2
ff
movslq -0x354(%rbp),%rcx
movsd  -0x340(%rbp,%rcx,8),%xmm3
ff ff
subsd  -0x348(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
movsd  0x547(%rip),%xmm3
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movslq -0x354(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x354(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x354(%rbp)
jmp    1981 <Calc+0x861>
mov    -0x408(%rbp),%rax
mov    %rax,%rsp
movsd  -0x3e0(%rbp),%xmm0
ff
addsd  -0x400(%rbp),%xmm0
ff
movsd  %xmm0,-0x400(%rbp)
ff
jmp    1741 <Calc+0x621>
mov    -0x360(%rbp),%rax
mov    %rax,%rsp
xor    %eax,%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Calc>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x348,%rsp
movdqa 0xec4(%rip),%xmm1
mov    $0x6,%eax
movdqa 0xec6(%rip),%xmm8
movapd 0xece(%rip),%xmm2
movapd 0xed6(%rip),%xmm3
movapd 0xede(%rip),%xmm4
movdqa 0xee5(%rip),%xmm9
movdqa 0xeed(%rip),%xmm6
movdqa 0xef5(%rip),%xmm7
nopl   0x0(%rax,%rax,1)
movdqa %xmm1,%xmm0
cvtdq2pd %xmm1,%xmm5
paddd  %xmm8,%xmm0
cvtdq2pd %xmm0,%xmm0
mulpd  %xmm2,%xmm5
mulpd  %xmm2,%xmm0
mulpd  %xmm3,%xmm5
addpd  %xmm4,%xmm5
mulpd  %xmm3,%xmm0
addpd  %xmm4,%xmm0
movapd %xmm5,-0x3a0(%rbp,%rax,8)
ff ff
movapd %xmm0,-0x390(%rbp,%rax,8)
ff ff
cmp    $0x76e,%rax
je     1213 <Calc+0xf3>
movdqa %xmm1,%xmm0
paddd  %xmm9,%xmm0
movdqa %xmm1,%xmm5
paddd  %xmm6,%xmm5
cvtdq2pd %xmm0,%xmm0
cvtdq2pd %xmm5,%xmm5
mulpd  %xmm2,%xmm0
mulpd  %xmm2,%xmm5
mulpd  %xmm3,%xmm0
addpd  %xmm4,%xmm0
mulpd  %xmm3,%xmm5
addpd  %xmm4,%xmm5
movapd %xmm0,-0x380(%rbp,%rax,8)
ff ff
movapd %xmm5,-0x370(%rbp,%rax,8)
ff ff
paddd  %xmm7,%xmm1
add    $0x8,%rax
jmp    1180 <Calc+0x60>
movabs $0x40a8980000000000,%rax
98 a8 40
mov    %rax,0x37f0(%rbp)
movabs $0x40a89b0000000000,%rax
9b a8 40
mov    %rax,0x37f8(%rbp)
movabs $0x40a89dffffffffff,%rax
9d a8 40
mov    %rax,0x3800(%rbp)
movsd  0x3b18(%rbp),%xmm2
lea    0xf43(%rip),%rdi
movsd  0xeb3(%rip),%xmm0
movsd  0xeb3(%rip),%xmm1
mov    $0x3,%al
call   1030 <printf@plt>
mov    %rsp,%r14
mov    %rsp,%rax
lea    -0x3b60(%rax),%r15
mov    %r15,%rsp
mov    %rsp,%rcx
lea    -0x3b60(%rcx),%rbx
mov    %rbx,%rsp
movabs $0x40f86a0000000000,%rdx
6a f8 40
mov    %rdx,-0x3b60(%rax)
movabs $0x40a1f80000000000,%rax
f8 a1 40
mov    %rax,-0x3b60(%rcx)
xorpd  %xmm3,%xmm3
mov    $0x1,%r13d
movsd  0xe63(%rip),%xmm0
movaps %xmm0,-0x50(%rbp)
movsd  0xe5f(%rip),%xmm0
movsd  0xe5f(%rip),%xmm2
lea    0xde8(%rip),%r12
movapd %xmm0,-0x40(%rbp)
jmp    1382 <Calc+0x262>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movapd -0x40(%rbp),%xmm5
mulsd  0xe43(%rip),%xmm5
mulsd  %xmm2,%xmm5
movapd -0x50(%rbp),%xmm4
addsd  %xmm5,%xmm4
movsd  %xmm4,(%r15,%r13,8)
movapd %xmm4,-0x50(%rbp)
movhpd -0x370(%rbp,%r13,8),%xmm4
fc ff ff
addpd  0xda9(%rip),%xmm4
mulpd  %xmm1,%xmm4
addpd  0xdad(%rip),%xmm4
movapd %xmm4,%xmm1
unpckhpd %xmm4,%xmm1
divsd  %xmm1,%xmm4
mulsd  %xmm0,%xmm4
movapd %xmm4,-0x40(%rbp)
movsd  %xmm4,(%rbx,%r13,8)
movapd %xmm3,%xmm0
divsd  0xdee(%rip),%xmm0
movsd  %xmm3,-0x30(%rbp)
call   1040 <exp@plt>
movsd  0xdc4(%rip),%xmm2
movsd  -0x30(%rbp),%xmm3
add    $0x1,%r13
cmp    $0x76c,%r13
je     1404 <Calc+0x2e4>
addsd  %xmm2,%xmm3
movsd  0xd9a(%rip),%xmm0
movdqa 0xcea(%rip),%xmm1
cmp    $0x14,%r13
jb     12f0 <Calc+0x1d0>
movsd  0xd90(%rip),%xmm0
movdqa 0xce0(%rip),%xmm1
cmp    $0xdc,%r13
jb     12f0 <Calc+0x1d0>
xor    %eax,%eax
cmp    $0x190,%r13
setb   %al
movd   %eax,%xmm0
pshufd $0x44,%xmm0,%xmm0
psllq  $0x3f,%xmm0
psrad  $0x1f,%xmm0
pshufd $0xf5,%xmm0,%xmm1
movdqa %xmm1,%xmm0
pandn  0xcb3(%rip),%xmm0
pand   0xcbb(%rip),%xmm1
por    %xmm0,%xmm1
movsd  (%r12,%rax,8),%xmm0
jmp    12f0 <Calc+0x1d0>
movapd %xmm2,%xmm8
xorpd  %xmm10,%xmm10
movsd  0xd11(%rip),%xmm14
movsd  0xd30(%rip),%xmm15
movsd  0xd30(%rip),%xmm0
movsd  0xd40(%rip),%xmm4
movsd  0xd40(%rip),%xmm5
movsd  0xd40(%rip),%xmm6
movsd  0xd47(%rip),%xmm9
movsd  0xce6(%rip),%xmm11
movsd  0xd05(%rip),%xmm12
movsd  0xd04(%rip),%xmm13
lea    0xc85(%rip),%rax
lea    0xc8e(%rip),%rcx
jmp    1494 <Calc+0x374>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
addsd  0xcff(%rip),%xmm10
ucomisd %xmm10,%xmm9
jbe    154d <Calc+0x42d>
mov    $0x1,%edx
jmp    14fb <Calc+0x3db>
nopl   0x0(%rax,%rax,1)
movsd  -0x8(%rbx,%rdx,8),%xmm7
mulsd  0xc92(%rip),%xmm7
mulsd  %xmm8,%xmm7
addsd  -0x8(%r15,%rdx,8),%xmm7
movsd  %xmm7,(%r15,%rdx,8)
addsd  %xmm4,%xmm7
mulsd  %xmm3,%xmm7
addsd  %xmm5,%xmm7
movsd  -0x370(%rbp,%rdx,8),%xmm3
ff ff
addsd  %xmm6,%xmm3
mulsd  %xmm2,%xmm3
addsd  %xmm5,%xmm3
divsd  %xmm3,%xmm7
mulsd  %xmm1,%xmm7
movsd  %xmm7,(%rbx,%rdx,8)
add    $0x1,%rdx
cmp    $0x76c,%rdx
je     1480 <Calc+0x360>
movapd %xmm0,%xmm3
movapd %xmm15,%xmm2
movapd %xmm14,%xmm1
cmp    $0x14,%rdx
jb     14a0 <Calc+0x380>
movapd %xmm13,%xmm3
movapd %xmm12,%xmm2
movapd %xmm11,%xmm1
cmp    $0xdc,%rdx
jb     14a0 <Calc+0x380>
xor    %esi,%esi
cmp    $0x190,%rdx
setb   %sil
movsd  (%rax,%rsi,8),%xmm3
movsd  (%rcx,%rsi,8),%xmm2
movsd  (%r12,%rsi,8),%xmm1
jmp    14a0 <Calc+0x380>
mov    %r14,%rsp
xor    %eax,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [10 x i8] c"%f %f %f\0A\00"
define i32 @Calc() {
%1 = alloca double
%2 = alloca double
%3 = alloca double
%4 = alloca i32
%5 = alloca i32
%6 = alloca [100 x double]
%7 = alloca double
%8 = alloca double
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i64
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
%15 = alloca i64
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca i32
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca i8*
%32 = alloca i64
%33 = alloca i32
store double 4.000000e+04, double* %1
store double 1.500000e+05, double* %2
store double 1.000000e+02, double* %3
%34 = load double, double* %1
%35 = load double, double* %2
%36 = fadd double %34, %35
%37 = load double, double* %3
%38 = fdiv double %36, %37
%39 = fadd double %38, 5.000000e-01
%40 = fptosi double %39 to i32
store i32 %40, i32* %4
%41 = load i32, i32* %4
%42 = add nsw i32 %41, 1
store i32 %42, i32* %5
%43 = load double, double* %1
%44 = load double, double* %2
%45 = fadd double %43, %44
%46 = load i32, i32* %4
%47 = sitofp i32 %46 to double
%48 = fdiv double %45, %47
store double %48, double* %3
store double 2.980000e+02, double* %7
store double 1.500000e-02, double* %8
store i32 0, i32* %9
br label %49
49: ; preds = %65, %0
%50 = load i32, i32* %9
%51 = load i32, i32* %5
%52 = add nsw i32 %51, 1
%53 = icmp sle i32 %50, %52
br i1 %53, label %54, label %68
54: ; preds = %49
%55 = load double, double* %7
%56 = load i32, i32* %9
%57 = sitofp i32 %56 to double
%58 = load double, double* %8
%59 = fmul double %57, %58
%60 = load double, double* %3
%61 = call double @llvm.fmuladd.f64(double %59, double %60, double %55)
%62 = load i32, i32* %9
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %63
store double %61, double* %64
br label %65
65: ; preds = %54
%66 = load i32, i32* %9
%67 = add nsw i32 %66, 1
store i32 %67, i32* %9
br label %49
68: ; preds = %49
%69 = load i32, i32* %5
%70 = sub nsw i32 %69, 1
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %71
%73 = load double, double* %72
%74 = load i32, i32* %5
%75 = add nsw i32 %74, 1
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %76
%78 = load double, double* %77
%79 = load i32, i32* %5
%80 = add nsw i32 %79, 100
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %81
%83 = load double, double* %82
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), double %73, double %78, double %83)
%85 = load i32, i32* %4
%86 = zext i32 %85 to i64
%87 = call i8* @llvm.stacksave()
store i8* %87, i8** %10
%88 = alloca double, i64 %86
store i64 %86, i64* %11
%89 = load i32, i32* %4
%90 = zext i32 %89 to i64
%91 = alloca double, i64 %90
store i64 %90, i64* %12
%92 = load i32, i32* %4
%93 = zext i32 %92 to i64
%94 = alloca double, i64 %93
store i64 %93, i64* %13
%95 = load i32, i32* %4
%96 = zext i32 %95 to i64
%97 = alloca double, i64 %96
store i64 %96, i64* %14
%98 = load i32, i32* %4
%99 = zext i32 %98 to i64
%100 = alloca double, i64 %99
store i64 %99, i64* %15
store double 0.000000e+00, double* %23
store double 9.800000e+00, double* %24
store double 1.000000e+05, double* %18
%101 = getelementptr inbounds double, double* %88, i64 0
store double 1.000000e+05, double* %101
%102 = getelementptr inbounds double, double* %91, i64 0
store double 2.300000e+03, double* %102
store i32 10000, i32* %25
store i32 1, i32* %9
br label %103
103: ; preds = %188, %68
%104 = load i32, i32* %9
%105 = load i32, i32* %4
%106 = icmp slt i32 %104, %105
br i1 %106, label %107, label %191
107: ; preds = %103
%108 = load double, double* %3
%109 = load double, double* %23
%110 = fadd double %109, %108
store double %110, double* %23
%111 = load i32, i32* %9
%112 = icmp slt i32 %111, 20
br i1 %112, label %113, label %114
113: ; preds = %107
store double 2.300000e+03, double* %19
store double 2.850000e-09, double* %20
store double 2.200000e-11, double* %21
store double 1.800000e+00, double* %22
store double 1.000000e+03, double* %16
store double 1.550000e-06, double* %17
br label %131
114: ; preds = %107
%115 = load i32, i32* %9
%116 = icmp sge i32 %115, 20
br i1 %116, label %117, label %121
117: ; preds = %114
%118 = load i32, i32* %9
%119 = icmp slt i32 %118, 220
br i1 %119, label %120, label %121
120: ; preds = %117
store double 2.700000e+03, double* %19
store double 2.400000e-09, double* %20
store double 2.000000e-11, double* %21
store double 2.420000e+00, double* %22
store double 9.360000e+02, double* %16
store double 2.560000e-06, double* %17
br label %130
121: ; preds = %117, %114
%122 = load i32, i32* %9
%123 = icmp sge i32 %122, 220
br i1 %123, label %124, label %128
124: ; preds = %121
%125 = load i32, i32* %9
%126 = icmp slt i32 %125, 400
br i1 %126, label %127, label %128
127: ; preds = %124
store double 3.000000e+03, double* %19
store double 1.620000e-09, double* %20
store double 1.200000e-11, double* %21
store double 2.410000e+00, double* %22
store double 1.005000e+03, double* %16
store double 4.600000e-07, double* %17
br label %129
128: ; preds = %124, %121
store double 3.300000e+03, double* %19
store double 0x3E19C511DC3A41E0, double* %20
store double 0x3DA4E406496685F4, double* %21
store double 4.370000e+00, double* %22
store double 1.006000e+03, double* %16
store double 1.300000e-08, double* %17
br label %129
129: ; preds = %128, %127
br label %130
130: ; preds = %129, %120
br label %131
131: ; preds = %130, %113
%132 = load i32, i32* %9
%133 = sub nsw i32 %132, 1
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds double, double* %88, i64 %134
%136 = load double, double* %135
%137 = load i32, i32* %9
%138 = sub nsw i32 %137, 1
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds double, double* %91, i64 %139
%141 = load double, double* %140
%142 = fmul double %141, 9.800000e+00
%143 = load double, double* %3
%144 = call double @llvm.fmuladd.f64(double %142, double %143, double %136)
%145 = load i32, i32* %9
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds double, double* %88, i64 %146
store double %144, double* %147
%148 = load double, double* %19
%149 = load double, double* %21
%150 = load i32, i32* %9
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds double, double* %88, i64 %151
%153 = load double, double* %152
%154 = load double, double* %18
%155 = fsub double %153, %154
%156 = call double @llvm.fmuladd.f64(double %149, double %155, double 1.000000e+00)
%157 = load double, double* %20
%158 = load i32, i32* %9
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %159
%161 = load double, double* %160
%162 = load double, double* %7
%163 = fsub double %161, %162
%164 = call double @llvm.fmuladd.f64(double %157, double %163, double 1.000000e+00)
%165 = fdiv double %156, %164
%166 = fmul double %148, %165
%167 = load i32, i32* %9
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds double, double* %91, i64 %168
store double %166, double* %169
%170 = load double, double* %16
%171 = load i32, i32* %9
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds double, double* %94, i64 %172
store double %170, double* %173
%174 = load double, double* %17
%175 = load double, double* %23
%176 = load i32, i32* %25
%177 = sitofp i32 %176 to double
%178 = fdiv double %175, %177
%179 = call double @exp(double %178)
%180 = fmul double %174, %179
%181 = load i32, i32* %9
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds double, double* %97, i64 %182
store double %180, double* %183
%184 = load double, double* %22
%185 = load i32, i32* %9
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds double, double* %100, i64 %186
store double %184, double* %187
br label %188
188: ; preds = %131
%189 = load i32, i32* %9
%190 = add nsw i32 %189, 1
store i32 %190, i32* %9
br label %103
191: ; preds = %103
store double 2.300000e+03, double* %27
store double 9.360000e+02, double* %28
store double 4.370000e+00, double* %29
%192 = load double, double* %3
%193 = fmul double 2.500000e-01, %192
%194 = load double, double* %3
%195 = fmul double %193, %194
%196 = load double, double* %27
%197 = fmul double %195, %196
%198 = load double, double* %28
%199 = fmul double %197, %198
%200 = load double, double* %29
%201 = fdiv double %199, %200
store double %201, double* %26
store double 0.000000e+00, double* %30
br label %202
202: ; preds = %394, %191
%203 = load double, double* %30
%204 = fcmp olt double %203, 1.000000e+11
br i1 %204, label %205, label %398
205: ; preds = %202
%206 = load i32, i32* %5
%207 = zext i32 %206 to i64
%208 = call i8* @llvm.stacksave()
store i8* %208, i8** %31
%209 = alloca double, i64 %207
store i64 %207, i64* %32
%210 = getelementptr inbounds double, double* %209, i64 0
store double 2.980000e+02, double* %210
%211 = load i32, i32* %5
%212 = sub nsw i32 %211, 1
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %213
%215 = load double, double* %214
%216 = load i32, i32* %5
%217 = sub nsw i32 %216, 1
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds double, double* %209, i64 %218
store double %215, double* %219
store double 0.000000e+00, double* %23
store i32 1, i32* %33
br label %220
220: ; preds = %302, %205
%221 = load i32, i32* %33
%222 = load i32, i32* %5
%223 = sub nsw i32 %222, 1
%224 = icmp slt i32 %221, %223
br i1 %224, label %225, label %305
225: ; preds = %220
%226 = load double, double* %3
%227 = load double, double* %23
%228 = fadd double %227, %226
store double %228, double* %23
%229 = load double, double* %26
%230 = load double, double* %3
%231 = load i32, i32* %33
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds double, double* %91, i64 %232
%234 = load double, double* %233
%235 = fmul double %230, %234
%236 = load i32, i32* %33
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds double, double* %94, i64 %237
%239 = load double, double* %238
%240 = fmul double %235, %239
%241 = fdiv double %229, %240
%242 = load i32, i32* %33
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds double, double* %100, i64 %243
%245 = load double, double* %244
%246 = load i32, i32* %33
%247 = add nsw i32 %246, 1
%248 = sext i32 %247 to i64
%249 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %248
%250 = load double, double* %249
%251 = load i32, i32* %33
%252 = sext i32 %251 to i64
%253 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %252
%254 = load double, double* %253
%255 = fsub double %250, %254
%256 = fmul double %245, %255
%257 = load double, double* %3
%258 = fdiv double %256, %257
%259 = load i32, i32* %33
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds double, double* %100, i64 %260
%262 = load double, double* %261
%263 = load i32, i32* %33
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %264
%266 = load double, double* %265
%267 = load i32, i32* %33
%268 = sub nsw i32 %267, 1
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %269
%271 = load double, double* %270
%272 = fsub double %266, %271
%273 = fmul double %262, %272
%274 = load double, double* %3
%275 = fdiv double %273, %274
%276 = fsub double %258, %275
%277 = load i32, i32* %33
%278 = sext i32 %277 to i64
%279 = getelementptr inbounds double, double* %97, i64 %278
%280 = load double, double* %279
%281 = load double, double* %26
%282 = fmul double %280, %281
%283 = load i32, i32* %33
%284 = sext i32 %283 to i64
%285 = getelementptr inbounds double, double* %91, i64 %284
%286 = load double, double* %285
%287 = load i32, i32* %33
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds double, double* %94, i64 %288
%290 = load double, double* %289
%291 = fmul double %286, %290
%292 = fdiv double %282, %291
%293 = call double @llvm.fmuladd.f64(double %241, double %276, double %292)
%294 = load i32, i32* %33
%295 = sext i32 %294 to i64
%296 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %295
%297 = load double, double* %296
%298 = fsub double %293, %297
%299 = load i32, i32* %33
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds double, double* %209, i64 %300
store double %298, double* %301
br label %302
302: ; preds = %225
%303 = load i32, i32* %33
%304 = add nsw i32 %303, 1
store i32 %304, i32* %33
br label %220
305: ; preds = %220
store i32 0, i32* %33
br label %306
306: ; preds = %318, %305
%307 = load i32, i32* %33
%308 = load i32, i32* %5
%309 = icmp slt i32 %307, %308
br i1 %309, label %310, label %321
310: ; preds = %306
%311 = load i32, i32* %33
%312 = sext i32 %311 to i64
%313 = getelementptr inbounds double, double* %209, i64 %312
%314 = load double, double* %313
%315 = load i32, i32* %33
%316 = sext i32 %315 to i64
%317 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %316
store double %314, double* %317
br label %318
318: ; preds = %310
%319 = load i32, i32* %33
%320 = add nsw i32 %319, 1
store i32 %320, i32* %33
br label %306
321: ; preds = %306
store i32 1, i32* %9
br label %322
322: ; preds = %389, %321
%323 = load i32, i32* %9
%324 = load i32, i32* %4
%325 = icmp slt i32 %323, %324
br i1 %325, label %326, label %392
326: ; preds = %322
%327 = load double, double* %3
%328 = load double, double* %23
%329 = fadd double %328, %327
store double %329, double* %23
%330 = load i32, i32* %9
%331 = icmp slt i32 %330, 20
br i1 %331, label %332, label %333
332: ; preds = %326
store double 2.300000e+03, double* %19
store double 2.850000e-09, double* %20
store double 2.200000e-11, double* %21
br label %350
333: ; preds = %326
%334 = load i32, i32* %9
%335 = icmp sge i32 %334, 20
br i1 %335, label %336, label %340
336: ; preds = %333
%337 = load i32, i32* %9
%338 = icmp slt i32 %337, 220
br i1 %338, label %339, label %340
339: ; preds = %336
store double 2.700000e+03, double* %19
store double 2.400000e-09, double* %20
store double 2.000000e-11, double* %21
br label %349
340: ; preds = %336, %333
%341 = load i32, i32* %9
%342 = icmp sge i32 %341, 220
br i1 %342, label %343, label %347
343: ; preds = %340
%344 = load i32, i32* %9
%345 = icmp slt i32 %344, 400
br i1 %345, label %346, label %347
346: ; preds = %343
store double 3.000000e+03, double* %19
store double 1.620000e-09, double* %20
store double 1.200000e-11, double* %21
br label %348
347: ; preds = %343, %340
store double 3.300000e+03, double* %19
store double 0x3E19C511DC3A41E0, double* %20
store double 0x3DA4E406496685F4, double* %21
br label %348
348: ; preds = %347, %346
br label %349
349: ; preds = %348, %339
br label %350
350: ; preds = %349, %332
%351 = load i32, i32* %9
%352 = sub nsw i32 %351, 1
%353 = sext i32 %352 to i64
%354 = getelementptr inbounds double, double* %88, i64 %353
%355 = load double, double* %354
%356 = load i32, i32* %9
%357 = sub nsw i32 %356, 1
%358 = sext i32 %357 to i64
%359 = getelementptr inbounds double, double* %91, i64 %358
%360 = load double, double* %359
%361 = fmul double %360, 9.800000e+00
%362 = load double, double* %3
%363 = call double @llvm.fmuladd.f64(double %361, double %362, double %355)
%364 = load i32, i32* %9
%365 = sext i32 %364 to i64
%366 = getelementptr inbounds double, double* %88, i64 %365
store double %363, double* %366
%367 = load double, double* %19
%368 = load double, double* %21
%369 = load i32, i32* %9
%370 = sext i32 %369 to i64
%371 = getelementptr inbounds double, double* %88, i64 %370
%372 = load double, double* %371
%373 = load double, double* %18
%374 = fsub double %372, %373
%375 = call double @llvm.fmuladd.f64(double %368, double %374, double 1.000000e+00)
%376 = load double, double* %20
%377 = load i32, i32* %9
%378 = sext i32 %377 to i64
%379 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %378
%380 = load double, double* %379
%381 = load double, double* %7
%382 = fsub double %380, %381
%383 = call double @llvm.fmuladd.f64(double %376, double %382, double 1.000000e+00)
%384 = fdiv double %375, %383
%385 = fmul double %367, %384
%386 = load i32, i32* %9
%387 = sext i32 %386 to i64
%388 = getelementptr inbounds double, double* %91, i64 %387
store double %385, double* %388
br label %389
389: ; preds = %350
%390 = load i32, i32* %9
%391 = add nsw i32 %390, 1
store i32 %391, i32* %9
br label %322
392: ; preds = %322
%393 = load i8*, i8** %31
br label %394
394: ; preds = %392
%395 = load double, double* %26
%396 = load double, double* %30
%397 = fadd double %396, %395
store double %397, double* %30
br label %202
398: ; preds = %202
%399 = load i8*, i8** %10
ret i32 0
}

LLVM IR (-O2):
@.str = [10 x i8] c"%f %f %f\0A\00"
define i32 @Calc() {
%1 = alloca [100 x double]
%2 = bitcast [100 x double]* %1 to i8*
br label %3
3: ; preds = %19, %0
%4 = phi i64 [ 0, %0 ], [ %32, %19 ]
%5 = phi <2 x i32> [ <i32 0, i32 1>, %0 ], [ %33, %19 ]
%6 = add <2 x i32> %5, <i32 2, i32 2>
%7 = sitofp <2 x i32> %5 to <2 x double>
%8 = sitofp <2 x i32> %6 to <2 x double>
%9 = fmul <2 x double> %7, <double 1.500000e-02, double 1.500000e-02>
%10 = fmul <2 x double> %8, <double 1.500000e-02, double 1.500000e-02>
%11 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %9, <2 x double> <double 1.000000e+02, double 1.000000e+02>, <2 x double> <double 2.980000e+02, double 2.980000e+02>)
%12 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %10, <2 x double> <double 1.000000e+02, double 1.000000e+02>, <2 x double> <double 2.980000e+02, double 2.980000e+02>)
%13 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %4
%14 = bitcast double* %13 to <2 x double>*
store <2 x double> %11, <2 x double>* %14
%15 = getelementptr inbounds double, double* %13, i64 2
%16 = bitcast double* %15 to <2 x double>*
store <2 x double> %12, <2 x double>* %16
%17 = or i64 %4, 4
%18 = icmp eq i64 %17, 1900
br i1 %18, label %34, label %19
19: ; preds = %3
%20 = add <2 x i32> %5, <i32 4, i32 4>
%21 = add <2 x i32> %5, <i32 6, i32 6>
%22 = sitofp <2 x i32> %20 to <2 x double>
%23 = sitofp <2 x i32> %21 to <2 x double>
%24 = fmul <2 x double> %22, <double 1.500000e-02, double 1.500000e-02>
%25 = fmul <2 x double> %23, <double 1.500000e-02, double 1.500000e-02>
%26 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %24, <2 x double> <double 1.000000e+02, double 1.000000e+02>, <2 x double> <double 2.980000e+02, double 2.980000e+02>)
%27 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %25, <2 x double> <double 1.000000e+02, double 1.000000e+02>, <2 x double> <double 2.980000e+02, double 2.980000e+02>)
%28 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %17
%29 = bitcast double* %28 to <2 x double>*
store <2 x double> %26, <2 x double>* %29
%30 = getelementptr inbounds double, double* %28, i64 2
%31 = bitcast double* %30 to <2 x double>*
store <2 x double> %27, <2 x double>* %31
%32 = add nuw nsw i64 %4, 8
%33 = add <2 x i32> %5, <i32 8, i32 8>
br label %3
34: ; preds = %3
%35 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 1900
store double 3.148000e+03, double* %35
%36 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 1901
store double 3.149500e+03, double* %36
%37 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 1902
store double 0x40A89DFFFFFFFFFF, double* %37
%38 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 2001
%39 = load double, double* %38
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), double 3.148000e+03, double 0x40A89DFFFFFFFFFF, double %39)
%41 = tail call i8* @llvm.stacksave()
%42 = alloca [1900 x double]
%43 = alloca [1900 x double]
%44 = getelementptr inbounds [1900 x double], [1900 x double]* %43, i64 0, i64 0
%45 = getelementptr inbounds [1900 x double], [1900 x double]* %42, i64 0, i64 0
store double 1.000000e+05, double* %45
store double 2.300000e+03, double* %44
br label %46
46: ; preds = %34, %61
%47 = phi double [ 2.300000e+03, %34 ], [ %76, %61 ]
%48 = phi double [ 1.000000e+05, %34 ], [ %65, %61 ]
%49 = phi i64 [ 1, %34 ], [ %80, %61 ]
%50 = phi double [ 0.000000e+00, %34 ], [ %51, %61 ]
%51 = fadd double %50, 1.000000e+02
%52 = icmp ult i64 %49, 20
br i1 %52, label %61, label %53
53: ; preds = %46
%54 = icmp ult i64 %49, 220
br i1 %54, label %61, label %55
55: ; preds = %53
%56 = icmp ult i64 %49, 400
%57 = insertelement <2 x i1> poison, i1 %56, i64 0
%58 = shufflevector <2 x i1> %57, <2 x i1> poison, <2 x i32> zeroinitializer
%59 = select <2 x i1> %58, <2 x double> <double 1.200000e-11, double 1.620000e-09>, <2 x double> <double 0x3DA4E406496685F4, double 0x3E19C511DC3A41E0>
%60 = select i1 %56, double 3.000000e+03, double 3.300000e+03
br label %61
61: ; preds = %55, %53, %46
%62 = phi double [ 2.300000e+03, %46 ], [ 2.700000e+03, %53 ], [ %60, %55 ]
%63 = phi <2 x double> [ <double 2.200000e-11, double 2.850000e-09>, %46 ], [ <double 2.000000e-11, double 2.400000e-09>, %53 ], [ %59, %55 ]
%64 = fmul double %47, 9.800000e+00
%65 = tail call double @llvm.fmuladd.f64(double %64, double 1.000000e+02, double %48)
%66 = getelementptr inbounds [1900 x double], [1900 x double]* %42, i64 0, i64 %49
store double %65, double* %66
%67 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %49
%68 = load double, double* %67
%69 = insertelement <2 x double> poison, double %65, i64 0
%70 = insertelement <2 x double> %69, double %68, i64 1
%71 = fadd <2 x double> %70, <double -1.000000e+05, double -2.980000e+02>
%72 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %63, <2 x double> %71, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
%73 = extractelement <2 x double> %72, i64 0
%74 = extractelement <2 x double> %72, i64 1
%75 = fdiv double %73, %74
%76 = fmul double %62, %75
%77 = getelementptr inbounds [1900 x double], [1900 x double]* %43, i64 0, i64 %49
store double %76, double* %77
%78 = fdiv double %51, 1.000000e+04
%79 = tail call double @exp(double %78)
%80 = add nuw nsw i64 %49, 1
%81 = icmp eq i64 %80, 1900
br i1 %81, label %82, label %46
82: ; preds = %61, %118
%83 = phi double [ %119, %118 ], [ 0.000000e+00, %61 ]
%84 = tail call i8* @llvm.stacksave()
br label %85
85: ; preds = %82, %95
%86 = phi i64 [ %116, %95 ], [ 1, %82 ]
%87 = icmp ult i64 %86, 20
br i1 %87, label %95, label %88
88: ; preds = %85
%89 = icmp ult i64 %86, 220
br i1 %89, label %95, label %90
90: ; preds = %88
%91 = icmp ult i64 %86, 400
%92 = select i1 %91, double 1.200000e-11, double 0x3DA4E406496685F4
%93 = select i1 %91, double 1.620000e-09, double 0x3E19C511DC3A41E0
%94 = select i1 %91, double 3.000000e+03, double 3.300000e+03
br label %95
95: ; preds = %90, %88, %85
%96 = phi double [ 2.200000e-11, %85 ], [ 2.000000e-11, %88 ], [ %92, %90 ]
%97 = phi double [ 2.850000e-09, %85 ], [ 2.400000e-09, %88 ], [ %93, %90 ]
%98 = phi double [ 2.300000e+03, %85 ], [ 2.700000e+03, %88 ], [ %94, %90 ]
%99 = add nsw i64 %86, -1
%100 = getelementptr inbounds [1900 x double], [1900 x double]* %42, i64 0, i64 %99
%101 = load double, double* %100
%102 = getelementptr inbounds [1900 x double], [1900 x double]* %43, i64 0, i64 %99
%103 = load double, double* %102
%104 = fmul double %103, 9.800000e+00
%105 = tail call double @llvm.fmuladd.f64(double %104, double 1.000000e+02, double %101)
%106 = getelementptr inbounds [1900 x double], [1900 x double]* %42, i64 0, i64 %86
store double %105, double* %106
%107 = fadd double %105, -1.000000e+05
%108 = tail call double @llvm.fmuladd.f64(double %96, double %107, double 1.000000e+00)
%109 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %86
%110 = load double, double* %109
%111 = fadd double %110, -2.980000e+02
%112 = tail call double @llvm.fmuladd.f64(double %97, double %111, double 1.000000e+00)
%113 = fdiv double %108, %112
%114 = fmul double %98, %113
%115 = getelementptr inbounds [1900 x double], [1900 x double]* %43, i64 0, i64 %86
store double %114, double* %115
%116 = add nuw nsw i64 %86, 1
%117 = icmp eq i64 %116, 1900
br i1 %117, label %118, label %85
118: ; preds = %95
tail call void @llvm.stackrestore(i8* %84)
%119 = fadd double %83, 0x41D25A19D0D79436
%120 = fcmp olt double %119, 1.000000e+11
br i1 %120, label %82, label %121
121: ; preds = %118
tail call void @llvm.stackrestore(i8* %41)
ret i32 0
}