#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 acos(double);
double asin(double);
double cos(double);
int fabs(double);
double interpolate(int, double *, double *, double);
double sin(double);
void riseset(int N, double *df, double *ra, double *dec, double gast,
             double lon, double lat, double delt, double h0, double *rts) {
  int i, j;
  double cH0, m, t0, n, r, d, H, h, dm;
  rts[0] = rts[1] = rts[2] = -1;
  cH0 = (sin(h0) - sin(lat) * sin(dec[0])) / (cos(lat) * cos(dec[0]));
  if (cH0 < -1 || cH0 > 1)
    return;
  cH0 = acos(cH0);
  for (i = 0; i < 3; i++) {
    m = (ra[0] - lon - gast) / (2.0 * 3.141592653589793238462643);
    if (i == 0)
      m -= cH0 / (2.0 * 3.141592653589793238462643);
    else if (i == 2)
      m += cH0 / (2.0 * 3.141592653589793238462643);
    for (j = 0; j < 10; j++) {
      n = m + delt / 86400;
      r = interpolate(N, df, ra, n);
      d = interpolate(N, df, dec, n);
      t0 = gast + 360.985647 * (3.141592653589793238462643 / 180.0) * m;
      H = t0 + lon - r;
      h = asin(sin(lat) * sin(d) + cos(lat) * cos(d) * cos(H));
      if (i == 1)
        dm = -H / (2.0 * 3.141592653589793238462643);
      else
        dm = (h - h0) /
             ((2.0 * 3.141592653589793238462643) * cos(d) * cos(lat) * sin(H));
      m += dm;
      if (fabs(dm) <= 1E-5)
        break;
    }
    rts[i] = m;
  }
}


