#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 */
double rnd1();
double gauss() {
  return ((rnd1() + rnd1() + rnd1() + rnd1() + rnd1() + rnd1() + rnd1() +
           rnd1() + rnd1() + rnd1() + rnd1() + rnd1() - 6));
}


x86 assembly (clang, -O0):
<gauss>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    $0x0,%al
call   1030 <rnd1@plt>
movsd  %xmm0,-0x58(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x50(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x30(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x18(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x10(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
mov    $0x0,%al
call   1030 <rnd1@plt>
movaps %xmm0,%xmm1
movsd  -0x8(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  0xdd1(%rip),%xmm1
subsd  %xmm1,%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gauss>:
push   %rax
xor    %eax,%eax
call   1030 <rnd1@plt>
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <rnd1@plt>
addsd  (%rsp),%xmm0
addsd  0xe25(%rip),%xmm0
pop    %rax
ret

LLVM IR (-O0):
define double @gauss() {
%1 = call double (...) @rnd1()
%2 = call double (...) @rnd1()
%3 = fadd double %1, %2
%4 = call double (...) @rnd1()
%5 = fadd double %3, %4
%6 = call double (...) @rnd1()
%7 = fadd double %5, %6
%8 = call double (...) @rnd1()
%9 = fadd double %7, %8
%10 = call double (...) @rnd1()
%11 = fadd double %9, %10
%12 = call double (...) @rnd1()
%13 = fadd double %11, %12
%14 = call double (...) @rnd1()
%15 = fadd double %13, %14
%16 = call double (...) @rnd1()
%17 = fadd double %15, %16
%18 = call double (...) @rnd1()
%19 = fadd double %17, %18
%20 = call double (...) @rnd1()
%21 = fadd double %19, %20
%22 = call double (...) @rnd1()
%23 = fadd double %21, %22
%24 = fsub double %23, 6.000000e+00
ret double %24
}

LLVM IR (-O2):
define double @gauss() {
%1 = tail call double (...) @rnd1()
%2 = tail call double (...) @rnd1()
%3 = fadd double %1, %2
%4 = tail call double (...) @rnd1()
%5 = fadd double %3, %4
%6 = tail call double (...) @rnd1()
%7 = fadd double %5, %6
%8 = tail call double (...) @rnd1()
%9 = fadd double %7, %8
%10 = tail call double (...) @rnd1()
%11 = fadd double %9, %10
%12 = tail call double (...) @rnd1()
%13 = fadd double %11, %12
%14 = tail call double (...) @rnd1()
%15 = fadd double %13, %14
%16 = tail call double (...) @rnd1()
%17 = fadd double %15, %16
%18 = tail call double (...) @rnd1()
%19 = fadd double %17, %18
%20 = tail call double (...) @rnd1()
%21 = fadd double %19, %20
%22 = tail call double (...) @rnd1()
%23 = fadd double %21, %22
%24 = fadd double %23, -6.000000e+00
ret double %24
}