#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 */
long double cosl(long double);
int /*<<< orphan*/ link_error();
long double sinl(long double);
long double tanl(long double);
void test1l(long double x) {
  if (cosl(x) != cosl(-x))
    link_error();
  if (sinl(x) / cosl(x) != tanl(x))
    link_error();
  if (cosl(x) / sinl(x) != 1.0l / tanl(x))
    link_error();
  if (tanl(x) * cosl(x) != sinl(x))
    link_error();
  if (cosl(x) * tanl(x) != sinl(x))
    link_error();
}


x86 assembly (clang, -O0):
<test1l>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
fldt   0x10(%rbp)
fstpt  -0x10(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1050 <cosl@plt>
fstpt  -0x1c(%rbp)
fldt   -0x10(%rbp)
fchs
mov    %rsp,%rax
fstpt  (%rax)
call   1050 <cosl@plt>
fldt   -0x1c(%rbp)
fucomip %st(1),%st
fstp   %st(0)
jne    1188 <test1l+0x48>
jp     1188 <test1l+0x48>
jmp    118f <test1l+0x4f>
mov    $0x0,%al
call   1060 <link_error@plt>
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <sinl@plt>
fstpt  -0x34(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1050 <cosl@plt>
fldt   -0x34(%rbp)
fdivp  %st,%st(1)
fstpt  -0x28(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <tanl@plt>
fldt   -0x28(%rbp)
fucomip %st(1),%st
fstp   %st(0)
jne    11d9 <test1l+0x99>
jp     11d9 <test1l+0x99>
jmp    11e0 <test1l+0xa0>
mov    $0x0,%al
call   1060 <link_error@plt>
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1050 <cosl@plt>
fstpt  -0x4c(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <sinl@plt>
fldt   -0x4c(%rbp)
fdivp  %st,%st(1)
fstpt  -0x40(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <tanl@plt>
fldt   -0x40(%rbp)
fld1
fdivp  %st,%st(2)
fucomip %st(1),%st
fstp   %st(0)
jne    122e <test1l+0xee>
jp     122e <test1l+0xee>
jmp    1235 <test1l+0xf5>
mov    $0x0,%al
call   1060 <link_error@plt>
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <tanl@plt>
fstpt  -0x64(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1050 <cosl@plt>
fldt   -0x64(%rbp)
fmulp  %st,%st(1)
fstpt  -0x58(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <sinl@plt>
fldt   -0x58(%rbp)
fucomip %st(1),%st
fstp   %st(0)
jne    127f <test1l+0x13f>
jp     127f <test1l+0x13f>
jmp    1286 <test1l+0x146>
mov    $0x0,%al
call   1060 <link_error@plt>
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1050 <cosl@plt>
fstpt  -0x7c(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <tanl@plt>
fldt   -0x7c(%rbp)
fmulp  %st,%st(1)
fstpt  -0x70(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <sinl@plt>
fldt   -0x70(%rbp)
fucomip %st(1),%st
fstp   %st(0)
jne    12d0 <test1l+0x190>
jp     12d0 <test1l+0x190>
jmp    12d7 <test1l+0x197>
mov    $0x0,%al
call   1060 <link_error@plt>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test1l>:
sub    $0x28,%rsp
fldt   0x30(%rsp)
fld    %st(0)
fstpt  0x1c(%rsp)
fstpt  (%rsp)
call   1050 <cosl@plt>
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1050 <cosl@plt>
fldt   0x10(%rsp)
fucomip %st(1),%st
fstp   %st(0)
jne    1172 <test1l+0x32>
jnp    1179 <test1l+0x39>
xor    %eax,%eax
call   1060 <link_error@plt>
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1030 <sinl@plt>
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1050 <cosl@plt>
fldt   0x10(%rsp)
fdivp  %st,%st(1)
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1040 <tanl@plt>
fldt   0x10(%rsp)
fucomip %st(1),%st
fstp   %st(0)
jne    11b7 <test1l+0x77>
jnp    11be <test1l+0x7e>
xor    %eax,%eax
call   1060 <link_error@plt>
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1050 <cosl@plt>
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1030 <sinl@plt>
fldt   0x10(%rsp)
fdivp  %st,%st(1)
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1040 <tanl@plt>
fld1
fdivp  %st,%st(1)
fldt   0x10(%rsp)
fucomip %st(1),%st
fstp   %st(0)
jne    1200 <test1l+0xc0>
jnp    1207 <test1l+0xc7>
xor    %eax,%eax
call   1060 <link_error@plt>
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1040 <tanl@plt>
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1050 <cosl@plt>
fldt   0x10(%rsp)
fmulp  %st,%st(1)
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1030 <sinl@plt>
fldt   0x10(%rsp)
fucomip %st(1),%st
fstp   %st(0)
jne    1245 <test1l+0x105>
jnp    124c <test1l+0x10c>
xor    %eax,%eax
call   1060 <link_error@plt>
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1050 <cosl@plt>
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1040 <tanl@plt>
fldt   0x10(%rsp)
fmulp  %st,%st(1)
fstpt  0x10(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1030 <sinl@plt>
fldt   0x10(%rsp)
fucomip %st(1),%st
fstp   %st(0)
jne    128a <test1l+0x14a>
jnp    1295 <test1l+0x155>
xor    %eax,%eax
add    $0x28,%rsp
jmp    1060 <link_error@plt>
add    $0x28,%rsp
ret

LLVM IR (-O0):
define void @test1l(x86_fp80 %0) {
%2 = alloca x86_fp80
store x86_fp80 %0, x86_fp80* %2
%3 = load x86_fp80, x86_fp80* %2
%4 = call x86_fp80 @cosl(x86_fp80 %3)
%5 = load x86_fp80, x86_fp80* %2
%6 = fneg x86_fp80 %5
%7 = call x86_fp80 @cosl(x86_fp80 %6)
%8 = fcmp une x86_fp80 %4, %7
br i1 %8, label %9, label %11
9: ; preds = %1
%10 = call i32 (...) @link_error()
br label %11
11: ; preds = %9, %1
%12 = load x86_fp80, x86_fp80* %2
%13 = call x86_fp80 @sinl(x86_fp80 %12)
%14 = load x86_fp80, x86_fp80* %2
%15 = call x86_fp80 @cosl(x86_fp80 %14)
%16 = fdiv x86_fp80 %13, %15
%17 = load x86_fp80, x86_fp80* %2
%18 = call x86_fp80 @tanl(x86_fp80 %17)
%19 = fcmp une x86_fp80 %16, %18
br i1 %19, label %20, label %22
20: ; preds = %11
%21 = call i32 (...) @link_error()
br label %22
22: ; preds = %20, %11
%23 = load x86_fp80, x86_fp80* %2
%24 = call x86_fp80 @cosl(x86_fp80 %23)
%25 = load x86_fp80, x86_fp80* %2
%26 = call x86_fp80 @sinl(x86_fp80 %25)
%27 = fdiv x86_fp80 %24, %26
%28 = load x86_fp80, x86_fp80* %2
%29 = call x86_fp80 @tanl(x86_fp80 %28)
%30 = fdiv x86_fp80 0xK3FFF8000000000000000, %29
%31 = fcmp une x86_fp80 %27, %30
br i1 %31, label %32, label %34
32: ; preds = %22
%33 = call i32 (...) @link_error()
br label %34
34: ; preds = %32, %22
%35 = load x86_fp80, x86_fp80* %2
%36 = call x86_fp80 @tanl(x86_fp80 %35)
%37 = load x86_fp80, x86_fp80* %2
%38 = call x86_fp80 @cosl(x86_fp80 %37)
%39 = fmul x86_fp80 %36, %38
%40 = load x86_fp80, x86_fp80* %2
%41 = call x86_fp80 @sinl(x86_fp80 %40)
%42 = fcmp une x86_fp80 %39, %41
br i1 %42, label %43, label %45
43: ; preds = %34
%44 = call i32 (...) @link_error()
br label %45
45: ; preds = %43, %34
%46 = load x86_fp80, x86_fp80* %2
%47 = call x86_fp80 @cosl(x86_fp80 %46)
%48 = load x86_fp80, x86_fp80* %2
%49 = call x86_fp80 @tanl(x86_fp80 %48)
%50 = fmul x86_fp80 %47, %49
%51 = load x86_fp80, x86_fp80* %2
%52 = call x86_fp80 @sinl(x86_fp80 %51)
%53 = fcmp une x86_fp80 %50, %52
br i1 %53, label %54, label %56
54: ; preds = %45
%55 = call i32 (...) @link_error()
br label %56
56: ; preds = %54, %45
ret void
}

LLVM IR (-O2):
define void @test1l(x86_fp80 %0) {
%2 = tail call x86_fp80 @cosl(x86_fp80 %0)
%3 = tail call x86_fp80 @cosl(x86_fp80 %0)
%4 = fcmp une x86_fp80 %2, %3
br i1 %4, label %5, label %7
5: ; preds = %1
%6 = tail call i32 (...) @link_error()
br label %7
7: ; preds = %5, %1
%8 = tail call x86_fp80 @sinl(x86_fp80 %0)
%9 = tail call x86_fp80 @cosl(x86_fp80 %0)
%10 = fdiv x86_fp80 %8, %9
%11 = tail call x86_fp80 @tanl(x86_fp80 %0)
%12 = fcmp une x86_fp80 %10, %11
br i1 %12, label %13, label %15
13: ; preds = %7
%14 = tail call i32 (...) @link_error()
br label %15
15: ; preds = %13, %7
%16 = tail call x86_fp80 @cosl(x86_fp80 %0)
%17 = tail call x86_fp80 @sinl(x86_fp80 %0)
%18 = fdiv x86_fp80 %16, %17
%19 = tail call x86_fp80 @tanl(x86_fp80 %0)
%20 = fdiv x86_fp80 0xK3FFF8000000000000000, %19
%21 = fcmp une x86_fp80 %18, %20
br i1 %21, label %22, label %24
22: ; preds = %15
%23 = tail call i32 (...) @link_error()
br label %24
24: ; preds = %22, %15
%25 = tail call x86_fp80 @tanl(x86_fp80 %0)
%26 = tail call x86_fp80 @cosl(x86_fp80 %0)
%27 = fmul x86_fp80 %25, %26
%28 = tail call x86_fp80 @sinl(x86_fp80 %0)
%29 = fcmp une x86_fp80 %27, %28
br i1 %29, label %30, label %32
30: ; preds = %24
%31 = tail call i32 (...) @link_error()
br label %32
32: ; preds = %30, %24
%33 = tail call x86_fp80 @cosl(x86_fp80 %0)
%34 = tail call x86_fp80 @tanl(x86_fp80 %0)
%35 = fmul x86_fp80 %33, %34
%36 = tail call x86_fp80 @sinl(x86_fp80 %0)
%37 = fcmp une x86_fp80 %35, %36
br i1 %37, label %38, label %40
38: ; preds = %32
%39 = tail call i32 (...) @link_error()
br label %40
40: ; preds = %38, %32
ret void
}