#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 const fabs(double);
void apprgrdn(unsigned short n, double g[], double x[], double f, double fun(),
              double deltax[], unsigned short obj) {
  double const lowbndobj = 2.0e-10, lowbndcnt = 5.0e-15, ten = 10.0, half = 0.5;
  double d, y, fi;
  unsigned short i, j, center = 0;
  for (i = 0; i < n; i++) {
    y = x[i];
    d = ((lowbndcnt) > (fabs(y)) ? (lowbndcnt) : (fabs(y)));
    d *= deltax[i];
    if (obj) {
      if (fabs(d) < lowbndobj) {
        if (deltax[i] < 0.0)
          d = -lowbndobj;
        else
          d = lowbndobj;
        center = 1;
      } else
        center = 0;
    } else if (fabs(d) < lowbndcnt) {
      if (deltax[i] < 0.0)
        d = -lowbndcnt;
      else
        d = lowbndcnt;
    }
    x[i] = y + d;
    fi = fun(x);
    if (obj) {
      if (fi == f) {
        for (j = 1; j <= 3; j++) {
          d *= ten;
          x[i] = y + d;
          fi = fun(x);
          if (fi != f)
            break;
        }
      }
    }
    g[i] = (fi - f) / d;
    if (obj) {
      if (center) {
        x[i] = y - d;
        fi = fun(x);
        g[i] = half * (g[i] + (f - fi) / d);
      }
    }
    x[i] = y;
  }
}


