void foo(double *d, float f, float *fp, long double *l, int *i, const char *c) {
  f = __builtin_fmod(f, f);
  f = __builtin_fmodf(f, f);
  f = __builtin_fmodl(f, f);
  __builtin_pow(f, f);
  __builtin_powf(f, f);
  __builtin_powl(f, f);
  __builtin_powi(f, f);
  __builtin_powif(f, f);
  __builtin_powil(f, f);
  __builtin_ceil(f);
  __builtin_ceilf(f);
  __builtin_ceill(f);
  __builtin_cos(f);
  __builtin_cosf(f);
  __builtin_cosl(f);
  __builtin_exp(f);
  __builtin_expf(f);
  __builtin_expl(f);
  __builtin_exp2(f);
  __builtin_exp2f(f);
  __builtin_exp2l(f);
  __builtin_floor(f);
  __builtin_floorf(f);
  __builtin_floorl(f);
  __builtin_fma(f, f, f);
  __builtin_fmaf(f, f, f);
  __builtin_fmal(f, f, f);
  __builtin_fmax(f, f);
  __builtin_fmaxf(f, f);
  __builtin_fmaxl(f, f);
  __builtin_fmin(f, f);
  __builtin_fminf(f, f);
  __builtin_fminl(f, f);
  __builtin_llrint(f);
  __builtin_llrintf(f);
  __builtin_llrintl(f);
  __builtin_llround(f);
  __builtin_llroundf(f);
  __builtin_llroundl(f);
  __builtin_log(f);
  __builtin_logf(f);
  __builtin_logl(f);
  __builtin_log10(f);
  __builtin_log10f(f);
  __builtin_log10l(f);
  __builtin_log2(f);
  __builtin_log2f(f);
  __builtin_log2l(f);
  __builtin_lrint(f);
  __builtin_lrintf(f);
  __builtin_lrintl(f);
  __builtin_lround(f);
  __builtin_lroundf(f);
  __builtin_lroundl(f);
  __builtin_nearbyint(f);
  __builtin_nearbyintf(f);
  __builtin_nearbyintl(f);
  __builtin_rint(f);
  __builtin_rintf(f);
  __builtin_rintl(f);
  __builtin_round(f);
  __builtin_roundf(f);
  __builtin_roundl(f);
  __builtin_sin(f);
  __builtin_sinf(f);
  __builtin_sinl(f);
  __builtin_sqrt(f);
  __builtin_sqrtf(f);
  __builtin_sqrtl(f);
  __builtin_trunc(f);
  __builtin_truncf(f);
  __builtin_truncl(f);
}


