#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 */
float exponential(float, int);
float factorial(int);
float sin1(float sita) {
  float re;
  float an = sita;
  int i;
  int t = 3;
  while (an > 2 * 3.14159265358979)
    an -= 2 * 3.14159265358979;
  if (an >= 0 && an <= 3.14159265358979 / 2) {
    re = an;
    for (i = 3; i < 12; i += 2, t++) {
      re += exponential(-1, t) * (exponential(an, i) / factorial(i));
    }
  } else if (an > 3.14159265358979 / 2 && an <= 3.14159265358979) {
    an = 3.14159265358979 - an;
    re = an;
    for (i = 3; i < 12; i += 2, t++) {
      re += exponential(-1, t) * (exponential(an, i) / factorial(i));
    }
  } else if (an > 3.14159265358979 && an <= 3 * 3.14159265358979 / 2) {
    an -= 3.14159265358979;
    re = an;
    for (i = 3; i < 12; i += 2, t++) {
      re += exponential(-1, t) * (exponential(an, i) / factorial(i));
    }
    re = -re;
  } else {
    an = 2 * 3.14159265358979 - an;
    re = an;
    for (i = 3; i < 12; i += 2, t++) {
      re += exponential(-1, t) * (exponential(an, i) / factorial(i));
    }
    re = -re;
  }
  return re;
}


