#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 _fxy(double, double);
scalar_t__ rngkg(double, double, int, double, double *);
int hamng(double x0, double y0, int n, double h, double y[]) {
  double f[100];
  double x, xp, yi, yc, ym, yp;
  static double yim3 = 0.0, ycm = 0.0, ypm = 0.0;
  int i;
  if (h <= 0.0 || n > 99)
    return 999;
  if (rngkg(x0, y0, n, h, y) != 0)
    return 999;
  f[1] = _fxy(x0 + h, y[1]);
  f[2] = _fxy(x0 + 2.0 * h, y[2]);
  for (i = 3; i < n - 1; i++) {
    x = x0 + i * h;
    xp = x + h;
    f[i] = _fxy(x, y[i]);
    if (i > 3)
      yim3 = y[i - 3];
    yp = yim3 + h * (2.0 * (f[i] + f[i - 2]) - f[i - 1]) * 1.333333333333333333;
    ym = yp - (ypm - ycm) * 112.0 / 121.0;
    yc = (9.0 * y[i] - y[i - 2] +
          3.0 * h * (_fxy(xp, ym) + 2.0 * f[i] - f[i - 1])) *
         0.125;
    y[i + 1] = yc + (yp - yc) * 9.0 / 121.0;
    ypm = yp;
    ycm = yc;
  }
  x += h;
  return 0;
}