x86 assembly (clang, -O0):
<foo>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movaps %xmm1,%xmm0
call   1110 <fmod@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm1
movaps %xmm1,%xmm0
call   1130 <fmodf@plt>
movss  %xmm0,-0xc(%rbp)
flds   -0xc(%rbp)
mov    %rsp,%rax
fld    %st(0)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1100 <fmodl@plt>
fstps  -0xc(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movaps %xmm1,%xmm0
call   1280 <pow@plt>
movss  -0xc(%rbp),%xmm1
movaps %xmm1,%xmm0
call   10c0 <powf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fld    %st(0)
fstpt  0x10(%rax)
fstpt  (%rax)
call   10b0 <powl@plt>
fstp   %st(0)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1260 <cos@plt>
movss  -0xc(%rbp),%xmm0
call   10e0 <cosf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   10f0 <cosl@plt>
fstp   %st(0)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1230 <exp@plt>
movss  -0xc(%rbp),%xmm0
call   1140 <expf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1190 <expl@plt>
fstp   %st(0)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1120 <exp2@plt>
movss  -0xc(%rbp),%xmm0
call   1160 <exp2f@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1170 <exp2l@plt>
fstp   %st(0)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1040 <llrint@plt>
movss  -0xc(%rbp),%xmm0
call   1150 <llrintf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1250 <llrintl@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1180 <llround@plt>
movss  -0xc(%rbp),%xmm0
call   11d0 <llroundf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   11c0 <llroundl@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1270 <log@plt>
movss  -0xc(%rbp),%xmm0
call   10a0 <logf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   10d0 <logl@plt>
fstp   %st(0)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   12a0 <log10@plt>
movss  -0xc(%rbp),%xmm0
call   1290 <log10f@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   12c0 <log10l@plt>
fstp   %st(0)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1080 <log2@plt>
movss  -0xc(%rbp),%xmm0
call   1200 <log2f@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   11e0 <log2l@plt>
fstp   %st(0)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   11b0 <lrint@plt>
movss  -0xc(%rbp),%xmm0
call   1070 <lrintf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1050 <lrintl@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1090 <lround@plt>
movss  -0xc(%rbp),%xmm0
call   1220 <lroundf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   11f0 <lroundl@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   11a0 <sin@plt>
movss  -0xc(%rbp),%xmm0
call   1060 <sinf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <sinl@plt>
fstp   %st(0)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   12b0 <sqrt@plt>
movss  -0xc(%rbp),%xmm0
call   1240 <sqrtf@plt>
flds   -0xc(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1210 <sqrtl@plt>
fstp   %st(0)
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<foo>:
push   %rbx
sub    $0x50,%rsp
cvtss2sd %xmm0,%xmm0
movaps %xmm0,%xmm1
call   1110 <fmod@plt>
cvtsd2ss %xmm0,%xmm0
movaps %xmm0,%xmm1
call   1130 <fmodf@plt>
movss  %xmm0,0x4c(%rsp)
flds   0x4c(%rsp)
fld    %st(0)
fstpt  0x10(%rsp)
fstpt  (%rsp)
call   1100 <fmodl@plt>
fstps  0x48(%rsp)
movss  0x48(%rsp),%xmm0
movss  %xmm0,0x2c(%rsp)
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x30(%rsp)
movaps %xmm0,%xmm1
call   1280 <pow@plt>
movss  0x2c(%rsp),%xmm0
movaps %xmm0,%xmm1
call   10c0 <powf@plt>
movss  0x2c(%rsp),%xmm0
movss  %xmm0,0x44(%rsp)
flds   0x44(%rsp)
fld    %st(0)
fstpt  0x10(%rsp)
fld    %st(0)
fstpt  0x38(%rsp)
fstpt  (%rsp)
call   10b0 <powl@plt>
fstp   %st(0)
movss  0x2c(%rsp),%xmm1
movss  0xbd7(%rip),%xmm0
ucomiss %xmm1,%xmm0
setae  %al
ucomiss 0xbce(%rip),%xmm1
setae  %bl
or     %al,%bl
cmp    $0x1,%bl
je     15ae <foo+0x21e>
ucomiss 0xbbd(%rip),%xmm1
ja     15e5 <foo+0x255>
movss  0xbb3(%rip),%xmm0
ucomiss %xmm1,%xmm0
ja     15e5 <foo+0x255>
ucomiss 0xba7(%rip),%xmm1
movsd  0x30(%rsp),%xmm0
ja     16c5 <foo+0x335>
movss  0xb97(%rip),%xmm2
ucomiss %xmm1,%xmm2
ja     16c5 <foo+0x335>
ucomiss 0xb8b(%rip),%xmm1
ja     16e6 <foo+0x356>
movss  0xb81(%rip),%xmm2
ucomiss %xmm1,%xmm2
ja     16e6 <foo+0x356>
ucomiss 0xb75(%rip),%xmm1
ja     170d <foo+0x37d>
movss  0xb6b(%rip),%xmm2
ucomiss %xmm1,%xmm2
ja     170d <foo+0x37d>
ucomiss 0xb5f(%rip),%xmm1
ja     172b <foo+0x39b>
movss  0xb55(%rip),%xmm2
ucomiss %xmm1,%xmm2
ja     172b <foo+0x39b>
ucomiss 0xb49(%rip),%xmm1
ja     174c <foo+0x3bc>
movss  0xb3f(%rip),%xmm2
ucomiss %xmm1,%xmm2
ja     174c <foo+0x3bc>
call   1040 <llrint@plt>
movss  0x2c(%rsp),%xmm0
call   1150 <llrintf@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   1250 <llrintl@plt>
movsd  0x30(%rsp),%xmm0
call   1180 <llround@plt>
movss  0x2c(%rsp),%xmm0
call   11d0 <llroundf@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   11c0 <llroundl@plt>
xorps  %xmm0,%xmm0
ucomiss 0x2c(%rsp),%xmm0
jae    15fb <foo+0x26b>
movsd  0x30(%rsp),%xmm0
call   11b0 <lrint@plt>
movss  0x2c(%rsp),%xmm0
call   1070 <lrintf@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   1050 <lrintl@plt>
movsd  0x30(%rsp),%xmm0
call   1090 <lround@plt>
movss  0x2c(%rsp),%xmm0
call   1220 <lroundf@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   11f0 <lroundl@plt>
test   %bl,%bl
jne    166c <foo+0x2dc>
xorps  %xmm1,%xmm1
movss  0x2c(%rsp),%xmm0
ucomiss %xmm0,%xmm1
ja     1695 <foo+0x305>
add    $0x50,%rsp
pop    %rbx
ret
movsd  0x30(%rsp),%xmm0
call   1260 <cos@plt>
movss  0x2c(%rsp),%xmm0
call   10e0 <cosf@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   10f0 <cosl@plt>
fstp   %st(0)
movss  0x2c(%rsp),%xmm1
ucomiss 0xa29(%rip),%xmm1
jbe    1451 <foo+0xc1>
movsd  0x30(%rsp),%xmm0
call   1230 <exp@plt>
movss  0x2c(%rsp),%xmm1
jmp    1462 <foo+0xd2>
movsd  0x30(%rsp),%xmm0
call   1270 <log@plt>
movss  0x2c(%rsp),%xmm0
call   10a0 <logf@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   10d0 <logl@plt>
fstp   %st(0)
movsd  0x30(%rsp),%xmm0
call   12a0 <log10@plt>
movss  0x2c(%rsp),%xmm0
call   1290 <log10f@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   12b0 <log10l@plt>
fstp   %st(0)
movsd  0x30(%rsp),%xmm0
call   1080 <log2@plt>
movss  0x2c(%rsp),%xmm0
call   1200 <log2f@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   11e0 <log2l@plt>
fstp   %st(0)
jmp    154a <foo+0x1ba>
movsd  0x30(%rsp),%xmm0
call   11a0 <sin@plt>
movss  0x2c(%rsp),%xmm0
call   1060 <sinf@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   1030 <sinl@plt>
fstp   %st(0)
jmp    1596 <foo+0x206>
ucomiss %xmm1,%xmm0
jae    16a5 <foo+0x315>
call   1240 <sqrtf@plt>
movss  0x2c(%rsp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jae    16b2 <foo+0x322>
call   1240 <sqrtf@plt>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   1210 <sqrtl@plt>
fstp   %st(0)
jmp    15a8 <foo+0x218>
movaps %xmm1,%xmm0
call   1140 <expf@plt>
movsd  0x30(%rsp),%xmm0
movss  0x2c(%rsp),%xmm1
ucomiss 0x938(%rip),%xmm1
jbe    1493 <foo+0x103>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   1190 <expl@plt>
fstp   %st(0)
movsd  0x30(%rsp),%xmm0
movss  0x2c(%rsp),%xmm1
ucomiss 0x919(%rip),%xmm1
jbe    14b1 <foo+0x121>
call   1120 <exp2@plt>
movsd  0x30(%rsp),%xmm0
movss  0x2c(%rsp),%xmm1
ucomiss 0x903(%rip),%xmm1
jbe    14cf <foo+0x13f>
movaps %xmm1,%xmm0
call   1160 <exp2f@plt>
movsd  0x30(%rsp),%xmm0
movss  0x2c(%rsp),%xmm1
ucomiss 0x8ea(%rip),%xmm1
jbe    14ed <foo+0x15d>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   1170 <exp2l@plt>
fstp   %st(0)
movsd  0x30(%rsp),%xmm0
jmp    14fe <foo+0x16e>

LLVM IR (-O0):
define void @foo(double* %0, float %1, float* %2, x86_fp80* %3, i32* %4, i8* %5) {
%7 = alloca double*
%8 = alloca float
%9 = alloca float*
%10 = alloca x86_fp80*
%11 = alloca i32*
%12 = alloca i8*
store double* %0, double** %7
store float %1, float* %8
store float* %2, float** %9
store x86_fp80* %3, x86_fp80** %10
store i32* %4, i32** %11
store i8* %5, i8** %12
%13 = load float, float* %8
%14 = fpext float %13 to double
%15 = load float, float* %8
%16 = fpext float %15 to double
%17 = call double @fmod(double %14, double %16)
%18 = fptrunc double %17 to float
store float %18, float* %8
%19 = load float, float* %8
%20 = load float, float* %8
%21 = call float @fmodf(float %19, float %20)
store float %21, float* %8
%22 = load float, float* %8
%23 = fpext float %22 to x86_fp80
%24 = load float, float* %8
%25 = fpext float %24 to x86_fp80
%26 = call x86_fp80 @fmodl(x86_fp80 %23, x86_fp80 %25)
%27 = fptrunc x86_fp80 %26 to float
store float %27, float* %8
%28 = load float, float* %8
%29 = fpext float %28 to double
%30 = load float, float* %8
%31 = fpext float %30 to double
%32 = call double @pow(double %29, double %31)
%33 = load float, float* %8
%34 = load float, float* %8
%35 = call float @powf(float %33, float %34)
%36 = load float, float* %8
%37 = fpext float %36 to x86_fp80
%38 = load float, float* %8
%39 = fpext float %38 to x86_fp80
%40 = call x86_fp80 @powl(x86_fp80 %37, x86_fp80 %39)
%41 = load float, float* %8
%42 = fpext float %41 to double
%43 = load float, float* %8
%44 = fptosi float %43 to i32
%45 = call double @llvm.powi.f64.i32(double %42, i32 %44)
%46 = load float, float* %8
%47 = load float, float* %8
%48 = fptosi float %47 to i32
%49 = call float @llvm.powi.f32.i32(float %46, i32 %48)
%50 = load float, float* %8
%51 = fpext float %50 to x86_fp80
%52 = load float, float* %8
%53 = fptosi float %52 to i32
%54 = call x86_fp80 @llvm.powi.f80.i32(x86_fp80 %51, i32 %53)
%55 = load float, float* %8
%56 = fpext float %55 to double
%57 = call double @llvm.ceil.f64(double %56)
%58 = load float, float* %8
%59 = call float @llvm.ceil.f32(float %58)
%60 = load float, float* %8
%61 = fpext float %60 to x86_fp80
%62 = call x86_fp80 @llvm.ceil.f80(x86_fp80 %61)
%63 = load float, float* %8
%64 = fpext float %63 to double
%65 = call double @cos(double %64)
%66 = load float, float* %8
%67 = call float @cosf(float %66)
%68 = load float, float* %8
%69 = fpext float %68 to x86_fp80
%70 = call x86_fp80 @cosl(x86_fp80 %69)
%71 = load float, float* %8
%72 = fpext float %71 to double
%73 = call double @exp(double %72)
%74 = load float, float* %8
%75 = call float @expf(float %74)
%76 = load float, float* %8
%77 = fpext float %76 to x86_fp80
%78 = call x86_fp80 @expl(x86_fp80 %77)
%79 = load float, float* %8
%80 = fpext float %79 to double
%81 = call double @exp2(double %80)
%82 = load float, float* %8
%83 = call float @exp2f(float %82)
%84 = load float, float* %8
%85 = fpext float %84 to x86_fp80
%86 = call x86_fp80 @exp2l(x86_fp80 %85)
%87 = load float, float* %8
%88 = fpext float %87 to double
%89 = call double @llvm.floor.f64(double %88)
%90 = load float, float* %8
%91 = call float @llvm.floor.f32(float %90)
%92 = load float, float* %8
%93 = fpext float %92 to x86_fp80
%94 = call x86_fp80 @llvm.floor.f80(x86_fp80 %93)
%95 = load float, float* %8
%96 = fpext float %95 to double
%97 = load float, float* %8
%98 = fpext float %97 to double
%99 = load float, float* %8
%100 = fpext float %99 to double
%101 = call double @llvm.fma.f64(double %96, double %98, double %100)
%102 = load float, float* %8
%103 = load float, float* %8
%104 = load float, float* %8
%105 = call float @llvm.fma.f32(float %102, float %103, float %104)
%106 = load float, float* %8
%107 = fpext float %106 to x86_fp80
%108 = load float, float* %8
%109 = fpext float %108 to x86_fp80
%110 = load float, float* %8
%111 = fpext float %110 to x86_fp80
%112 = call x86_fp80 @llvm.fma.f80(x86_fp80 %107, x86_fp80 %109, x86_fp80 %111)
%113 = load float, float* %8
%114 = fpext float %113 to double
%115 = load float, float* %8
%116 = fpext float %115 to double
%117 = call double @llvm.maxnum.f64(double %114, double %116)
%118 = load float, float* %8
%119 = load float, float* %8
%120 = call float @llvm.maxnum.f32(float %118, float %119)
%121 = load float, float* %8
%122 = fpext float %121 to x86_fp80
%123 = load float, float* %8
%124 = fpext float %123 to x86_fp80
%125 = call x86_fp80 @llvm.maxnum.f80(x86_fp80 %122, x86_fp80 %124)
%126 = load float, float* %8
%127 = fpext float %126 to double
%128 = load float, float* %8
%129 = fpext float %128 to double
%130 = call double @llvm.minnum.f64(double %127, double %129)
%131 = load float, float* %8
%132 = load float, float* %8
%133 = call float @llvm.minnum.f32(float %131, float %132)
%134 = load float, float* %8
%135 = fpext float %134 to x86_fp80
%136 = load float, float* %8
%137 = fpext float %136 to x86_fp80
%138 = call x86_fp80 @llvm.minnum.f80(x86_fp80 %135, x86_fp80 %137)
%139 = load float, float* %8
%140 = fpext float %139 to double
%141 = call i64 @llrint(double %140)
%142 = load float, float* %8
%143 = call i64 @llrintf(float %142)
%144 = load float, float* %8
%145 = fpext float %144 to x86_fp80
%146 = call i64 @llrintl(x86_fp80 %145)
%147 = load float, float* %8
%148 = fpext float %147 to double
%149 = call i64 @llround(double %148)
%150 = load float, float* %8
%151 = call i64 @llroundf(float %150)
%152 = load float, float* %8
%153 = fpext float %152 to x86_fp80
%154 = call i64 @llroundl(x86_fp80 %153)
%155 = load float, float* %8
%156 = fpext float %155 to double
%157 = call double @log(double %156)
%158 = load float, float* %8
%159 = call float @logf(float %158)
%160 = load float, float* %8
%161 = fpext float %160 to x86_fp80
%162 = call x86_fp80 @logl(x86_fp80 %161)
%163 = load float, float* %8
%164 = fpext float %163 to double
%165 = call double @log10(double %164)
%166 = load float, float* %8
%167 = call float @log10f(float %166)
%168 = load float, float* %8
%169 = fpext float %168 to x86_fp80
%170 = call x86_fp80 @log10l(x86_fp80 %169)
%171 = load float, float* %8
%172 = fpext float %171 to double
%173 = call double @log2(double %172)
%174 = load float, float* %8
%175 = call float @log2f(float %174)
%176 = load float, float* %8
%177 = fpext float %176 to x86_fp80
%178 = call x86_fp80 @log2l(x86_fp80 %177)
%179 = load float, float* %8
%180 = fpext float %179 to double
%181 = call i64 @lrint(double %180)
%182 = load float, float* %8
%183 = call i64 @lrintf(float %182)
%184 = load float, float* %8
%185 = fpext float %184 to x86_fp80
%186 = call i64 @lrintl(x86_fp80 %185)
%187 = load float, float* %8
%188 = fpext float %187 to double
%189 = call i64 @lround(double %188)
%190 = load float, float* %8
%191 = call i64 @lroundf(float %190)
%192 = load float, float* %8
%193 = fpext float %192 to x86_fp80
%194 = call i64 @lroundl(x86_fp80 %193)
%195 = load float, float* %8
%196 = fpext float %195 to double
%197 = call double @llvm.nearbyint.f64(double %196)
%198 = load float, float* %8
%199 = call float @llvm.nearbyint.f32(float %198)
%200 = load float, float* %8
%201 = fpext float %200 to x86_fp80
%202 = call x86_fp80 @llvm.nearbyint.f80(x86_fp80 %201)
%203 = load float, float* %8
%204 = fpext float %203 to double
%205 = call double @llvm.rint.f64(double %204)
%206 = load float, float* %8
%207 = call float @llvm.rint.f32(float %206)
%208 = load float, float* %8
%209 = fpext float %208 to x86_fp80
%210 = call x86_fp80 @llvm.rint.f80(x86_fp80 %209)
%211 = load float, float* %8
%212 = fpext float %211 to double
%213 = call double @llvm.round.f64(double %212)
%214 = load float, float* %8
%215 = call float @llvm.round.f32(float %214)
%216 = load float, float* %8
%217 = fpext float %216 to x86_fp80
%218 = call x86_fp80 @llvm.round.f80(x86_fp80 %217)
%219 = load float, float* %8
%220 = fpext float %219 to double
%221 = call double @sin(double %220)
%222 = load float, float* %8
%223 = call float @sinf(float %222)
%224 = load float, float* %8
%225 = fpext float %224 to x86_fp80
%226 = call x86_fp80 @sinl(x86_fp80 %225)
%227 = load float, float* %8
%228 = fpext float %227 to double
%229 = call double @sqrt(double %228)
%230 = load float, float* %8
%231 = call float @sqrtf(float %230)
%232 = load float, float* %8
%233 = fpext float %232 to x86_fp80
%234 = call x86_fp80 @sqrtl(x86_fp80 %233)
%235 = load float, float* %8
%236 = fpext float %235 to double
%237 = call double @llvm.trunc.f64(double %236)
%238 = load float, float* %8
%239 = call float @llvm.trunc.f32(float %238)
%240 = load float, float* %8
%241 = fpext float %240 to x86_fp80
%242 = call x86_fp80 @llvm.trunc.f80(x86_fp80 %241)
ret void
}

LLVM IR (-O2):
define void @foo(double* nocapture readnone %0, float %1, float* nocapture readnone %2, x86_fp80* nocapture readnone %3, i32* nocapture readnone %4, i8* nocapture readnone %5) {
%7 = fpext float %1 to double
%8 = tail call double @fmod(double %7, double %7)
%9 = fptrunc double %8 to float
%10 = tail call float @fmodf(float %9, float %9)
%11 = fpext float %10 to x86_fp80
%12 = tail call x86_fp80 @fmodl(x86_fp80 %11, x86_fp80 %11)
%13 = fptrunc x86_fp80 %12 to float
%14 = fpext float %13 to double
%15 = tail call double @pow(double %14, double %14)
%16 = tail call float @powf(float %13, float %13)
%17 = fpext float %13 to x86_fp80
%18 = tail call x86_fp80 @powl(x86_fp80 %17, x86_fp80 %17)
%19 = fcmp oeq float %13, 0xFFF0000000000000
%20 = fcmp oeq float %13, 0x7FF0000000000000
%21 = or i1 %20, %19
br i1 %21, label %22, label %26
22: ; preds = %6
%23 = tail call double @cos(double %14)
%24 = tail call float @cosf(float %13)
%25 = tail call x86_fp80 @cosl(x86_fp80 %17)
br label %26
26: ; preds = %6, %22
%27 = fcmp olt float %13, -7.450000e+02
%28 = fcmp ogt float %13, 7.090000e+02
%29 = or i1 %28, %27
br i1 %29, label %30, label %32
30: ; preds = %26
%31 = tail call double @exp(double %14)
br label %32
32: ; preds = %26, %30
%33 = fcmp olt float %13, -1.030000e+02
%34 = fcmp ogt float %13, 8.800000e+01
%35 = or i1 %34, %33
br i1 %35, label %36, label %38
36: ; preds = %32
%37 = tail call float @expf(float %13)
br label %38
38: ; preds = %32, %36
%39 = fcmp olt float %13, -1.139900e+04
%40 = fcmp ogt float %13, 1.135600e+04
%41 = or i1 %40, %39
br i1 %41, label %42, label %44
42: ; preds = %38
%43 = tail call x86_fp80 @expl(x86_fp80 %17)
br label %44
44: ; preds = %38, %42
%45 = fcmp olt float %13, -1.074000e+03
%46 = fcmp ogt float %13, 1.023000e+03
%47 = or i1 %46, %45
br i1 %47, label %48, label %50
48: ; preds = %44
%49 = tail call double @exp2(double %14)
br label %50
50: ; preds = %44, %48
%51 = fcmp olt float %13, -1.490000e+02
%52 = fcmp ogt float %13, 1.270000e+02
%53 = or i1 %52, %51
br i1 %53, label %54, label %56
54: ; preds = %50
%55 = tail call float @exp2f(float %13)
br label %56
56: ; preds = %50, %54
%57 = fcmp olt float %13, -1.644500e+04
%58 = fcmp ogt float %13, 1.138300e+04
%59 = or i1 %58, %57
br i1 %59, label %60, label %62
60: ; preds = %56
%61 = tail call x86_fp80 @exp2l(x86_fp80 %17)
br label %62
62: ; preds = %56, %60
%63 = tail call i64 @llrint(double %14)
%64 = tail call i64 @llrintf(float %13)
%65 = tail call i64 @llrintl(x86_fp80 %17)
%66 = tail call i64 @llround(double %14)
%67 = tail call i64 @llroundf(float %13)
%68 = tail call i64 @llroundl(x86_fp80 %17)
%69 = fcmp ugt float %13, 0.000000e+00
br i1 %69, label %80, label %70
70: ; preds = %62
%71 = tail call double @log(double %14)
%72 = tail call float @logf(float %13)
%73 = tail call x86_fp80 @logl(x86_fp80 %17)
%74 = tail call double @log10(double %14)
%75 = tail call float @log10f(float %13)
%76 = tail call x86_fp80 @log10l(x86_fp80 %17)
%77 = tail call double @log2(double %14)
%78 = tail call float @log2f(float %13)
%79 = tail call x86_fp80 @log2l(x86_fp80 %17)
br label %80
80: ; preds = %62, %70
%81 = tail call i64 @lrint(double %14)
%82 = tail call i64 @lrintf(float %13)
%83 = tail call i64 @lrintl(x86_fp80 %17)
%84 = tail call i64 @lround(double %14)
%85 = tail call i64 @lroundf(float %13)
%86 = tail call i64 @lroundl(x86_fp80 %17)
br i1 %21, label %87, label %91
87: ; preds = %80
%88 = tail call double @sin(double %14)
%89 = tail call float @sinf(float %13)
%90 = tail call x86_fp80 @sinl(x86_fp80 %17)
br label %91
91: ; preds = %80, %87
%92 = fcmp olt float %13, 0.000000e+00
br i1 %92, label %93, label %97
93: ; preds = %91
%94 = tail call float @sqrtf(float %13)
%95 = tail call float @sqrtf(float %13)
%96 = tail call x86_fp80 @sqrtl(x86_fp80 %17)
br label %97
97: ; preds = %91, %93
ret void
}