#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 asin(double);
double atan2(double, double);
double cos(double);
double int4(unsigned char *);
double sin(double);
double uint4(unsigned char *);
int rot_regular2ij(unsigned char **sec, double **lat, double **lon, int n) {
  unsigned char *gds;
  double units, *tlon, *tlat;
  double sp_lat, sp_lon, angle_rot;
  double sin_a, cos_a;
  int basic_ang, sub_ang, i;
  double a, b, r, pr, gr, pm, gm, glat, glon;
  gds = sec[3];
  basic_ang = int4(gds + 38);
  sub_ang = int4(gds + 42);
  if (basic_ang != 0) {
    units = (double)basic_ang / (double)sub_ang;
  } else {
    units = 0.000001;
  }
  sp_lat = (int4(gds + 72)) * units;
  sp_lon = (uint4(gds + 76)) * units;
  angle_rot = (int4(gds + 80)) * units;
  angle_rot = -angle_rot;
  a = (3.14159265358979323846 / 180.0) * (90.0 + sp_lat);
  b = (3.14159265358979323846 / 180.0) * sp_lon;
  r = (3.14159265358979323846 / 180.0) * angle_rot;
  sin_a = sin(a);
  cos_a = cos(a);
  tlat = *lat;
  tlon = *lon;
  for (i = 0; i < n; i++) {
    pr = (3.14159265358979323846 / 180.0) * *tlat;
    gr = -(3.14159265358979323846 / 180.0) * *tlon;
    pm = asin(cos(pr) * cos(gr));
    gm = atan2(cos(pr) * sin(gr), -sin(pr));
    glat = (180.0 / 3.14159265358979323846) *
           (asin(sin_a * sin(pm) - cos_a * cos(pm) * cos(gm - r)));
    glon = -(180.0 / 3.14159265358979323846) *
           (-b + atan2(cos(pm) * sin(gm - r),
                       sin_a * cos(pm) * cos(gm - r) + cos_a * sin(pm)));
    *tlat++ = glat;
    *tlon++ = glon;
  }
  return 0;
}