x86 assembly (clang, -O0):
<sin1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
movl   $0x3,-0x14(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xeb1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    117c <sin1+0x5c>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe96(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    113e <sin1+0x1e>
movss  -0xc(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     1231 <sin1+0x111>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe6a(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     1231 <sin1+0x111>
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movl   $0x3,-0x10(%rbp)
cmpl   $0xc,-0x10(%rbp)
jge    122c <sin1+0x10c>
mov    -0x14(%rbp),%edi
movss  0xe52(%rip),%xmm0
call   1040 <exponential@plt>
movss  %xmm0,-0x18(%rbp)
movss  -0xc(%rbp),%xmm0
mov    -0x10(%rbp),%edi
call   1040 <exponential@plt>
movss  %xmm0,-0x1c(%rbp)
mov    -0x10(%rbp),%edi
call   1030 <factorial@plt>
movss  -0x1c(%rbp),%xmm2
movaps %xmm0,%xmm1
movss  -0x18(%rbp),%xmm0
divss  %xmm1,%xmm2
movss  -0x8(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11b9 <sin1+0x99>
jmp    14c5 <sin1+0x3a5>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdc6(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    130e <sin1+0x1ee>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdb3(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     130e <sin1+0x1ee>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd98(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movl   $0x3,-0x10(%rbp)
cmpl   $0xc,-0x10(%rbp)
jge    1309 <sin1+0x1e9>
mov    -0x14(%rbp),%edi
movss  0xd75(%rip),%xmm0
call   1040 <exponential@plt>
movss  %xmm0,-0x20(%rbp)
movss  -0xc(%rbp),%xmm0
mov    -0x10(%rbp),%edi
call   1040 <exponential@plt>
movss  %xmm0,-0x24(%rbp)
mov    -0x10(%rbp),%edi
call   1030 <factorial@plt>
movss  -0x24(%rbp),%xmm2
movaps %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
divss  %xmm1,%xmm2
movss  -0x8(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1296 <sin1+0x176>
jmp    14c0 <sin1+0x3a0>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcf1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1402 <sin1+0x2e2>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xcde(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     1402 <sin1+0x2e2>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcbb(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movl   $0x3,-0x10(%rbp)
cmpl   $0xc,-0x10(%rbp)
jge    13e6 <sin1+0x2c6>
mov    -0x14(%rbp),%edi
movss  0xc98(%rip),%xmm0
call   1040 <exponential@plt>
movss  %xmm0,-0x28(%rbp)
movss  -0xc(%rbp),%xmm0
mov    -0x10(%rbp),%edi
call   1040 <exponential@plt>
movss  %xmm0,-0x2c(%rbp)
mov    -0x10(%rbp),%edi
call   1030 <factorial@plt>
movss  -0x2c(%rbp),%xmm2
movaps %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
divss  %xmm1,%xmm2
movss  -0x8(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1373 <sin1+0x253>
movss  -0x8(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x8(%rbp)
jmp    14bb <sin1+0x39b>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xbed(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movl   $0x3,-0x10(%rbp)
cmpl   $0xc,-0x10(%rbp)
jge    14a4 <sin1+0x384>
mov    -0x14(%rbp),%edi
movss  0xbda(%rip),%xmm0
call   1040 <exponential@plt>
movss  %xmm0,-0x30(%rbp)
movss  -0xc(%rbp),%xmm0
mov    -0x10(%rbp),%edi
call   1040 <exponential@plt>
movss  %xmm0,-0x34(%rbp)
mov    -0x10(%rbp),%edi
call   1030 <factorial@plt>
movss  -0x34(%rbp),%xmm2
movaps %xmm0,%xmm1
movss  -0x30(%rbp),%xmm0
divss  %xmm1,%xmm2
movss  -0x8(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1431 <sin1+0x311>
movss  -0x8(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x8(%rbp)
jmp    14c0 <sin1+0x3a0>
jmp    14c5 <sin1+0x3a5>
movss  -0x8(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sin1>:
sub    $0x28,%rsp
movaps %xmm0,%xmm3
cvtss2sd %xmm0,%xmm0
ucomisd 0xecd(%rip),%xmm0
jbe    1168 <sin1+0x48>
movsd  0xecb(%rip),%xmm1
movsd  0xebb(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
addsd  %xmm1,%xmm0
xorps  %xmm3,%xmm3
cvtsd2ss %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
ucomisd %xmm2,%xmm0
ja     1150 <sin1+0x30>
xorpd  %xmm1,%xmm1
ucomiss %xmm1,%xmm3
jb     1194 <sin1+0x74>
movsd  0xe97(%rip),%xmm1
ucomisd %xmm0,%xmm1
jb     1194 <sin1+0x74>
movss  0xea9(%rip),%xmm0
mov    $0x3,%edi
movss  %xmm3,0x10(%rsp)
jmp    11d2 <sin1+0xb2>
ucomisd 0xe74(%rip),%xmm0
jbe    136b <sin1+0x24b>
movsd  0xe6e(%rip),%xmm1
ucomisd %xmm0,%xmm1
jb     136b <sin1+0x24b>
subsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0x10(%rsp)
movss  0xe63(%rip),%xmm0
mov    $0x3,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x4(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0x3,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x8(%rsp)
mov    $0x3,%edi
call   1030 <factorial@plt>
movss  0x8(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0x4(%rsp),%xmm1
addss  0x10(%rsp),%xmm1
movss  %xmm1,0x8(%rsp)
movss  0xe0f(%rip),%xmm0
mov    $0x4,%edi
call   1040 <exponential@plt>
movss  %xmm0,0xc(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0x5,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x4(%rsp)
mov    $0x5,%edi
call   1030 <factorial@plt>
movss  0x4(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0xc(%rsp),%xmm1
addss  0x8(%rsp),%xmm1
movss  %xmm1,0x4(%rsp)
movss  0xdbb(%rip),%xmm0
mov    $0x5,%edi
call   1040 <exponential@plt>
movss  %xmm0,0xc(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0x7,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x8(%rsp)
mov    $0x7,%edi
call   1030 <factorial@plt>
movss  0x8(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0xc(%rsp),%xmm1
addss  0x4(%rsp),%xmm1
movss  %xmm1,0x8(%rsp)
movss  0xd67(%rip),%xmm0
mov    $0x6,%edi
call   1040 <exponential@plt>
movss  %xmm0,0xc(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0x9,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x4(%rsp)
mov    $0x9,%edi
call   1030 <factorial@plt>
movss  0x4(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0xc(%rsp),%xmm1
addss  0x8(%rsp),%xmm1
movss  %xmm1,0x4(%rsp)
movss  0xd13(%rip),%xmm0
mov    $0x7,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x8(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0xb,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x10(%rsp)
mov    $0xb,%edi
call   1030 <factorial@plt>
movss  0x10(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0x8(%rsp),%xmm1
addss  0x4(%rsp),%xmm1
movaps %xmm1,%xmm0
add    $0x28,%rsp
ret
ucomisd 0xca5(%rip),%xmm0
jbe    1391 <sin1+0x271>
movsd  0xca3(%rip),%xmm1
ucomisd %xmm0,%xmm1
jb     1391 <sin1+0x271>
addsd  0xc9d(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
jmp    13a4 <sin1+0x284>
movsd  0xc67(%rip),%xmm1
subsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0x10(%rsp)
movss  0xc7e(%rip),%xmm0
mov    $0x3,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x4(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0x3,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x8(%rsp)
mov    $0x3,%edi
call   1030 <factorial@plt>
movss  0x8(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0x4(%rsp),%xmm1
addss  0x10(%rsp),%xmm1
movss  %xmm1,0x8(%rsp)
movss  0xc2a(%rip),%xmm0
mov    $0x4,%edi
call   1040 <exponential@plt>
movss  %xmm0,0xc(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0x5,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x4(%rsp)
mov    $0x5,%edi
call   1030 <factorial@plt>
movss  0x4(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0xc(%rsp),%xmm1
addss  0x8(%rsp),%xmm1
movss  %xmm1,0x4(%rsp)
movss  0xbd6(%rip),%xmm0
mov    $0x5,%edi
call   1040 <exponential@plt>
movss  %xmm0,0xc(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0x7,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x8(%rsp)
mov    $0x7,%edi
call   1030 <factorial@plt>
movss  0x8(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0xc(%rsp),%xmm1
addss  0x4(%rsp),%xmm1
movss  %xmm1,0x8(%rsp)
movss  0xb82(%rip),%xmm0
mov    $0x6,%edi
call   1040 <exponential@plt>
movss  %xmm0,0xc(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0x9,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x4(%rsp)
mov    $0x9,%edi
call   1030 <factorial@plt>
movss  0x4(%rsp),%xmm1
divss  %xmm0,%xmm1
mulss  0xc(%rsp),%xmm1
addss  0x8(%rsp),%xmm1
movss  %xmm1,0x4(%rsp)
movss  0xb2e(%rip),%xmm0
mov    $0x7,%edi
call   1040 <exponential@plt>
movss  %xmm0,0x8(%rsp)
movss  0x10(%rsp),%xmm0
mov    $0xb,%edi
call   1040 <exponential@plt>
movaps %xmm0,0x10(%rsp)
mov    $0xb,%edi
call   1030 <factorial@plt>
movaps 0x10(%rsp),%xmm1
divss  %xmm0,%xmm1
movaps %xmm1,%xmm0
mulss  0x8(%rsp),%xmm0
addss  0x4(%rsp),%xmm0
xorps  0xaf0(%rip),%xmm0
add    $0x28,%rsp
ret

LLVM IR (-O0):
define float @sin1(float %0) {
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca i32
%6 = alloca i32
store float %0, float* %2
%7 = load float, float* %2
store float %7, float* %4
store i32 3, i32* %6
br label %8
8: ; preds = %12, %1
%9 = load float, float* %4
%10 = fpext float %9 to double
%11 = fcmp ogt double %10, 0x401921FB54442D11
br i1 %11, label %12, label %17
12: ; preds = %8
%13 = load float, float* %4
%14 = fpext float %13 to double
%15 = fsub double %14, 0x401921FB54442D11
%16 = fptrunc double %15 to float
store float %16, float* %4
br label %8
17: ; preds = %8
%18 = load float, float* %4
%19 = fcmp oge float %18, 0.000000e+00
br i1 %19, label %20, label %46
20: ; preds = %17
%21 = load float, float* %4
%22 = fpext float %21 to double
%23 = fcmp ole double %22, 0x3FF921FB54442D11
br i1 %23, label %24, label %46
24: ; preds = %20
%25 = load float, float* %4
store float %25, float* %3
store i32 3, i32* %5
br label %26
26: ; preds = %40, %24
%27 = load i32, i32* %5
%28 = icmp slt i32 %27, 12
br i1 %28, label %29, label %45
29: ; preds = %26
%30 = load i32, i32* %6
%31 = call float @exponential(float -1.000000e+00, i32 %30)
%32 = load float, float* %4
%33 = load i32, i32* %5
%34 = call float @exponential(float %32, i32 %33)
%35 = load i32, i32* %5
%36 = call float @factorial(i32 %35)
%37 = fdiv float %34, %36
%38 = load float, float* %3
%39 = call float @llvm.fmuladd.f32(float %31, float %37, float %38)
store float %39, float* %3
br label %40
40: ; preds = %29
%41 = load i32, i32* %5
%42 = add nsw i32 %41, 2
store i32 %42, i32* %5
%43 = load i32, i32* %6
%44 = add nsw i32 %43, 1
store i32 %44, i32* %6
br label %26
45: ; preds = %26
br label %146
46: ; preds = %20, %17
%47 = load float, float* %4
%48 = fpext float %47 to double
%49 = fcmp ogt double %48, 0x3FF921FB54442D11
br i1 %49, label %50, label %80
50: ; preds = %46
%51 = load float, float* %4
%52 = fpext float %51 to double
%53 = fcmp ole double %52, 0x400921FB54442D11
br i1 %53, label %54, label %80
54: ; preds = %50
%55 = load float, float* %4
%56 = fpext float %55 to double
%57 = fsub double 0x400921FB54442D11, %56
%58 = fptrunc double %57 to float
store float %58, float* %4
%59 = load float, float* %4
store float %59, float* %3
store i32 3, i32* %5
br label %60
60: ; preds = %74, %54
%61 = load i32, i32* %5
%62 = icmp slt i32 %61, 12
br i1 %62, label %63, label %79
63: ; preds = %60
%64 = load i32, i32* %6
%65 = call float @exponential(float -1.000000e+00, i32 %64)
%66 = load float, float* %4
%67 = load i32, i32* %5
%68 = call float @exponential(float %66, i32 %67)
%69 = load i32, i32* %5
%70 = call float @factorial(i32 %69)
%71 = fdiv float %68, %70
%72 = load float, float* %3
%73 = call float @llvm.fmuladd.f32(float %65, float %71, float %72)
store float %73, float* %3
br label %74
74: ; preds = %63
%75 = load i32, i32* %5
%76 = add nsw i32 %75, 2
store i32 %76, i32* %5
%77 = load i32, i32* %6
%78 = add nsw i32 %77, 1
store i32 %78, i32* %6
br label %60
79: ; preds = %60
br label %145
80: ; preds = %50, %46
%81 = load float, float* %4
%82 = fpext float %81 to double
%83 = fcmp ogt double %82, 0x400921FB54442D11
br i1 %83, label %84, label %116
84: ; preds = %80
%85 = load float, float* %4
%86 = fpext float %85 to double
%87 = fcmp ole double %86, 0x4012D97C7F3321CD
br i1 %87, label %88, label %116
88: ; preds = %84
%89 = load float, float* %4
%90 = fpext float %89 to double
%91 = fsub double %90, 0x400921FB54442D11
%92 = fptrunc double %91 to float
store float %92, float* %4
%93 = load float, float* %4
store float %93, float* %3
store i32 3, i32* %5
br label %94
94: ; preds = %108, %88
%95 = load i32, i32* %5
%96 = icmp slt i32 %95, 12
br i1 %96, label %97, label %113
97: ; preds = %94
%98 = load i32, i32* %6
%99 = call float @exponential(float -1.000000e+00, i32 %98)
%100 = load float, float* %4
%101 = load i32, i32* %5
%102 = call float @exponential(float %100, i32 %101)
%103 = load i32, i32* %5
%104 = call float @factorial(i32 %103)
%105 = fdiv float %102, %104
%106 = load float, float* %3
%107 = call float @llvm.fmuladd.f32(float %99, float %105, float %106)
store float %107, float* %3
br label %108
108: ; preds = %97
%109 = load i32, i32* %5
%110 = add nsw i32 %109, 2
store i32 %110, i32* %5
%111 = load i32, i32* %6
%112 = add nsw i32 %111, 1
store i32 %112, i32* %6
br label %94
113: ; preds = %94
%114 = load float, float* %3
%115 = fneg float %114
store float %115, float* %3
br label %144
116: ; preds = %84, %80
%117 = load float, float* %4
%118 = fpext float %117 to double
%119 = fsub double 0x401921FB54442D11, %118
%120 = fptrunc double %119 to float
store float %120, float* %4
%121 = load float, float* %4
store float %121, float* %3
store i32 3, i32* %5
br label %122
122: ; preds = %136, %116
%123 = load i32, i32* %5
%124 = icmp slt i32 %123, 12
br i1 %124, label %125, label %141
125: ; preds = %122
%126 = load i32, i32* %6
%127 = call float @exponential(float -1.000000e+00, i32 %126)
%128 = load float, float* %4
%129 = load i32, i32* %5
%130 = call float @exponential(float %128, i32 %129)
%131 = load i32, i32* %5
%132 = call float @factorial(i32 %131)
%133 = fdiv float %130, %132
%134 = load float, float* %3
%135 = call float @llvm.fmuladd.f32(float %127, float %133, float %134)
store float %135, float* %3
br label %136
136: ; preds = %125
%137 = load i32, i32* %5
%138 = add nsw i32 %137, 2
store i32 %138, i32* %5
%139 = load i32, i32* %6
%140 = add nsw i32 %139, 1
store i32 %140, i32* %6
br label %122
141: ; preds = %122
%142 = load float, float* %3
%143 = fneg float %142
store float %143, float* %3
br label %144
144: ; preds = %141, %113
br label %145
145: ; preds = %144, %79
br label %146
146: ; preds = %145, %45
%147 = load float, float* %3
ret float %147
}

LLVM IR (-O2):
define float @sin1(float %0) {
%2 = fpext float %0 to double
%3 = fcmp ogt double %2, 0x401921FB54442D11
br i1 %3, label %4, label %10
4: ; preds = %1, %4
%5 = phi double [ %8, %4 ], [ %2, %1 ]
%6 = fadd double %5, 0xC01921FB54442D11
%7 = fptrunc double %6 to float
%8 = fpext float %7 to double
%9 = fcmp ogt double %8, 0x401921FB54442D11
br i1 %9, label %4, label %10
10: ; preds = %4, %1
%11 = phi float [ %0, %1 ], [ %7, %4 ]
%12 = phi double [ %2, %1 ], [ %8, %4 ]
%13 = fcmp ult float %11, 0.000000e+00
%14 = fcmp ugt double %12, 0x3FF921FB54442D11
%15 = or i1 %13, %14
br i1 %15, label %42, label %16
16: ; preds = %10
%17 = tail call float @exponential(float -1.000000e+00, i32 3)
%18 = tail call float @exponential(float %11, i32 3)
%19 = tail call float @factorial(i32 3)
%20 = fdiv float %18, %19
%21 = tail call float @llvm.fmuladd.f32(float %17, float %20, float %11)
%22 = tail call float @exponential(float -1.000000e+00, i32 4)
%23 = tail call float @exponential(float %11, i32 5)
%24 = tail call float @factorial(i32 5)
%25 = fdiv float %23, %24
%26 = tail call float @llvm.fmuladd.f32(float %22, float %25, float %21)
%27 = tail call float @exponential(float -1.000000e+00, i32 5)
%28 = tail call float @exponential(float %11, i32 7)
%29 = tail call float @factorial(i32 7)
%30 = fdiv float %28, %29
%31 = tail call float @llvm.fmuladd.f32(float %27, float %30, float %26)
%32 = tail call float @exponential(float -1.000000e+00, i32 6)
%33 = tail call float @exponential(float %11, i32 9)
%34 = tail call float @factorial(i32 9)
%35 = fdiv float %33, %34
%36 = tail call float @llvm.fmuladd.f32(float %32, float %35, float %31)
%37 = tail call float @exponential(float -1.000000e+00, i32 7)
%38 = tail call float @exponential(float %11, i32 11)
%39 = tail call float @factorial(i32 11)
%40 = fdiv float %38, %39
%41 = tail call float @llvm.fmuladd.f32(float %37, float %40, float %36)
br label %136
42: ; preds = %10
%43 = fcmp ule double %12, 0x3FF921FB54442D11
%44 = fcmp ugt double %12, 0x400921FB54442D11
%45 = or i1 %43, %44
br i1 %45, label %74, label %46
46: ; preds = %42
%47 = fsub double 0x400921FB54442D11, %12
%48 = fptrunc double %47 to float
%49 = tail call float @exponential(float -1.000000e+00, i32 3)
%50 = tail call float @exponential(float %48, i32 3)
%51 = tail call float @factorial(i32 3)
%52 = fdiv float %50, %51
%53 = tail call float @llvm.fmuladd.f32(float %49, float %52, float %48)
%54 = tail call float @exponential(float -1.000000e+00, i32 4)
%55 = tail call float @exponential(float %48, i32 5)
%56 = tail call float @factorial(i32 5)
%57 = fdiv float %55, %56
%58 = tail call float @llvm.fmuladd.f32(float %54, float %57, float %53)
%59 = tail call float @exponential(float -1.000000e+00, i32 5)
%60 = tail call float @exponential(float %48, i32 7)
%61 = tail call float @factorial(i32 7)
%62 = fdiv float %60, %61
%63 = tail call float @llvm.fmuladd.f32(float %59, float %62, float %58)
%64 = tail call float @exponential(float -1.000000e+00, i32 6)
%65 = tail call float @exponential(float %48, i32 9)
%66 = tail call float @factorial(i32 9)
%67 = fdiv float %65, %66
%68 = tail call float @llvm.fmuladd.f32(float %64, float %67, float %63)
%69 = tail call float @exponential(float -1.000000e+00, i32 7)
%70 = tail call float @exponential(float %48, i32 11)
%71 = tail call float @factorial(i32 11)
%72 = fdiv float %70, %71
%73 = tail call float @llvm.fmuladd.f32(float %69, float %72, float %68)
br label %136
74: ; preds = %42
%75 = fcmp ule double %12, 0x400921FB54442D11
%76 = fcmp ugt double %12, 0x4012D97C7F3321CD
%77 = or i1 %75, %76
br i1 %77, label %107, label %78
78: ; preds = %74
%79 = fadd double %12, 0xC00921FB54442D11
%80 = fptrunc double %79 to float
%81 = tail call float @exponential(float -1.000000e+00, i32 3)
%82 = tail call float @exponential(float %80, i32 3)
%83 = tail call float @factorial(i32 3)
%84 = fdiv float %82, %83
%85 = tail call float @llvm.fmuladd.f32(float %81, float %84, float %80)
%86 = tail call float @exponential(float -1.000000e+00, i32 4)
%87 = tail call float @exponential(float %80, i32 5)
%88 = tail call float @factorial(i32 5)
%89 = fdiv float %87, %88
%90 = tail call float @llvm.fmuladd.f32(float %86, float %89, float %85)
%91 = tail call float @exponential(float -1.000000e+00, i32 5)
%92 = tail call float @exponential(float %80, i32 7)
%93 = tail call float @factorial(i32 7)
%94 = fdiv float %92, %93
%95 = tail call float @llvm.fmuladd.f32(float %91, float %94, float %90)
%96 = tail call float @exponential(float -1.000000e+00, i32 6)
%97 = tail call float @exponential(float %80, i32 9)
%98 = tail call float @factorial(i32 9)
%99 = fdiv float %97, %98
%100 = tail call float @llvm.fmuladd.f32(float %96, float %99, float %95)
%101 = tail call float @exponential(float -1.000000e+00, i32 7)
%102 = tail call float @exponential(float %80, i32 11)
%103 = tail call float @factorial(i32 11)
%104 = fdiv float %102, %103
%105 = tail call float @llvm.fmuladd.f32(float %101, float %104, float %100)
%106 = fneg float %105
br label %136
107: ; preds = %74
%108 = fsub double 0x401921FB54442D11, %12
%109 = fptrunc double %108 to float
%110 = tail call float @exponential(float -1.000000e+00, i32 3)
%111 = tail call float @exponential(float %109, i32 3)
%112 = tail call float @factorial(i32 3)
%113 = fdiv float %111, %112
%114 = tail call float @llvm.fmuladd.f32(float %110, float %113, float %109)
%115 = tail call float @exponential(float -1.000000e+00, i32 4)
%116 = tail call float @exponential(float %109, i32 5)
%117 = tail call float @factorial(i32 5)
%118 = fdiv float %116, %117
%119 = tail call float @llvm.fmuladd.f32(float %115, float %118, float %114)
%120 = tail call float @exponential(float -1.000000e+00, i32 5)
%121 = tail call float @exponential(float %109, i32 7)
%122 = tail call float @factorial(i32 7)
%123 = fdiv float %121, %122
%124 = tail call float @llvm.fmuladd.f32(float %120, float %123, float %119)
%125 = tail call float @exponential(float -1.000000e+00, i32 6)
%126 = tail call float @exponential(float %109, i32 9)
%127 = tail call float @factorial(i32 9)
%128 = fdiv float %126, %127
%129 = tail call float @llvm.fmuladd.f32(float %125, float %128, float %124)
%130 = tail call float @exponential(float -1.000000e+00, i32 7)
%131 = tail call float @exponential(float %109, i32 11)
%132 = tail call float @factorial(i32 11)
%133 = fdiv float %131, %132
%134 = tail call float @llvm.fmuladd.f32(float %130, float %133, float %129)
%135 = fneg float %134
br label %136
136: ; preds = %16, %46, %107, %78
%137 = phi float [ %106, %78 ], [ %135, %107 ], [ %73, %46 ], [ %41, %16 ]
ret float %137
}