x86 assembly (clang, -O0):
<riseset>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,-0x28(%rbp)
movsd  %xmm1,-0x30(%rbp)
movsd  %xmm2,-0x38(%rbp)
movsd  %xmm3,-0x40(%rbp)
movsd  %xmm4,-0x48(%rbp)
mov    %r8,-0x50(%rbp)
mov    -0x50(%rbp),%rax
movsd  0xe5d(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x50(%rbp),%rax
movsd  0xe4c(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x50(%rbp),%rax
movsd  0xe3b(%rip),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x48(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1050 <sin@plt>
movsd  -0xc0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xb8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1080 <cos@plt>
movsd  -0xb0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xd85(%rip),%xmm0
ucomisd -0x60(%rbp),%xmm0
ja     129d <riseset+0x13d>
movsd  -0x60(%rbp),%xmm0
movsd  0xd75(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12a2 <riseset+0x142>
jmp    15b1 <riseset+0x451>
movsd  -0x60(%rbp),%xmm0
call   1030 <acos@plt>
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x54(%rbp)
cmpl   $0x3,-0x54(%rbp)
jge    15b1 <riseset+0x451>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  0xd34(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
cmpl   $0x0,-0x54(%rbp)
jne    1313 <riseset+0x1b3>
movsd  -0x60(%rbp),%xmm1
movsd  0xd14(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    133d <riseset+0x1dd>
cmpl   $0x2,-0x54(%rbp)
jne    1338 <riseset+0x1d8>
movsd  -0x60(%rbp),%xmm0
movsd  0xce6(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    133d <riseset+0x1dd>
movl   $0x0,-0x58(%rbp)
cmpl   $0xa,-0x58(%rbp)
jge    1591 <riseset+0x431>
movsd  -0x68(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  0xcc0(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
movsd  -0x78(%rbp),%xmm0
call   1060 <interpolate@plt>
movsd  %xmm0,-0x80(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x20(%rbp),%rdx
movsd  -0x78(%rbp),%xmm0
call   1060 <interpolate@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x28(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm0
movsd  0xc62(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1050 <sin@plt>
movsd  %xmm0,-0xd0(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1080 <cos@plt>
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1070 <asin@plt>
movsd  %xmm0,-0x98(%rbp)
ff
cmpl   $0x1,-0x54(%rbp)
jne    14ba <riseset+0x35a>
movsd  -0x90(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xb67(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1544 <riseset+0x3e4>
movsd  -0x98(%rbp),%xmm0
ff
subsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  0xb29(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1050 <sin@plt>
movsd  -0xf0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xab9(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     157e <riseset+0x41e>
jmp    1591 <riseset+0x431>
jmp    1583 <riseset+0x423>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1344 <riseset+0x1e4>
movsd  -0x68(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    12b8 <riseset+0x158>
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<riseset>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
movsd  %xmm3,0x20(%rsp)
movsd  %xmm2,0x10(%rsp)
movsd  %xmm1,0x48(%rsp)
movsd  %xmm0,0x40(%rsp)
mov    %rcx,%r15
mov    %rdx,%r12
mov    %rsi,%rbx
mov    %edi,%ebp
movabs $0xbff0000000000000,%rax
mov    %rax,0x10(%r8)
movaps 0xe5a(%rip),%xmm0
mov    %r8,0x50(%rsp)
movups %xmm0,(%r8)
movsd  %xmm4,0x58(%rsp)
movaps %xmm4,%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,(%rsp)
movsd  (%r15),%xmm0
call   1050 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,(%rsp)
movsd  (%r15),%xmm0
call   1080 <cos@plt>
mulsd  (%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  0xded(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     1469 <riseset+0x309>
movapd %xmm1,%xmm0
ucomisd 0xddf(%rip),%xmm1
ja     1469 <riseset+0x309>
call   1030 <acos@plt>
movapd %xmm0,%xmm1
movsd  0x20(%rsp),%xmm0
divsd  0xdca(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
divsd  0xdc4(%rip),%xmm1
movsd  %xmm1,0x38(%rsp)
xor    %r13d,%r13d
jmp    128f <riseset+0x12f>
nop
mov    0x50(%rsp),%rax
movsd  0x8(%rsp),%xmm0
movsd  %xmm0,(%rax,%r13,8)
add    $0x1,%r13
cmp    $0x3,%r13
je     1469 <riseset+0x309>
movsd  (%r12),%xmm0
subsd  0x48(%rsp),%xmm0
subsd  0x40(%rsp),%xmm0
divsd  0xd7f(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
cmp    $0x2,%r13d
je     12d0 <riseset+0x170>
test   %r13d,%r13d
jne    12e2 <riseset+0x182>
movsd  0x8(%rsp),%xmm0
subsd  0x38(%rsp),%xmm0
jmp    12dc <riseset+0x17c>
nopl   0x0(%rax,%rax,1)
movsd  0x8(%rsp),%xmm0
addsd  0x38(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
xor    %r14d,%r14d
cs nopw 0x0(%rax,%rax,1)
nop
movsd  0x20(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,(%rsp)
mov    %ebp,%edi
mov    %rbx,%rsi
mov    %r12,%rdx
call   1060 <interpolate@plt>
movsd  %xmm0,0x18(%rsp)
mov    %ebp,%edi
mov    %rbx,%rsi
mov    %r15,%rdx
movsd  (%rsp),%xmm0
call   1060 <interpolate@plt>
movsd  %xmm0,(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xcf7(%rip),%xmm0
addsd  0x40(%rsp),%xmm0
addsd  0x48(%rsp),%xmm0
subsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x60(%rsp)
movsd  0x10(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x28(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x18(%rsp),%xmm0
call   1080 <cos@plt>
mulsd  0x28(%rsp),%xmm0
movsd  0x60(%rsp),%xmm1
mulsd  0x30(%rsp),%xmm1
addsd  %xmm1,%xmm0
call   1070 <asin@plt>
cmp    $0x1,%r13
jne    13e0 <riseset+0x280>
movsd  0x18(%rsp),%xmm1
divsd  0xc65(%rip),%xmm1
jmp    1432 <riseset+0x2d2>
cs nopw 0x0(%rax,%rax,1)
nop
subsd  0x58(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
mulsd  0xc2a(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x10(%rsp),%xmm0
call   1080 <cos@plt>
mulsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x18(%rsp),%xmm0
call   1050 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  0x8(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rsp)
movapd %xmm1,%xmm0
call   1040 <fabs@plt>
test   %eax,%eax
jle    1270 <riseset+0x110>
lea    0x1(%r14),%eax
cmp    $0x9,%r14d
mov    %eax,%r14d
jb     12f0 <riseset+0x190>
jmp    1270 <riseset+0x110>
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @riseset(i32 %0, double* %1, double* %2, double* %3, double %4, double %5, double %6, double %7, double %8, double* nocapture writeonly %9) {
%11 = getelementptr inbounds double, double* %9, i64 2
store double -1.000000e+00, double* %11
%12 = bitcast double* %9 to <2 x double>*
store <2 x double> <double -1.000000e+00, double -1.000000e+00>, <2 x double>* %12
%13 = tail call double @sin(double %8)
%14 = tail call double @sin(double %6)
%15 = load double, double* %3
%16 = tail call double @sin(double %15)
%17 = fneg double %14
%18 = tail call double @llvm.fmuladd.f64(double %17, double %16, double %13)
%19 = tail call double @cos(double %6)
%20 = load double, double* %3
%21 = tail call double @cos(double %20)
%22 = fmul double %19, %21
%23 = fdiv double %18, %22
%24 = fcmp olt double %23, -1.000000e+00
%25 = fcmp ogt double %23, 1.000000e+00
%26 = or i1 %24, %25
br i1 %26, label %86, label %27
27: ; preds = %10
%28 = tail call double @acos(double %23)
%29 = fdiv double %7, 8.640000e+04
%30 = fdiv double %28, 0x401921FB54442D18
br label %31
31: ; preds = %27, %82
%32 = phi i64 [ 0, %27 ], [ %84, %82 ]
%33 = load double, double* %2
%34 = fsub double %33, %5
%35 = fsub double %34, %4
%36 = fdiv double %35, 0x401921FB54442D18
%37 = trunc i64 %32 to i32
switch i32 %37, label %42 [
i32 0, label %38
i32 2, label %40
]
38: ; preds = %31
%39 = fsub double %36, %30
br label %42
40: ; preds = %31
%41 = fadd double %30, %36
br label %42
42: ; preds = %31, %40, %38
%43 = phi double [ %39, %38 ], [ %41, %40 ], [ %36, %31 ]
%44 = icmp eq i64 %32, 1
br label %45
45: ; preds = %74, %42
%46 = phi i32 [ 0, %42 ], [ %79, %74 ]
%47 = phi double [ %43, %42 ], [ %76, %74 ]
%48 = fadd double %29, %47
%49 = tail call double @interpolate(i32 %0, double* %1, double* %2, double %48)
%50 = tail call double @interpolate(i32 %0, double* %1, double* %3, double %48)
%51 = tail call double @llvm.fmuladd.f64(double %47, double 0x40193398EFA72964, double %4)
%52 = fadd double %51, %5
%53 = fsub double %52, %49
%54 = tail call double @sin(double %6)
%55 = tail call double @sin(double %50)
%56 = tail call double @cos(double %6)
%57 = tail call double @cos(double %50)
%58 = fmul double %56, %57
%59 = tail call double @cos(double %53)
%60 = fmul double %58, %59
%61 = tail call double @llvm.fmuladd.f64(double %54, double %55, double %60)
%62 = tail call double @asin(double %61)
br i1 %44, label %63, label %65
63: ; preds = %45
%64 = fdiv double %53, 0xC01921FB54442D18
br label %74
65: ; preds = %45
%66 = fsub double %62, %8
%67 = tail call double @cos(double %50)
%68 = fmul double %67, 0x401921FB54442D18
%69 = tail call double @cos(double %6)
%70 = fmul double %68, %69
%71 = tail call double @sin(double %53)
%72 = fmul double %70, %71
%73 = fdiv double %66, %72
br label %74
74: ; preds = %65, %63
%75 = phi double [ %64, %63 ], [ %73, %65 ]
%76 = fadd double %47, %75
%77 = tail call i32 @fabs(double %75)
%78 = icmp sgt i32 %77, 0
%79 = add nuw nsw i32 %46, 1
%80 = icmp ult i32 %46, 9
%81 = select i1 %78, i1 %80, i1 false
br i1 %81, label %45, label %82
82: ; preds = %74
%83 = getelementptr inbounds double, double* %9, i64 %32
store double %76, double* %83
%84 = add nuw nsw i64 %32, 1
%85 = icmp eq i64 %84, 3
br i1 %85, label %86, label %31
86: ; preds = %82, %10
ret void
}