x86 assembly (clang, -O0):
<rot_regular2ij>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rdi
add    $0x26,%rdi
call   1030 <int4@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x28(%rbp),%rdi
add    $0x2a,%rdi
call   1030 <int4@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x70(%rbp)
cmpl   $0x0,-0x6c(%rbp)
je     11d0 <rot_regular2ij+0x70>
cvtsi2sdl -0x6c(%rbp),%xmm0
cvtsi2sdl -0x70(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    11dd <rot_regular2ij+0x7d>
movsd  0xe28(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x28(%rbp),%rdi
add    $0x48,%rdi
call   1030 <int4@plt>
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rdi
add    $0x4c,%rdi
call   1040 <uint4@plt>
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rdi
add    $0x50,%rdi
call   1030 <int4@plt>
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xdc5(%rip),%xmm1
addsd  -0x48(%rbp),%xmm1
movsd  0xdb0(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xd9f(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xd8a(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
call   1060 <sin@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x80(%rbp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x40(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x38(%rbp)
movl   $0x0,-0x74(%rbp)
mov    -0x74(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    15df <rot_regular2ij+0x47f>
mov    -0x40(%rbp),%rax
movsd  0xd2a(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0xd32(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1080 <cos@plt>
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x130(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
call   1070 <asin@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1080 <cos@plt>
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
call   1060 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1060 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
call   1050 <atan2@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1060 <sin@plt>
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x118(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
subsd  -0x90(%rbp),%xmm0
ff
call   1080 <cos@plt>
movsd  -0x110(%rbp),%xmm1
ff
movsd  -0x108(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x100(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1070 <asin@plt>
movaps %xmm0,%xmm1
movsd  0xbb5(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1080 <cos@plt>
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
subsd  -0x90(%rbp),%xmm0
ff
call   1060 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
subsd  -0x90(%rbp),%xmm0
ff
call   1080 <cos@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1060 <sin@plt>
movsd  -0xe8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm3
ff
movaps %xmm0,%xmm4
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  %xmm4,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
call   1050 <atan2@plt>
movsd  -0xc8(%rbp),%xmm1
ff
addsd  %xmm0,%xmm1
movsd  0xa89(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x38(%rbp)
movsd  %xmm0,(%rax)
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    12c6 <rot_regular2ij+0x166>
xor    %eax,%eax
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rot_regular2ij>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x70,%rsp
mov    %ecx,%r12d
mov    %rdx,%r15
mov    %rsi,%r14
mov    0x18(%rdi),%rbx
lea    0x26(%rbx),%rdi
call   1030 <int4@plt>
cvttsd2si %xmm0,%ebp
lea    0x2a(%rbx),%rdi
call   1030 <int4@plt>
test   %ebp,%ebp
je     11aa <rot_regular2ij+0x4a>
cvtsi2sd %ebp,%xmm1
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
jmp    11b7 <rot_regular2ij+0x57>
movsd  0xe4e(%rip),%xmm0
movsd  %xmm0,(%rsp)
lea    0x48(%rbx),%rdi
call   1030 <int4@plt>
mulsd  (%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
lea    0x4c(%rbx),%rdi
call   1040 <uint4@plt>
movsd  %xmm0,0x20(%rsp)
add    $0x50,%rbx
mov    %rbx,%rdi
call   1030 <int4@plt>
movapd %xmm0,0x30(%rsp)
movsd  0x8(%rsp),%xmm0
addsd  0xe0e(%rip),%xmm0
mulsd  0xe0e(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1060 <sin@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <cos@plt>
movapd %xmm0,0x50(%rsp)
test   %r12d,%r12d
jle    1438 <rot_regular2ij+0x2d8>
movapd 0x30(%rsp),%xmm0
xorpd  0xdf5(%rip),%xmm0
movsd  (%rsp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  0xdc4(%rip),%xmm0
movapd %xmm0,0x30(%rsp)
mov    (%r15),%r15
mov    (%r14),%rbp
movsd  0x20(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movapd 0xdc6(%rip),%xmm1
xorpd  0x50(%rsp),%xmm1
movapd %xmm1,0x60(%rsp)
mulsd  0xd92(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
mov    %r12d,%r14d
xor    %ebx,%ebx
nopl   0x0(%rax)
movsd  0x0(%rbp,%rbx,8),%xmm0
mulsd  0xd72(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  (%r15,%rbx,8),%xmm1
mulsd  0xd67(%rip),%xmm1
movsd  %xmm1,0x10(%rsp)
call   1080 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   1080 <cos@plt>
mulsd  0x8(%rsp),%xmm0
call   1070 <asin@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
call   1060 <sin@plt>
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1060 <sin@plt>
movaps %xmm0,%xmm1
xorps  0xd17(%rip),%xmm1
movsd  0x10(%rsp),%xmm0
call   1050 <atan2@plt>
movsd  %xmm0,(%rsp)
movsd  0x8(%rsp),%xmm0
call   1060 <sin@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
movsd  %xmm0,(%rsp)
call   1080 <cos@plt>
movsd  0x18(%rsp),%xmm1
mulsd  0x60(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
mulsd  0x28(%rsp),%xmm1
addsd  %xmm1,%xmm0
call   1070 <asin@plt>
mulsd  0xc93(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
call   1060 <sin@plt>
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <cos@plt>
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,(%rsp)
movsd  0x8(%rsp),%xmm0
call   1060 <sin@plt>
mulsd  0x50(%rsp),%xmm0
movsd  (%rsp),%xmm1
mulsd  0x48(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0x18(%rsp),%xmm0
call   1050 <atan2@plt>
subsd  0x20(%rsp),%xmm0
mulsd  0xc0f(%rip),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x0(%rbp,%rbx,8)
movsd  %xmm0,(%r15,%rbx,8)
add    $0x1,%rbx
cmp    %ebx,%r14d
jne    1290 <rot_regular2ij+0x130>
xor    %eax,%eax
add    $0x70,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @rot_regular2ij(i8** nocapture %0, double** nocapture %1, double** nocapture %2, i32 %3) {
%5 = getelementptr inbounds i8*, i8** %0, i64 3
%6 = load i8*, i8** %5
%7 = getelementptr inbounds i8, i8* %6, i64 38
%8 = tail call double @int4(i8* %7)
%9 = fptosi double %8 to i32
%10 = getelementptr inbounds i8, i8* %6, i64 42
%11 = tail call double @int4(i8* %10)
%12 = icmp eq i32 %9, 0
br i1 %12, label %18, label %13
13: ; preds = %4
%14 = fptosi double %11 to i32
%15 = sitofp i32 %9 to double
%16 = sitofp i32 %14 to double
%17 = fdiv double %15, %16
br label %18
18: ; preds = %4, %13
%19 = phi double [ %17, %13 ], [ 0x3EB0C6F7A0B5ED8D, %4 ]
%20 = getelementptr inbounds i8, i8* %6, i64 72
%21 = tail call double @int4(i8* %20)
%22 = fmul double %19, %21
%23 = getelementptr inbounds i8, i8* %6, i64 76
%24 = tail call double @uint4(i8* %23)
%25 = getelementptr inbounds i8, i8* %6, i64 80
%26 = tail call double @int4(i8* %25)
%27 = fneg double %26
%28 = fmul double %19, %27
%29 = fadd double %22, 9.000000e+01
%30 = fmul double %29, 0x3F91DF46A2529D39
%31 = fmul double %28, 0x3F91DF46A2529D39
%32 = tail call double @sin(double %30)
%33 = tail call double @cos(double %30)
%34 = icmp sgt i32 %3, 0
br i1 %34, label %35, label %84
35: ; preds = %18
%36 = load double*, double** %2
%37 = load double*, double** %1
%38 = fmul double %19, %24
%39 = fneg double %33
%40 = fmul double %38, 0x3F91DF46A2529D39
br label %41
41: ; preds = %35, %41
%42 = phi double* [ %36, %35 ], [ %81, %41 ]
%43 = phi double* [ %37, %35 ], [ %80, %41 ]
%44 = phi i32 [ 0, %35 ], [ %82, %41 ]
%45 = load double, double* %43
%46 = fmul double %45, 0x3F91DF46A2529D39
%47 = load double, double* %42
%48 = fmul double %47, 0xBF91DF46A2529D39
%49 = tail call double @cos(double %46)
%50 = tail call double @cos(double %48)
%51 = fmul double %49, %50
%52 = tail call double @asin(double %51)
%53 = tail call double @cos(double %46)
%54 = tail call double @sin(double %48)
%55 = fmul double %53, %54
%56 = tail call double @sin(double %46)
%57 = fneg double %56
%58 = tail call double @atan2(double %55, double %57)
%59 = tail call double @sin(double %52)
%60 = tail call double @cos(double %52)
%61 = fsub double %58, %31
%62 = tail call double @cos(double %61)
%63 = fmul double %60, %39
%64 = fmul double %63, %62
%65 = tail call double @llvm.fmuladd.f64(double %32, double %59, double %64)
%66 = tail call double @asin(double %65)
%67 = fmul double %66, 0x404CA5DC1A63C1F8
%68 = tail call double @cos(double %52)
%69 = tail call double @sin(double %61)
%70 = fmul double %68, %69
%71 = tail call double @cos(double %52)
%72 = fmul double %32, %71
%73 = tail call double @cos(double %61)
%74 = tail call double @sin(double %52)
%75 = fmul double %33, %74
%76 = tail call double @llvm.fmuladd.f64(double %72, double %73, double %75)
%77 = tail call double @atan2(double %70, double %76)
%78 = fsub double %77, %40
%79 = fmul double %78, 0xC04CA5DC1A63C1F8
%80 = getelementptr inbounds double, double* %43, i64 1
store double %67, double* %43
%81 = getelementptr inbounds double, double* %42, i64 1
store double %79, double* %42
%82 = add nuw nsw i32 %44, 1
%83 = icmp eq i32 %82, %3
br i1 %83, label %84, label %41
84: ; preds = %41, %18
ret i32 0
}