#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 acos(double);
int atan(int);
int pow(float, int);
int sqrt(float);
float sr3(float t, float Tr, float Ts) {
  float p1, p2;
  p1 = t * Tr * acos(sqrt((t - Ts) / Tr)) +
       (-(sqrt((t - Ts) * (-t + Tr + Ts)) * (2 * t + Tr + 2 * Ts)) -
        pow(Tr, 2) * acos(1.0 / sqrt(Tr / (t - Ts)))) /
           4.;
  p2 = (-4 * (2 * t + Tr - 6 * Ts) * sqrt((t - Ts) * (-t + Tr + Ts)) +
        3.14159265358979323846 * Tr * (-4 * t + Tr + 8 * Ts) -
        2 * Tr * (-4 * t + Tr + 8 * Ts) *
            atan((-2 * t + Tr + 2 * Ts) /
                 (2. * sqrt((t - Ts) * (-t + Tr + Ts))))) /
       16.;
  return p1 + p2;
}


x86 assembly (clang, -O0):
<sr3>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  -0x4(%rbp),%xmm0
mulss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
divss  -0x8(%rbp),%xmm0
call   1060 <sqrt@plt>
cvtsi2sd %eax,%xmm0
call   1030 <acos@plt>
movss  -0x48(%rbp),%xmm0
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  -0x4(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
addss  -0x8(%rbp),%xmm1
addss  -0xc(%rbp),%xmm1
mulss  %xmm1,%xmm0
call   1060 <sqrt@plt>
cvtsi2ss %eax,%xmm0
movss  -0x4(%rbp),%xmm2
movss  -0x8(%rbp),%xmm1
addss  %xmm2,%xmm2
addss  %xmm1,%xmm2
movss  -0xc(%rbp),%xmm1
addss  %xmm1,%xmm1
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x8(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
mov    %eax,-0x38(%rbp)
movss  -0x8(%rbp),%xmm0
movss  -0x4(%rbp),%xmm1
subss  -0xc(%rbp),%xmm1
divss  %xmm1,%xmm0
call   1060 <sqrt@plt>
cvtsi2sd %eax,%xmm1
movsd  0xde9(%rip),%xmm0
divsd  %xmm1,%xmm0
call   1030 <acos@plt>
movss  -0x44(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
mov    %eax,%ecx
mov    -0x38(%rbp),%eax
imul   %ecx,%eax
cvtsi2ss %eax,%xmm2
subss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xdb2(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x4(%rbp),%xmm0
movss  -0x8(%rbp),%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  -0xc(%rbp),%xmm1
movss  0xd9e(%rip),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  0xd86(%rip),%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  -0x4(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
addss  -0x8(%rbp),%xmm1
addss  -0xc(%rbp),%xmm1
mulss  %xmm1,%xmm0
call   1060 <sqrt@plt>
movss  -0x34(%rbp),%xmm0
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xd10(%rip),%xmm0
mulsd  %xmm2,%xmm0
movss  -0x4(%rbp),%xmm3
movss  -0x8(%rbp),%xmm2
movss  0xd16(%rip),%xmm4
mulss  %xmm4,%xmm3
addss  %xmm2,%xmm3
movss  -0xc(%rbp),%xmm2
movss  0xcfd(%rip),%xmm4
mulss  %xmm4,%xmm2
addss  %xmm3,%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movss  0xce4(%rip),%xmm0
mulss  -0x8(%rbp),%xmm0
movss  -0x4(%rbp),%xmm2
movss  -0x8(%rbp),%xmm1
movss  0xcc9(%rip),%xmm3
mulss  %xmm3,%xmm2
addss  %xmm1,%xmm2
movss  -0xc(%rbp),%xmm1
movss  0xcb0(%rip),%xmm3
mulss  %xmm3,%xmm1
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x4(%rbp),%xmm0
movss  -0x8(%rbp),%xmm1
addss  %xmm0,%xmm0
subss  %xmm0,%xmm1
movss  -0xc(%rbp),%xmm0
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  -0x4(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
addss  -0x8(%rbp),%xmm1
addss  -0xc(%rbp),%xmm1
mulss  %xmm1,%xmm0
call   1060 <sqrt@plt>
movsd  -0x30(%rbp),%xmm0
cvtsi2sd %eax,%xmm2
movsd  0xc17(%rip),%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <atan@plt>
movss  -0x24(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
cvtsi2ss %eax,%xmm2
mulss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  0xbdc(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x10(%rbp),%xmm0
addss  -0x14(%rbp),%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sr3>:
push   %rbx
sub    $0x50,%rsp
movss  %xmm2,0x20(%rsp)
movss  %xmm1,0x18(%rsp)
movss  %xmm0,0xc(%rsp)
movaps %xmm0,%xmm3
mulss  %xmm1,%xmm3
movss  %xmm3,0x14(%rsp)
subss  %xmm2,%xmm0
movss  %xmm0,0x10(%rsp)
divss  %xmm1,%xmm0
call   1060 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
call   1030 <acos@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  0x14(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x28(%rsp)
movss  0x18(%rsp),%xmm0
subss  0xc(%rsp),%xmm0
addss  0x20(%rsp),%xmm0
mulss  0x10(%rsp),%xmm0
movss  %xmm0,0x14(%rsp)
call   1060 <sqrt@plt>
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
movss  0xc(%rsp),%xmm0
addss  %xmm0,%xmm0
movss  %xmm0,0x3c(%rsp)
movaps %xmm0,%xmm3
movss  0x18(%rsp),%xmm0
addss  %xmm0,%xmm3
movss  %xmm3,0x34(%rsp)
movss  0x20(%rsp),%xmm2
addss  %xmm2,%xmm2
movss  %xmm2,0x38(%rsp)
addss  %xmm3,%xmm2
xorps  0xdfe(%rip),%xmm2
mulss  %xmm1,%xmm2
movaps %xmm2,0x40(%rsp)
mov    $0x2,%edi
call   1050 <pow@plt>
mov    %eax,%ebx
movss  0x18(%rsp),%xmm0
divss  0x10(%rsp),%xmm0
call   1060 <sqrt@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xdd9(%rip),%xmm0
divsd  %xmm1,%xmm0
call   1030 <acos@plt>
imul   %ebx,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movaps 0x40(%rsp),%xmm1
subss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
mulsd  0xdb6(%rip),%xmm0
addsd  0x28(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x10(%rsp)
movss  0xdb6(%rip),%xmm0
mulss  0x20(%rsp),%xmm0
addss  0x34(%rsp),%xmm0
mulss  0xda6(%rip),%xmm0
movss  %xmm0,0x28(%rsp)
movss  0x14(%rsp),%xmm0
call   1060 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  0x28(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  0x18(%rsp),%xmm2
xorps  %xmm1,%xmm1
cvtss2sd %xmm2,%xmm1
mulsd  0xd5b(%rip),%xmm1
movss  0xc(%rsp),%xmm3
mulss  0xd61(%rip),%xmm3
addss  %xmm2,%xmm3
movaps %xmm3,%xmm4
movss  0x20(%rsp),%xmm3
mulss  0xd50(%rip),%xmm3
addss  %xmm4,%xmm3
xorps  %xmm4,%xmm4
cvtss2sd %xmm3,%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm0,%xmm4
movsd  %xmm4,0x20(%rsp)
movaps %xmm2,%xmm0
addss  %xmm2,%xmm0
mulss  %xmm3,%xmm0
movss  %xmm0,0xc(%rsp)
subss  0x3c(%rsp),%xmm2
addss  0x38(%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
movsd  %xmm0,0x18(%rsp)
movss  0x14(%rsp),%xmm0
call   1060 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  %xmm0,%xmm0
movsd  0x18(%rsp),%xmm1
divsd  %xmm0,%xmm1
cvttsd2si %xmm1,%edi
call   1040 <atan@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  0xc(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x20(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0xcb1(%rip),%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
addss  0x10(%rsp),%xmm0
add    $0x50,%rsp
pop    %rbx
ret

LLVM IR (-O0):
define float @sr3(float %0, float %1, float %2) {
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
store float %0, float* %4
store float %1, float* %5
store float %2, float* %6
%9 = load float, float* %4
%10 = load float, float* %5
%11 = fmul float %9, %10
%12 = load float, float* %4
%13 = load float, float* %6
%14 = fsub float %12, %13
%15 = load float, float* %5
%16 = fdiv float %14, %15
%17 = call i32 @sqrt(float %16)
%18 = sitofp i32 %17 to double
%19 = call i32 @acos(double %18)
%20 = sitofp i32 %19 to float
%21 = fmul float %11, %20
%22 = fpext float %21 to double
%23 = load float, float* %4
%24 = load float, float* %6
%25 = fsub float %23, %24
%26 = load float, float* %4
%27 = fneg float %26
%28 = load float, float* %5
%29 = fadd float %27, %28
%30 = load float, float* %6
%31 = fadd float %29, %30
%32 = fmul float %25, %31
%33 = call i32 @sqrt(float %32)
%34 = sitofp i32 %33 to float
%35 = load float, float* %4
%36 = load float, float* %5
%37 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %35, float %36)
%38 = load float, float* %6
%39 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %38, float %37)
%40 = fmul float %34, %39
%41 = fneg float %40
%42 = load float, float* %5
%43 = call i32 @pow(float %42, i32 2)
%44 = load float, float* %5
%45 = load float, float* %4
%46 = load float, float* %6
%47 = fsub float %45, %46
%48 = fdiv float %44, %47
%49 = call i32 @sqrt(float %48)
%50 = sitofp i32 %49 to double
%51 = fdiv double 1.000000e+00, %50
%52 = call i32 @acos(double %51)
%53 = mul nsw i32 %43, %52
%54 = sitofp i32 %53 to float
%55 = fsub float %41, %54
%56 = fpext float %55 to double
%57 = fdiv double %56, 4.000000e+00
%58 = fadd double %22, %57
%59 = fptrunc double %58 to float
store float %59, float* %7
%60 = load float, float* %4
%61 = load float, float* %5
%62 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %60, float %61)
%63 = load float, float* %6
%64 = call float @llvm.fmuladd.f32(float -6.000000e+00, float %63, float %62)
%65 = fmul float -4.000000e+00, %64
%66 = load float, float* %4
%67 = load float, float* %6
%68 = fsub float %66, %67
%69 = load float, float* %4
%70 = fneg float %69
%71 = load float, float* %5
%72 = fadd float %70, %71
%73 = load float, float* %6
%74 = fadd float %72, %73
%75 = fmul float %68, %74
%76 = call i32 @sqrt(float %75)
%77 = sitofp i32 %76 to float
%78 = fmul float %65, %77
%79 = fpext float %78 to double
%80 = load float, float* %5
%81 = fpext float %80 to double
%82 = fmul double 0x400921FB54442D18, %81
%83 = load float, float* %4
%84 = load float, float* %5
%85 = call float @llvm.fmuladd.f32(float -4.000000e+00, float %83, float %84)
%86 = load float, float* %6
%87 = call float @llvm.fmuladd.f32(float 8.000000e+00, float %86, float %85)
%88 = fpext float %87 to double
%89 = call double @llvm.fmuladd.f64(double %82, double %88, double %79)
%90 = load float, float* %5
%91 = fmul float 2.000000e+00, %90
%92 = load float, float* %4
%93 = load float, float* %5
%94 = call float @llvm.fmuladd.f32(float -4.000000e+00, float %92, float %93)
%95 = load float, float* %6
%96 = call float @llvm.fmuladd.f32(float 8.000000e+00, float %95, float %94)
%97 = fmul float %91, %96
%98 = load float, float* %4
%99 = load float, float* %5
%100 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %98, float %99)
%101 = load float, float* %6
%102 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %101, float %100)
%103 = fpext float %102 to double
%104 = load float, float* %4
%105 = load float, float* %6
%106 = fsub float %104, %105
%107 = load float, float* %4
%108 = fneg float %107
%109 = load float, float* %5
%110 = fadd float %108, %109
%111 = load float, float* %6
%112 = fadd float %110, %111
%113 = fmul float %106, %112
%114 = call i32 @sqrt(float %113)
%115 = sitofp i32 %114 to double
%116 = fmul double 2.000000e+00, %115
%117 = fdiv double %103, %116
%118 = fptosi double %117 to i32
%119 = call i32 @atan(i32 %118)
%120 = sitofp i32 %119 to float
%121 = fmul float %97, %120
%122 = fpext float %121 to double
%123 = fsub double %89, %122
%124 = fdiv double %123, 1.600000e+01
%125 = fptrunc double %124 to float
store float %125, float* %8
%126 = load float, float* %7
%127 = load float, float* %8
%128 = fadd float %126, %127
ret float %128
}

LLVM IR (-O2):
define float @sr3(float %0, float %1, float %2) {
%4 = fmul float %0, %1
%5 = fsub float %0, %2
%6 = fdiv float %5, %1
%7 = tail call i32 @sqrt(float %6)
%8 = sitofp i32 %7 to double
%9 = tail call i32 @acos(double %8)
%10 = sitofp i32 %9 to float
%11 = fmul float %4, %10
%12 = fpext float %11 to double
%13 = fsub float %1, %0
%14 = fadd float %13, %2
%15 = fmul float %5, %14
%16 = tail call i32 @sqrt(float %15)
%17 = sitofp i32 %16 to float
%18 = tail call float @llvm.fmuladd.f32(float %0, float 2.000000e+00, float %1)
%19 = tail call float @llvm.fmuladd.f32(float %2, float 2.000000e+00, float %18)
%20 = fneg float %19
%21 = fmul float %20, %17
%22 = tail call i32 @pow(float %1, i32 2)
%23 = fdiv float %1, %5
%24 = tail call i32 @sqrt(float %23)
%25 = sitofp i32 %24 to double
%26 = fdiv double 1.000000e+00, %25
%27 = tail call i32 @acos(double %26)
%28 = mul nsw i32 %27, %22
%29 = sitofp i32 %28 to float
%30 = fsub float %21, %29
%31 = fpext float %30 to double
%32 = fmul double %31, 2.500000e-01
%33 = fadd double %32, %12
%34 = fptrunc double %33 to float
%35 = tail call float @llvm.fmuladd.f32(float %2, float -6.000000e+00, float %18)
%36 = fmul float %35, -4.000000e+00
%37 = tail call i32 @sqrt(float %15)
%38 = sitofp i32 %37 to float
%39 = fmul float %36, %38
%40 = fpext float %39 to double
%41 = fpext float %1 to double
%42 = fmul double %41, 0x400921FB54442D18
%43 = tail call float @llvm.fmuladd.f32(float %0, float -4.000000e+00, float %1)
%44 = tail call float @llvm.fmuladd.f32(float %2, float 8.000000e+00, float %43)
%45 = fpext float %44 to double
%46 = tail call double @llvm.fmuladd.f64(double %42, double %45, double %40)
%47 = fmul float %1, 2.000000e+00
%48 = fmul float %47, %44
%49 = tail call float @llvm.fmuladd.f32(float %0, float -2.000000e+00, float %1)
%50 = tail call float @llvm.fmuladd.f32(float %2, float 2.000000e+00, float %49)
%51 = fpext float %50 to double
%52 = tail call i32 @sqrt(float %15)
%53 = sitofp i32 %52 to double
%54 = fmul double %53, 2.000000e+00
%55 = fdiv double %51, %54
%56 = fptosi double %55 to i32
%57 = tail call i32 @atan(i32 %56)
%58 = sitofp i32 %57 to float
%59 = fmul float %48, %58
%60 = fpext float %59 to double
%61 = fsub double %46, %60
%62 = fmul double %61, 6.250000e-02
%63 = fptrunc double %62 to float
%64 = fadd float %34, %63
ret float %64
}