x86 assembly (clang, -O0):
<hamng>:
push   %rbp
mov    %rsp,%rbp
sub    $0x3a0,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
mov    %edi,-0x1c(%rbp)
movsd  %xmm2,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jae    1159 <hamng+0x39>
cmpl   $0x63,-0x1c(%rbp)
jle    1165 <hamng+0x45>
movl   $0x3e7,-0x4(%rbp)
jmp    14b8 <hamng+0x398>
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
mov    -0x1c(%rbp),%edi
movsd  -0x28(%rbp),%xmm2
mov    -0x30(%rbp),%rsi
call   1030 <rngkg@plt>
cmp    $0x0,%rax
je     1196 <hamng+0x76>
movl   $0x3e7,-0x4(%rbp)
jmp    14b8 <hamng+0x398>
movsd  -0x10(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm1
call   1040 <_fxy@plt>
movsd  %xmm0,-0x348(%rbp)
ff
movsd  -0x10(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm1
call   1040 <_fxy@plt>
movsd  %xmm0,-0x340(%rbp)
ff
movl   $0x3,-0x384(%rbp)
mov    -0x384(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    149c <hamng+0x37c>
movsd  -0x10(%rbp),%xmm1
cvtsi2sdl -0x384(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x358(%rbp)
ff
movsd  -0x358(%rbp),%xmm0
ff
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x360(%rbp)
ff
movsd  -0x358(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movslq -0x384(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
call   1040 <_fxy@plt>
movslq -0x384(%rbp),%rax
movsd  %xmm0,-0x350(%rbp,%rax,8)
ff ff
cmpl   $0x3,-0x384(%rbp)
jle    128a <hamng+0x16a>
mov    -0x30(%rbp),%rax
mov    -0x384(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,0x2dae(%rip)
movsd  0x2da6(%rip),%xmm1
movsd  -0x28(%rbp),%xmm0
movslq -0x384(%rbp),%rax
movsd  -0x350(%rbp,%rax,8),%xmm2
ff ff
mov    -0x384(%rbp),%eax
sub    $0x2,%eax
cltq
addsd  -0x350(%rbp,%rax,8),%xmm2
ff ff
mov    -0x384(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  -0x350(%rbp,%rax,8),%xmm3
ff ff
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
addsd  %xmm2,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  0xd2e(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x380(%rbp)
ff
movsd  -0x380(%rbp),%xmm0
ff
movsd  0x2d2e(%rip),%xmm1
subsd  0x2d1e(%rip),%xmm1
movsd  0xcf6(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xcca(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x378(%rbp)
ff
mov    -0x30(%rbp),%rax
movslq -0x384(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x384(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xc7e(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x398(%rbp)
ff
movsd  0xc76(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x390(%rbp)
ff
movsd  -0x360(%rbp),%xmm0
ff
movsd  -0x378(%rbp),%xmm1
ff
call   1040 <_fxy@plt>
movsd  -0x398(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0x390(%rbp),%xmm0
ff
movslq -0x384(%rbp),%rax
movsd  -0x350(%rbp,%rax,8),%xmm2
ff ff
addsd  %xmm2,%xmm2
addsd  %xmm3,%xmm2
mov    -0x384(%rbp),%eax
sub    $0x1,%eax
cltq
subsd  -0x350(%rbp,%rax,8),%xmm2
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xbfd(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x370(%rbp)
ff
movsd  -0x370(%rbp),%xmm0
ff
movsd  -0x380(%rbp),%xmm1
ff
subsd  -0x370(%rbp),%xmm1
ff
movsd  0xbc9(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xbb5(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
mov    -0x384(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x380(%rbp),%xmm0
ff
movsd  %xmm0,0x2bd0(%rip)
movsd  -0x370(%rbp),%xmm0
ff
movsd  %xmm0,0x2bb8(%rip)
mov    -0x384(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x384(%rbp)
jmp    11e8 <hamng+0xc8>
movsd  -0x28(%rbp),%xmm0
addsd  -0x358(%rbp),%xmm0
ff
movsd  %xmm0,-0x358(%rbp)
ff
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x3a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hamng>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x368,%rsp
mov    $0x3e7,%r15d
cmp    $0x63,%edi
jg     145b <hamng+0x33b>
xorpd  %xmm3,%xmm3
ucomisd %xmm2,%xmm3
jae    145b <hamng+0x33b>
mov    %rsi,%r12
mov    %edi,%r14d
movsd  %xmm2,(%rsp)
movsd  %xmm0,0x18(%rsp)
call   1030 <rngkg@plt>
test   %rax,%rax
jne    145b <hamng+0x33b>
movsd  0x18(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  0x8(%r12),%xmm1
call   1040 <_fxy@plt>
movsd  %xmm0,0x10(%rsp)
movsd  %xmm0,0x48(%rsp)
movsd  (%rsp),%xmm0
addsd  %xmm0,%xmm0
addsd  0x18(%rsp),%xmm0
movsd  0x10(%r12),%xmm1
call   1040 <_fxy@plt>
movsd  %xmm0,0x50(%rsp)
xor    %r15d,%r15d
cmp    $0x5,%r14d
jl     145b <hamng+0x33b>
add    $0xffffffff,%r14d
movsd  0xe39(%rip),%xmm1
movsd  (%rsp),%xmm2
mulsd  %xmm2,%xmm1
movsd  %xmm1,0x38(%rsp)
movsd  %xmm0,0x8(%rsp)
movapd %xmm1,%xmm0
addsd  0x18(%rsp),%xmm0
movapd %xmm0,%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0x18(%r12),%xmm1
call   1040 <_fxy@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
addsd  %xmm1,%xmm1
subsd  0x8(%rsp),%xmm1
mulsd  (%rsp),%xmm1
mulsd  0xde1(%rip),%xmm1
movsd  %xmm0,0x58(%rsp)
addsd  0x2e03(%rip),%xmm1
movapd %xmm1,%xmm0
movsd  %xmm1,0x10(%rsp)
movsd  0x2e01(%rip),%xmm1
subsd  0x2df1(%rip),%xmm1
mulsd  0xdb9(%rip),%xmm1
divsd  0xdb9(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0x18(%r12),%xmm0
mulsd  0xdae(%rip),%xmm0
subsd  0x8(%r12),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x30(%rsp),%xmm0
call   1040 <_fxy@plt>
movsd  0x38(%rsp),%xmm2
movsd  0x28(%rsp),%xmm5
addsd  %xmm5,%xmm5
addsd  %xmm0,%xmm5
movsd  0x8(%rsp),%xmm0
subsd  %xmm0,%xmm5
mulsd  %xmm2,%xmm5
addsd  0x20(%rsp),%xmm5
mulsd  0xd6e(%rip),%xmm5
movsd  0x10(%rsp),%xmm6
movapd %xmm6,%xmm1
subsd  %xmm5,%xmm1
mulsd  0xd50(%rip),%xmm1
divsd  0xd40(%rip),%xmm1
addsd  %xmm5,%xmm1
movsd  %xmm1,0x20(%r12)
movsd  %xmm6,0x2d5d(%rip)
movsd  %xmm5,0x2d4d(%rip)
cmp    $0x4,%r14d
je     145b <hamng+0x33b>
add    $0xfffffffffffffffc,%r14
xor    %r15d,%r15d
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
movsd  %xmm0,0x8(%rsp)
lea    0x4(%rbx),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  (%rsp),%xmm3
mulsd  %xmm3,%xmm0
addsd  0x18(%rsp),%xmm0
movapd %xmm0,%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,0x10(%rsp)
call   1040 <_fxy@plt>
movsd  %xmm0,0x30(%rsp)
movsd  %xmm0,0x60(%rsp,%rbx,8)
movsd  0x8(%r12,%rbx,8),%xmm3
movsd  %xmm3,0x2cdb(%rip)
movsd  0x8(%rsp),%xmm2
addsd  %xmm0,%xmm2
movsd  0x58(%rsp,%rbx,8),%xmm0
movsd  %xmm0,0x28(%rsp)
addsd  %xmm2,%xmm2
subsd  %xmm0,%xmm2
mulsd  (%rsp),%xmm2
mulsd  0xc80(%rip),%xmm2
movsd  0x2cb8(%rip),%xmm1
subsd  0x2ca8(%rip),%xmm1
addsd  %xmm3,%xmm2
movsd  %xmm2,0x8(%rsp)
mulsd  0xc66(%rip),%xmm1
divsd  0xc66(%rip),%xmm1
addsd  %xmm2,%xmm1
movsd  0x20(%r12,%rbx,8),%xmm0
mulsd  0xc5b(%rip),%xmm0
subsd  0x10(%r12,%rbx,8),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <_fxy@plt>
movsd  0xc3b(%rip),%xmm4
movsd  0xc2b(%rip),%xmm3
movsd  0x38(%rsp),%xmm2
movsd  0x30(%rsp),%xmm5
addsd  %xmm5,%xmm5
addsd  %xmm0,%xmm5
movsd  0x28(%rsp),%xmm0
subsd  %xmm0,%xmm5
mulsd  %xmm2,%xmm5
addsd  0x20(%rsp),%xmm5
mulsd  0xc0b(%rip),%xmm5
movsd  0x8(%rsp),%xmm6
movapd %xmm6,%xmm1
subsd  %xmm5,%xmm1
mulsd  %xmm4,%xmm1
divsd  %xmm3,%xmm1
addsd  %xmm5,%xmm1
movsd  %xmm1,0x28(%r12,%rbx,8)
movsd  %xmm6,0x2c02(%rip)
movsd  %xmm5,0x2bf2(%rip)
add    $0x1,%rbx
cmp    %rbx,%r14
jne    1310 <hamng+0x1f0>
mov    %r15d,%eax
add    $0x368,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@hamng.yim3 = internal global double 0.000000e+00
@hamng.ycm = internal global double 0.000000e+00
@hamng.ypm = internal global double 0.000000e+00
define i32 @hamng(double %0, double %1, i32 %2, double %3, double* %4) {
%6 = alloca i32
%7 = alloca double
%8 = alloca double
%9 = alloca i32
%10 = alloca double
%11 = alloca double*
%12 = alloca [100 x double]
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca i32
store double %0, double* %7
store double %1, double* %8
store i32 %2, i32* %9
store double %3, double* %10
store double* %4, double** %11
%20 = load double, double* %10
%21 = fcmp ole double %20, 0.000000e+00
br i1 %21, label %25, label %22
22: ; preds = %5
%23 = load i32, i32* %9
%24 = icmp sgt i32 %23, 99
br i1 %24, label %25, label %26
25: ; preds = %22, %5
store i32 999, i32* %6
br label %166
26: ; preds = %22
%27 = load double, double* %7
%28 = load double, double* %8
%29 = load i32, i32* %9
%30 = load double, double* %10
%31 = load double*, double** %11
%32 = call i64 @rngkg(double %27, double %28, i32 %29, double %30, double* %31)
%33 = icmp ne i64 %32, 0
br i1 %33, label %34, label %35
34: ; preds = %26
store i32 999, i32* %6
br label %166
35: ; preds = %26
%36 = load double, double* %7
%37 = load double, double* %10
%38 = fadd double %36, %37
%39 = load double*, double** %11
%40 = getelementptr inbounds double, double* %39, i64 1
%41 = load double, double* %40
%42 = call double @_fxy(double %38, double %41)
%43 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 1
store double %42, double* %43
%44 = load double, double* %7
%45 = load double, double* %10
%46 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %45, double %44)
%47 = load double*, double** %11
%48 = getelementptr inbounds double, double* %47, i64 2
%49 = load double, double* %48
%50 = call double @_fxy(double %46, double %49)
%51 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 2
store double %50, double* %51
store i32 3, i32* %19
br label %52
52: ; preds = %159, %35
%53 = load i32, i32* %19
%54 = load i32, i32* %9
%55 = sub nsw i32 %54, 1
%56 = icmp slt i32 %53, %55
br i1 %56, label %57, label %162
57: ; preds = %52
%58 = load double, double* %7
%59 = load i32, i32* %19
%60 = sitofp i32 %59 to double
%61 = load double, double* %10
%62 = call double @llvm.fmuladd.f64(double %60, double %61, double %58)
store double %62, double* %13
%63 = load double, double* %13
%64 = load double, double* %10
%65 = fadd double %63, %64
store double %65, double* %14
%66 = load double, double* %13
%67 = load double*, double** %11
%68 = load i32, i32* %19
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds double, double* %67, i64 %69
%71 = load double, double* %70
%72 = call double @_fxy(double %66, double %71)
%73 = load i32, i32* %19
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 %74
store double %72, double* %75
%76 = load i32, i32* %19
%77 = icmp sgt i32 %76, 3
br i1 %77, label %78, label %85
78: ; preds = %57
%79 = load double*, double** %11
%80 = load i32, i32* %19
%81 = sub nsw i32 %80, 3
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double, double* %79, i64 %82
%84 = load double, double* %83
store double %84, double* @hamng.yim3
br label %85
85: ; preds = %78, %57
%86 = load double, double* @hamng.yim3
%87 = load double, double* %10
%88 = load i32, i32* %19
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 %89
%91 = load double, double* %90
%92 = load i32, i32* %19
%93 = sub nsw i32 %92, 2
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 %94
%96 = load double, double* %95
%97 = fadd double %91, %96
%98 = load i32, i32* %19
%99 = sub nsw i32 %98, 1
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 %100
%102 = load double, double* %101
%103 = fneg double %102
%104 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %97, double %103)
%105 = fmul double %87, %104
%106 = call double @llvm.fmuladd.f64(double %105, double 0x3FF5555555555555, double %86)
store double %106, double* %18
%107 = load double, double* %18
%108 = load double, double* @hamng.ypm
%109 = load double, double* @hamng.ycm
%110 = fsub double %108, %109
%111 = fmul double %110, 1.120000e+02
%112 = fdiv double %111, 1.210000e+02
%113 = fsub double %107, %112
store double %113, double* %17
%114 = load double*, double** %11
%115 = load i32, i32* %19
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds double, double* %114, i64 %116
%118 = load double, double* %117
%119 = load double*, double** %11
%120 = load i32, i32* %19
%121 = sub nsw i32 %120, 2
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds double, double* %119, i64 %122
%124 = load double, double* %123
%125 = fneg double %124
%126 = call double @llvm.fmuladd.f64(double 9.000000e+00, double %118, double %125)
%127 = load double, double* %10
%128 = fmul double 3.000000e+00, %127
%129 = load double, double* %14
%130 = load double, double* %17
%131 = call double @_fxy(double %129, double %130)
%132 = load i32, i32* %19
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 %133
%135 = load double, double* %134
%136 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %135, double %131)
%137 = load i32, i32* %19
%138 = sub nsw i32 %137, 1
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 %139
%141 = load double, double* %140
%142 = fsub double %136, %141
%143 = call double @llvm.fmuladd.f64(double %128, double %142, double %126)
%144 = fmul double %143, 1.250000e-01
store double %144, double* %16
%145 = load double, double* %16
%146 = load double, double* %18
%147 = load double, double* %16
%148 = fsub double %146, %147
%149 = fmul double %148, 9.000000e+00
%150 = fdiv double %149, 1.210000e+02
%151 = fadd double %145, %150
%152 = load double*, double** %11
%153 = load i32, i32* %19
%154 = add nsw i32 %153, 1
%155 = sext i32 %154 to i64
%156 = getelementptr inbounds double, double* %152, i64 %155
store double %151, double* %156
%157 = load double, double* %18
store double %157, double* @hamng.ypm
%158 = load double, double* %16
store double %158, double* @hamng.ycm
br label %159
159: ; preds = %85
%160 = load i32, i32* %19
%161 = add nsw i32 %160, 1
store i32 %161, i32* %19
br label %52
162: ; preds = %52
%163 = load double, double* %10
%164 = load double, double* %13
%165 = fadd double %164, %163
store double %165, double* %13
store i32 0, i32* %6
br label %166
166: ; preds = %162, %34, %25
%167 = load i32, i32* %6
ret i32 %167
}

LLVM IR (-O2):
@hamng.yim3 = internal unnamed_addr global double 0.000000e+00
@hamng.ycm = internal unnamed_addr global double 0.000000e+00
@hamng.ypm = internal unnamed_addr global double 0.000000e+00
define i32 @hamng(double %0, double %1, i32 %2, double %3, double* %4) {
%6 = alloca [100 x double]
%7 = bitcast [100 x double]* %6 to i8*
%8 = fcmp ole double %3, 0.000000e+00
%9 = icmp sgt i32 %2, 99
%10 = or i1 %9, %8
br i1 %10, label %109, label %11
11: ; preds = %5
%12 = tail call i64 @rngkg(double %0, double %1, i32 %2, double %3, double* %4)
%13 = icmp eq i64 %12, 0
br i1 %13, label %14, label %109
14: ; preds = %11
%15 = fadd double %0, %3
%16 = getelementptr inbounds double, double* %4, i64 1
%17 = load double, double* %16
%18 = tail call double @_fxy(double %15, double %17)
%19 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 1
store double %18, double* %19
%20 = tail call double @llvm.fmuladd.f64(double %3, double 2.000000e+00, double %0)
%21 = getelementptr inbounds double, double* %4, i64 2
%22 = load double, double* %21
%23 = tail call double @_fxy(double %20, double %22)
%24 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 2
store double %23, double* %24
%25 = icmp sgt i32 %2, 4
br i1 %25, label %26, label %109
26: ; preds = %14
%27 = add nsw i32 %2, -1
%28 = fmul double %3, 3.000000e+00
%29 = zext i32 %27 to i64
%30 = tail call double @llvm.fmuladd.f64(double %3, double 3.000000e+00, double %0)
%31 = fadd double %30, %3
%32 = getelementptr inbounds double, double* %4, i64 3
%33 = load double, double* %32
%34 = tail call double @_fxy(double %30, double %33)
%35 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 3
store double %34, double* %35
%36 = load double, double* @hamng.yim3
%37 = fadd double %34, %18
%38 = fneg double %23
%39 = tail call double @llvm.fmuladd.f64(double %37, double 2.000000e+00, double %38)
%40 = fmul double %39, %3
%41 = tail call double @llvm.fmuladd.f64(double %40, double 0x3FF5555555555555, double %36)
%42 = load double, double* @hamng.ypm
%43 = load double, double* @hamng.ycm
%44 = fsub double %42, %43
%45 = fmul double %44, 1.120000e+02
%46 = fdiv double %45, 1.210000e+02
%47 = fsub double %41, %46
%48 = load double, double* %32
%49 = load double, double* %16
%50 = fneg double %49
%51 = tail call double @llvm.fmuladd.f64(double %48, double 9.000000e+00, double %50)
%52 = tail call double @_fxy(double %31, double %47)
%53 = tail call double @llvm.fmuladd.f64(double %34, double 2.000000e+00, double %52)
%54 = fsub double %53, %23
%55 = tail call double @llvm.fmuladd.f64(double %28, double %54, double %51)
%56 = fmul double %55, 1.250000e-01
%57 = fsub double %41, %56
%58 = fmul double %57, 9.000000e+00
%59 = fdiv double %58, 1.210000e+02
%60 = fadd double %56, %59
%61 = getelementptr inbounds double, double* %4, i64 4
store double %60, double* %61
store double %41, double* @hamng.ypm
store double %56, double* @hamng.ycm
%62 = icmp eq i32 %27, 4
br i1 %62, label %109, label %63
63: ; preds = %26, %63
%64 = phi double [ %81, %63 ], [ %23, %26 ]
%65 = phi double [ %105, %63 ], [ %60, %26 ]
%66 = phi i64 [ %106, %63 ], [ 4, %26 ]
%67 = trunc i64 %66 to i32
%68 = sitofp i32 %67 to double
%69 = tail call double @llvm.fmuladd.f64(double %68, double %3, double %0)
%70 = fadd double %69, %3
%71 = getelementptr inbounds double, double* %4, i64 %66
%72 = tail call double @_fxy(double %69, double %65)
%73 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %66
store double %72, double* %73
%74 = add nsw i64 %66, -3
%75 = getelementptr inbounds double, double* %4, i64 %74
%76 = load double, double* %75
store double %76, double* @hamng.yim3
%77 = add nsw i64 %66, -2
%78 = fadd double %72, %64
%79 = add nsw i64 %66, -1
%80 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %79
%81 = load double, double* %80
%82 = fneg double %81
%83 = tail call double @llvm.fmuladd.f64(double %78, double 2.000000e+00, double %82)
%84 = fmul double %83, %3
%85 = tail call double @llvm.fmuladd.f64(double %84, double 0x3FF5555555555555, double %76)
%86 = load double, double* @hamng.ypm
%87 = load double, double* @hamng.ycm
%88 = fsub double %86, %87
%89 = fmul double %88, 1.120000e+02
%90 = fdiv double %89, 1.210000e+02
%91 = fsub double %85, %90
%92 = load double, double* %71
%93 = getelementptr inbounds double, double* %4, i64 %77
%94 = load double, double* %93
%95 = fneg double %94
%96 = tail call double @llvm.fmuladd.f64(double %92, double 9.000000e+00, double %95)
%97 = tail call double @_fxy(double %70, double %91)
%98 = tail call double @llvm.fmuladd.f64(double %72, double 2.000000e+00, double %97)
%99 = fsub double %98, %81
%100 = tail call double @llvm.fmuladd.f64(double %28, double %99, double %96)
%101 = fmul double %100, 1.250000e-01
%102 = fsub double %85, %101
%103 = fmul double %102, 9.000000e+00
%104 = fdiv double %103, 1.210000e+02
%105 = fadd double %101, %104
%106 = add nuw nsw i64 %66, 1
%107 = getelementptr inbounds double, double* %4, i64 %106
store double %105, double* %107
store double %85, double* @hamng.ypm
store double %101, double* @hamng.ycm
%108 = icmp eq i64 %106, %29
br i1 %108, label %109, label %63
109: ; preds = %63, %26, %14, %11, %5
%110 = phi i32 [ 999, %5 ], [ 999, %11 ], [ 0, %14 ], [ 0, %26 ], [ 0, %63 ]
ret i32 %110
}