#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 */
int /*<<< orphan*/ range(double *, int);
void radecrange(double *ra, double *dec) {
  if (*dec < -3.141592653589793 / 2) {
    *dec = -3.141592653589793 - *dec;
    *ra += 3.141592653589793;
  } else if (*dec > 3.141592653589793 / 2) {
    *dec = 3.141592653589793 - *dec;
    *ra += 3.141592653589793;
  }
  range(ra, 2 * 3.141592653589793);
}


x86 assembly (clang, -O0):
<radecrange>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xed4(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1167 <radecrange+0x57>
mov    -0x10(%rbp),%rax
movsd  0xed6(%rip),%xmm0
subsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0xeb6(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    11b2 <radecrange+0xa2>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xe91(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11ad <radecrange+0x9d>
mov    -0x10(%rbp),%rax
movsd  0xe83(%rip),%xmm0
subsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0xe6b(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    11b2 <radecrange+0xa2>
mov    -0x8(%rbp),%rdi
mov    $0x6,%esi
call   1030 <range@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<radecrange>:
movsd  (%rsi),%xmm0
movsd  0xeec(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    112c <radecrange+0x1c>
movsd  0xed6(%rip),%xmm1
jmp    113e <radecrange+0x2e>
ucomisd 0xee4(%rip),%xmm0
jbe    1156 <radecrange+0x46>
movsd  0xed2(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi)
movsd  (%rdi),%xmm0
addsd  0xebe(%rip),%xmm0
movsd  %xmm0,(%rdi)
mov    $0x6,%esi
jmp    1030 <range@plt>

LLVM IR (-O0):
define void @radecrange(double* %0, double* %1) {
%3 = alloca double*
%4 = alloca double*
store double* %0, double** %3
store double* %1, double** %4
%5 = load double*, double** %4
%6 = load double, double* %5
%7 = fcmp olt double %6, 0xBFF921FB54442D18
br i1 %7, label %8, label %16
8: ; preds = %2
%9 = load double*, double** %4
%10 = load double, double* %9
%11 = fsub double 0xC00921FB54442D18, %10
%12 = load double*, double** %4
store double %11, double* %12
%13 = load double*, double** %3
%14 = load double, double* %13
%15 = fadd double %14, 0x400921FB54442D18
store double %15, double* %13
br label %29
16: ; preds = %2
%17 = load double*, double** %4
%18 = load double, double* %17
%19 = fcmp ogt double %18, 0x3FF921FB54442D18
br i1 %19, label %20, label %28
20: ; preds = %16
%21 = load double*, double** %4
%22 = load double, double* %21
%23 = fsub double 0x400921FB54442D18, %22
%24 = load double*, double** %4
store double %23, double* %24
%25 = load double*, double** %3
%26 = load double, double* %25
%27 = fadd double %26, 0x400921FB54442D18
store double %27, double* %25
br label %28
28: ; preds = %20, %16
br label %29
29: ; preds = %28, %8
%30 = load double*, double** %3
%31 = call i32 @range(double* %30, i32 6)
ret void
}

LLVM IR (-O2):
define void @radecrange(double* %0, double* nocapture %1) {
%3 = load double, double* %1
%4 = fcmp olt double %3, 0xBFF921FB54442D18
br i1 %4, label %7, label %5
5: ; preds = %2
%6 = fcmp ogt double %3, 0x3FF921FB54442D18
br i1 %6, label %7, label %12
7: ; preds = %5, %2
%8 = phi double [ 0xC00921FB54442D18, %2 ], [ 0x400921FB54442D18, %5 ]
%9 = fsub double %8, %3
store double %9, double* %1
%10 = load double, double* %0
%11 = fadd double %10, 0x400921FB54442D18
store double %11, double* %0
br label %12
12: ; preds = %7, %5
%13 = tail call i32 @range(double* %0, i32 6)
ret void
}