#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 __ieee754_fmodf(double, double);
void benchmark(void) {
  volatile float result = 0;
  result = __ieee754_fmodf(2.2353, 1234.5);
  result = __ieee754_fmodf(3.2515, 2345.6);
  result = __ieee754_fmodf(4.9346, 3456.7);
  result = __ieee754_fmodf(5.2342, 4567.8);
  result = __ieee754_fmodf(6.2352, 5678.9);
}


x86 assembly (clang, -O0):
<benchmark>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
movsd  0xf18(%rip),%xmm0
movsd  0xf18(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,-0x4(%rbp)
movsd  0xeee(%rip),%xmm0
movsd  0xeee(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,-0x4(%rbp)
movsd  0xec4(%rip),%xmm0
movsd  0xec4(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,-0x4(%rbp)
movsd  0xe9a(%rip),%xmm0
movsd  0xe9a(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,-0x4(%rbp)
movsd  0xe70(%rip),%xmm0
movsd  0xe70(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,-0x4(%rbp)
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<benchmark>:
push   %rax
movl   $0x0,0x4(%rsp)
movsd  0xedf(%rip),%xmm0
movsd  0xedf(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,0x4(%rsp)
movsd  0xed4(%rip),%xmm0
movsd  0xed4(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,0x4(%rsp)
movsd  0xec9(%rip),%xmm0
movsd  0xec9(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,0x4(%rsp)
movsd  0xebe(%rip),%xmm0
movsd  0xebe(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,0x4(%rsp)
movsd  0xeb3(%rip),%xmm0
movsd  0xeb3(%rip),%xmm1
call   1030 <__ieee754_fmodf@plt>
movss  %xmm0,0x4(%rsp)
pop    %rax
ret

LLVM IR (-O0):
define void @benchmark() {
%1 = alloca float
store volatile float 0.000000e+00, float* %1
%2 = call float @__ieee754_fmodf(double 2.235300e+00, double 1.234500e+03)
store volatile float %2, float* %1
%3 = call float @__ieee754_fmodf(double 3.251500e+00, double 2.345600e+03)
store volatile float %3, float* %1
%4 = call float @__ieee754_fmodf(double 4.934600e+00, double 3.456700e+03)
store volatile float %4, float* %1
%5 = call float @__ieee754_fmodf(double 5.234200e+00, double 4.567800e+03)
store volatile float %5, float* %1
%6 = call float @__ieee754_fmodf(double 6.235200e+00, double 0x40B62EE666666666)
store volatile float %6, float* %1
ret void
}

LLVM IR (-O2):
define void @benchmark() {
%1 = alloca float
%2 = bitcast float* %1 to i8*
store volatile float 0.000000e+00, float* %1
%3 = tail call float @__ieee754_fmodf(double 2.235300e+00, double 1.234500e+03)
store volatile float %3, float* %1
%4 = tail call float @__ieee754_fmodf(double 3.251500e+00, double 2.345600e+03)
store volatile float %4, float* %1
%5 = tail call float @__ieee754_fmodf(double 4.934600e+00, double 3.456700e+03)
store volatile float %5, float* %1
%6 = tail call float @__ieee754_fmodf(double 5.234200e+00, double 4.567800e+03)
store volatile float %6, float* %1
%7 = tail call float @__ieee754_fmodf(double 6.235200e+00, double 0x40B62EE666666666)
store volatile float %7, float* %1
ret void
}