x86 assembly (clang, -O0):
<apprgrdn>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %r9w,%ax
mov    %di,-0x2(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %ax,-0x32(%rbp)
movsd  0xed4(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xebf(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xeaa(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe95(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movw   $0x0,-0x76(%rbp)
movw   $0x0,-0x72(%rbp)
movzwl -0x72(%rbp),%eax
movzwl -0x2(%rbp),%ecx
cmp    %ecx,%eax
jge    1463 <apprgrdn+0x353>
mov    -0x18(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0xe5d(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11cf <apprgrdn+0xbf>
movsd  0xe4b(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    11de <apprgrdn+0xce>
movsd  -0x68(%rbp),%xmm0
call   1030 <fabs@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x30(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
cmpw   $0x0,-0x32(%rbp)
je     1274 <apprgrdn+0x164>
movsd  -0x60(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0xdf9(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1269 <apprgrdn+0x159>
mov    -0x30(%rbp),%rax
movzwl -0x72(%rbp),%ecx
xorps  %xmm0,%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    1251 <apprgrdn+0x141>
movsd  0xde1(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    125e <apprgrdn+0x14e>
movsd  0xdbf(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movw   $0x1,-0x76(%rbp)
jmp    126f <apprgrdn+0x15f>
movw   $0x0,-0x76(%rbp)
jmp    12d2 <apprgrdn+0x1c2>
movsd  -0x60(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movsd  0xd87(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12cd <apprgrdn+0x1bd>
mov    -0x30(%rbp),%rax
movzwl -0x72(%rbp),%ecx
xorps  %xmm0,%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    12bb <apprgrdn+0x1ab>
movsd  0xd6f(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    12c8 <apprgrdn+0x1b8>
movsd  0xd4d(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    12cd <apprgrdn+0x1bd>
jmp    12d2 <apprgrdn+0x1c2>
movsd  -0x68(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rcx
mov    -0x18(%rbp),%rdi
mov    $0x0,%al
call   *%rcx
movsd  %xmm0,-0x70(%rbp)
cmpw   $0x0,-0x32(%rbp)
je     13a8 <apprgrdn+0x298>
movsd  -0x70(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jne    13a3 <apprgrdn+0x293>
jp     13a3 <apprgrdn+0x293>
movw   $0x1,-0x74(%rbp)
movzwl -0x74(%rbp),%eax
cmp    $0x3,%eax
jg     139e <apprgrdn+0x28e>
movsd  0xcd2(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rcx
mov    -0x18(%rbp),%rdi
mov    $0x0,%al
call   *%rcx
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jne    1383 <apprgrdn+0x273>
jp     1383 <apprgrdn+0x273>
jmp    1388 <apprgrdn+0x278>
jmp    139e <apprgrdn+0x28e>
jmp    138d <apprgrdn+0x27d>
mov    -0x74(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x74(%rbp)
jmp    1321 <apprgrdn+0x211>
jmp    13a3 <apprgrdn+0x293>
jmp    13a8 <apprgrdn+0x298>
movsd  -0x70(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
divsd  -0x60(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
cmpw   $0x0,-0x32(%rbp)
je     1440 <apprgrdn+0x330>
cmpw   $0x0,-0x76(%rbp)
je     143b <apprgrdn+0x32b>
movsd  -0x68(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rcx
mov    -0x18(%rbp),%rdi
mov    $0x0,%al
call   *%rcx
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x20(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
divsd  -0x60(%rbp),%xmm0
addsd  %xmm0,%xmm1
movsd  0xbd6(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1440 <apprgrdn+0x330>
movsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movzwl -0x72(%rbp),%ecx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x72(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x72(%rbp)
jmp    117c <apprgrdn+0x6c>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<apprgrdn>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r8,0x40(%rsp)
movsd  %xmm0,0x8(%rsp)
test   %edi,%edi
je     1333 <apprgrdn+0x233>
mov    %r9d,%r15d
mov    %rcx,%rbx
mov    %rdx,%rbp
mov    %rsi,%r12
movzwl %di,%eax
mov    %rax,0x38(%rsp)
movsd  0xef3(%rip),%xmm3
xor    %r14d,%r14d
movl   $0x0,0x4(%rsp)
jmp    1174 <apprgrdn+0x74>
nopw   0x0(%rax,%rax,1)
movapd 0x20(%rsp),%xmm0
movsd  %xmm0,0x0(%rbp,%r14,8)
add    $0x1,%r14
cmp    0x38(%rsp),%r14
movsd  0xec2(%rip),%xmm3
je     1333 <apprgrdn+0x233>
movsd  0x0(%rbp,%r14,8),%xmm0
movapd %xmm0,0x20(%rsp)
movapd 0xe77(%rip),%xmm2
andpd  %xmm2,%xmm0
movapd %xmm3,%xmm4
maxsd  %xmm0,%xmm4
mov    0x40(%rsp),%rax
movsd  (%rax,%r14,8),%xmm0
mulsd  %xmm0,%xmm4
movapd %xmm4,%xmm1
andpd  %xmm2,%xmm1
test   %r15w,%r15w
je     11f0 <apprgrdn+0xf0>
movsd  0xe7e(%rip),%xmm2
ucomisd %xmm1,%xmm2
jbe    1220 <apprgrdn+0x120>
xor    %eax,%eax
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
seta   %al
lea    0xe4c(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm4
mov    $0x1,%ax
mov    %eax,0x4(%rsp)
jmp    1228 <apprgrdn+0x128>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
ucomisd %xmm1,%xmm3
jbe    1228 <apprgrdn+0x128>
xor    %eax,%eax
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
seta   %al
lea    0xe06(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm4
jmp    1228 <apprgrdn+0x128>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movl   $0x0,0x4(%rsp)
movapd 0x20(%rsp),%xmm0
movapd %xmm4,0x10(%rsp)
addsd  %xmm4,%xmm0
movsd  %xmm0,0x0(%rbp,%r14,8)
mov    %rbp,%rdi
xor    %eax,%eax
call   *%rbx
test   %r15w,%r15w
je     12c0 <apprgrdn+0x1c0>
ucomisd 0x8(%rsp),%xmm0
jne    12c0 <apprgrdn+0x1c0>
jp     12c0 <apprgrdn+0x1c0>
mov    $0x1,%r13w
movapd 0x10(%rsp),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mulsd  0xdc8(%rip),%xmm1
movapd 0x20(%rsp),%xmm0
movapd %xmm1,0x10(%rsp)
addsd  %xmm1,%xmm0
movsd  %xmm0,0x0(%rbp,%r14,8)
mov    %rbp,%rdi
xor    %eax,%eax
call   *%rbx
ucomisd 0x8(%rsp),%xmm0
jne    12c0 <apprgrdn+0x1c0>
jp     12c0 <apprgrdn+0x1c0>
lea    0x1(%r13),%eax
cmp    $0x3,%r13w
mov    %eax,%r13d
movapd 0x10(%rsp),%xmm1
jb     1270 <apprgrdn+0x170>
jmp    12c6 <apprgrdn+0x1c6>
cs nopw 0x0(%rax,%rax,1)
movapd 0x10(%rsp),%xmm1
subsd  0x8(%rsp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%r12,%r14,8)
test   %r15w,%r15w
je     1150 <apprgrdn+0x50>
cmpw   $0x0,0x4(%rsp)
je     1150 <apprgrdn+0x50>
movapd 0x20(%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x0(%rbp,%r14,8)
mov    %rbp,%rdi
xor    %eax,%eax
movapd %xmm1,0x10(%rsp)
call   *%rbx
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
divsd  0x10(%rsp),%xmm1
addsd  (%r12,%r14,8),%xmm1
mulsd  0xd20(%rip),%xmm1
movsd  %xmm1,(%r12,%r14,8)
jmp    1150 <apprgrdn+0x50>
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @apprgrdn(i16 zeroext %0, double* nocapture %1, double* %2, double %3, double (...)* nocapture %4, double* nocapture %5, i16 zeroext %6) {
%8 = icmp eq i16 %0, 0
br i1 %8, label %71, label %9
9: ; preds = %7
%10 = icmp ne i16 %6, 0
%11 = bitcast double (...)* %4 to double (double*, ...)*
%12 = zext i16 %0 to i64
br label %13
13: ; preds = %9, %68
%14 = phi i64 [ 0, %9 ], [ %69, %68 ]
%15 = phi i16 [ 0, %9 ], [ %37, %68 ]
%16 = getelementptr inbounds double, double* %2, i64 %14
%17 = load double, double* %16
%18 = tail call double @llvm.fabs.f64(double %17)
%19 = fcmp olt double %18, 5.000000e-15
%20 = select i1 %19, double 5.000000e-15, double %18
%21 = getelementptr inbounds double, double* %5, i64 %14
%22 = load double, double* %21
%23 = fmul double %22, %20
%24 = tail call double @llvm.fabs.f64(double %23)
br i1 %10, label %25, label %30
25: ; preds = %13
%26 = fcmp olt double %24, 2.000000e-10
br i1 %26, label %27, label %35
27: ; preds = %25
%28 = fcmp olt double %22, 0.000000e+00
%29 = select i1 %28, double -2.000000e-10, double 2.000000e-10
br label %35
30: ; preds = %13
%31 = fcmp olt double %24, 5.000000e-15
br i1 %31, label %32, label %35
32: ; preds = %30
%33 = fcmp olt double %22, 0.000000e+00
%34 = select i1 %33, double -5.000000e-15, double 5.000000e-15
br label %35
35: ; preds = %32, %25, %30, %27
%36 = phi double [ %29, %27 ], [ %23, %30 ], [ %23, %25 ], [ %34, %32 ]
%37 = phi i16 [ 1, %27 ], [ %15, %30 ], [ 0, %25 ], [ %15, %32 ]
%38 = fadd double %17, %36
store double %38, double* %16
%39 = tail call double (double*, ...) %11(double* %2)
%40 = fcmp oeq double %39, %3
%41 = select i1 %10, i1 %40, i1 false
br i1 %41, label %42, label %52
42: ; preds = %35, %42
%43 = phi i16 [ %49, %42 ], [ 1, %35 ]
%44 = phi double [ %45, %42 ], [ %36, %35 ]
%45 = fmul double %44, 1.000000e+01
%46 = fadd double %17, %45
store double %46, double* %16
%47 = tail call double (double*, ...) %11(double* %2)
%48 = fcmp oeq double %47, %3
%49 = add nuw nsw i16 %43, 1
%50 = icmp ult i16 %43, 3
%51 = select i1 %48, i1 %50, i1 false
br i1 %51, label %42, label %52
52: ; preds = %42, %35
%53 = phi double [ %36, %35 ], [ %45, %42 ]
%54 = phi double [ %39, %35 ], [ %47, %42 ]
%55 = fsub double %54, %3
%56 = fdiv double %55, %53
%57 = getelementptr inbounds double, double* %1, i64 %14
store double %56, double* %57
%58 = icmp ne i16 %37, 0
%59 = select i1 %10, i1 %58, i1 false
br i1 %59, label %60, label %68
60: ; preds = %52
%61 = fsub double %17, %53
store double %61, double* %16
%62 = tail call double (double*, ...) %11(double* %2)
%63 = load double, double* %57
%64 = fsub double %3, %62
%65 = fdiv double %64, %53
%66 = fadd double %63, %65
%67 = fmul double %66, 5.000000e-01
store double %67, double* %57
br label %68
68: ; preds = %60, %52
store double %17, double* %16
%69 = add nuw nsw i64 %14, 1
%70 = icmp eq i64 %69, %12
br i1 %70, label %71, label %13
71: ; preds = %68, %7
ret void
}