#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 RAND_MAX;
int /*<<< orphan*/ da_add_da_d(double *, double const, double *);
scalar_t__ rand();
void da_random(double *x) {
  const double eps = 2.220446049250313e-16;
  const double eps2 = eps * eps;
  const double eps3 = eps * eps2;
  const double eps4 = eps * eps3;
  const double eps5 = eps * eps4;
  const double eps6 = eps * eps5;
  const double eps7 = eps * eps6;
  const double eps8 = eps * eps7;
  const double eps9 = eps * eps8;
  const double r0 = ((double)rand()) / RAND_MAX;
  const double r1 = ((double)rand()) / RAND_MAX;
  const double r2 = ((double)rand()) / RAND_MAX;
  const double r3 = ((double)rand()) / RAND_MAX;
  const double r4 = ((double)rand()) / RAND_MAX;
  const double r5 = ((double)rand()) / RAND_MAX;
  const double r6 = ((double)rand()) / RAND_MAX;
  const double r7 = ((double)rand()) / RAND_MAX;
  const double r8 = ((double)rand()) / RAND_MAX;
  const double r9 = ((double)rand()) / RAND_MAX;
  x[0] = r0;
  x[1] = 0.0;
  x[2] = 0.0;
  x[3] = 0.0;
  x[4] = 0.0;
  x[5] = 0.0;
  x[6] = 0.0;
  x[7] = 0.0;
  x[8] = 0.0;
  x[9] = 0.0;
  da_add_da_d(x, r1 * eps, x);
  da_add_da_d(x, r2 * eps2, x);
  da_add_da_d(x, r3 * eps3, x);
  da_add_da_d(x, r4 * eps4, x);
  da_add_da_d(x, r5 * eps5, x);
  da_add_da_d(x, r6 * eps6, x);
  da_add_da_d(x, r7 * eps7, x);
  da_add_da_d(x, r8 * eps8, x);
  da_add_da_d(x, r9 * eps9, x);
}


x86 assembly (clang, -O0):
<da_random>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x8(%rbp)
movsd  0xf09(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xef4(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xedf(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xeca(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xeb5(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xea0(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe8b(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe76(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe61(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2e31(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2e15(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2df9(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2ddd(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2dc1(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2da5(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2d89(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2d6a(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2d4b(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    $0x0,%al
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2d2c(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x40(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x48(%rax)
mov    -0x8(%rbp),%rdi
movsd  0xcf3(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
mov    -0x8(%rbp),%rdi
movsd  0xcd1(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
mov    -0x8(%rbp),%rdi
movsd  0xcaf(%rip),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
mov    -0x8(%rbp),%rdi
movsd  0xc8d(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
mov    -0x8(%rbp),%rdi
movsd  0xc6b(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
mov    -0x8(%rbp),%rdi
movsd  0xc49(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
mov    -0x8(%rbp),%rdi
movsd  0xc24(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
mov    -0x8(%rbp),%rdi
movsd  0xbff(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
mov    -0x8(%rbp),%rdi
movsd  0xbda(%rip),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rsi
call   1030 <da_add_da_d@plt>
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<da_random>:
push   %r14
push   %rbx
sub    $0x58,%rsp
mov    %rdi,%rbx
xor    %eax,%eax
call   1040 <rand@plt>
cvtsi2sd %rax,%xmm0
mov    0x2eab(%rip),%r14
divsd  (%r14),%xmm0
movsd  %xmm0,0x50(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x8(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x48(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x40(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x38(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x30(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x28(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x20(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x18(%rsp)
xor    %eax,%eax
call   1040 <rand@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  (%r14),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x50(%rsp),%xmm0
movsd  %xmm0,(%rbx)
movsd  0x8(%rsp),%xmm0
mulsd  0xdb6(%rip),%xmm0
xorps  %xmm1,%xmm1
movups %xmm1,0x38(%rbx)
movups %xmm1,0x28(%rbx)
movups %xmm1,0x18(%rbx)
movups %xmm1,0x8(%rbx)
movq   $0x0,0x48(%rbx)
mov    %rbx,%rdi
mov    %rbx,%rsi
call   1030 <da_add_da_d@plt>
movsd  0x48(%rsp),%xmm0
mulsd  0xd8a(%rip),%xmm0
mov    %rbx,%rdi
mov    %rbx,%rsi
call   1030 <da_add_da_d@plt>
movsd  0x40(%rsp),%xmm0
mulsd  0xd79(%rip),%xmm0
mov    %rbx,%rdi
mov    %rbx,%rsi
call   1030 <da_add_da_d@plt>
movsd  0x38(%rsp),%xmm0
mulsd  0xd68(%rip),%xmm0
mov    %rbx,%rdi
mov    %rbx,%rsi
call   1030 <da_add_da_d@plt>
movsd  0x30(%rsp),%xmm0
mulsd  0xd57(%rip),%xmm0
mov    %rbx,%rdi
mov    %rbx,%rsi
call   1030 <da_add_da_d@plt>
movsd  0x28(%rsp),%xmm0
mulsd  0xd46(%rip),%xmm0
mov    %rbx,%rdi
mov    %rbx,%rsi
call   1030 <da_add_da_d@plt>
movsd  0x20(%rsp),%xmm0
mulsd  0xd35(%rip),%xmm0
mov    %rbx,%rdi
mov    %rbx,%rsi
call   1030 <da_add_da_d@plt>
movsd  0x18(%rsp),%xmm0
mulsd  0xd24(%rip),%xmm0
mov    %rbx,%rdi
mov    %rbx,%rsi
call   1030 <da_add_da_d@plt>
movsd  0x10(%rsp),%xmm0
mulsd  0xd13(%rip),%xmm0
mov    %rbx,%rdi
mov    %rbx,%rsi
add    $0x58,%rsp
pop    %rbx
pop    %r14
jmp    1030 <da_add_da_d@plt>

LLVM IR (-O0):
@RAND_MAX = global double 0.000000e+00
define void @da_random(double* %0) {
%2 = alloca double*
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
store double* %0, double** %2
store double 0x3CB0000000000000, double* %3
store double 0x3970000000000000, double* %4
store double 0x3630000000000000, double* %5
store double 0x32F0000000000000, double* %6
store double 0x2FB0000000000000, double* %7
store double 0x2C70000000000000, double* %8
store double 0x2930000000000000, double* %9
store double 0x25F0000000000000, double* %10
store double 0x22B0000000000000, double* %11
%22 = call i64 (...) @rand()
%23 = sitofp i64 %22 to double
%24 = load double, double* @RAND_MAX
%25 = fdiv double %23, %24
store double %25, double* %12
%26 = call i64 (...) @rand()
%27 = sitofp i64 %26 to double
%28 = load double, double* @RAND_MAX
%29 = fdiv double %27, %28
store double %29, double* %13
%30 = call i64 (...) @rand()
%31 = sitofp i64 %30 to double
%32 = load double, double* @RAND_MAX
%33 = fdiv double %31, %32
store double %33, double* %14
%34 = call i64 (...) @rand()
%35 = sitofp i64 %34 to double
%36 = load double, double* @RAND_MAX
%37 = fdiv double %35, %36
store double %37, double* %15
%38 = call i64 (...) @rand()
%39 = sitofp i64 %38 to double
%40 = load double, double* @RAND_MAX
%41 = fdiv double %39, %40
store double %41, double* %16
%42 = call i64 (...) @rand()
%43 = sitofp i64 %42 to double
%44 = load double, double* @RAND_MAX
%45 = fdiv double %43, %44
store double %45, double* %17
%46 = call i64 (...) @rand()
%47 = sitofp i64 %46 to double
%48 = load double, double* @RAND_MAX
%49 = fdiv double %47, %48
store double %49, double* %18
%50 = call i64 (...) @rand()
%51 = sitofp i64 %50 to double
%52 = load double, double* @RAND_MAX
%53 = fdiv double %51, %52
store double %53, double* %19
%54 = call i64 (...) @rand()
%55 = sitofp i64 %54 to double
%56 = load double, double* @RAND_MAX
%57 = fdiv double %55, %56
store double %57, double* %20
%58 = call i64 (...) @rand()
%59 = sitofp i64 %58 to double
%60 = load double, double* @RAND_MAX
%61 = fdiv double %59, %60
store double %61, double* %21
%62 = load double, double* %12
%63 = load double*, double** %2
%64 = getelementptr inbounds double, double* %63, i64 0
store double %62, double* %64
%65 = load double*, double** %2
%66 = getelementptr inbounds double, double* %65, i64 1
store double 0.000000e+00, double* %66
%67 = load double*, double** %2
%68 = getelementptr inbounds double, double* %67, i64 2
store double 0.000000e+00, double* %68
%69 = load double*, double** %2
%70 = getelementptr inbounds double, double* %69, i64 3
store double 0.000000e+00, double* %70
%71 = load double*, double** %2
%72 = getelementptr inbounds double, double* %71, i64 4
store double 0.000000e+00, double* %72
%73 = load double*, double** %2
%74 = getelementptr inbounds double, double* %73, i64 5
store double 0.000000e+00, double* %74
%75 = load double*, double** %2
%76 = getelementptr inbounds double, double* %75, i64 6
store double 0.000000e+00, double* %76
%77 = load double*, double** %2
%78 = getelementptr inbounds double, double* %77, i64 7
store double 0.000000e+00, double* %78
%79 = load double*, double** %2
%80 = getelementptr inbounds double, double* %79, i64 8
store double 0.000000e+00, double* %80
%81 = load double*, double** %2
%82 = getelementptr inbounds double, double* %81, i64 9
store double 0.000000e+00, double* %82
%83 = load double*, double** %2
%84 = load double, double* %13
%85 = fmul double %84, 0x3CB0000000000000
%86 = load double*, double** %2
%87 = call i32 @da_add_da_d(double* %83, double %85, double* %86)
%88 = load double*, double** %2
%89 = load double, double* %14
%90 = fmul double %89, 0x3970000000000000
%91 = load double*, double** %2
%92 = call i32 @da_add_da_d(double* %88, double %90, double* %91)
%93 = load double*, double** %2
%94 = load double, double* %15
%95 = fmul double %94, 0x3630000000000000
%96 = load double*, double** %2
%97 = call i32 @da_add_da_d(double* %93, double %95, double* %96)
%98 = load double*, double** %2
%99 = load double, double* %16
%100 = fmul double %99, 0x32F0000000000000
%101 = load double*, double** %2
%102 = call i32 @da_add_da_d(double* %98, double %100, double* %101)
%103 = load double*, double** %2
%104 = load double, double* %17
%105 = fmul double %104, 0x2FB0000000000000
%106 = load double*, double** %2
%107 = call i32 @da_add_da_d(double* %103, double %105, double* %106)
%108 = load double*, double** %2
%109 = load double, double* %18
%110 = fmul double %109, 0x2C70000000000000
%111 = load double*, double** %2
%112 = call i32 @da_add_da_d(double* %108, double %110, double* %111)
%113 = load double*, double** %2
%114 = load double, double* %19
%115 = fmul double %114, 0x2930000000000000
%116 = load double*, double** %2
%117 = call i32 @da_add_da_d(double* %113, double %115, double* %116)
%118 = load double*, double** %2
%119 = load double, double* %20
%120 = fmul double %119, 0x25F0000000000000
%121 = load double*, double** %2
%122 = call i32 @da_add_da_d(double* %118, double %120, double* %121)
%123 = load double*, double** %2
%124 = load double, double* %21
%125 = fmul double %124, 0x22B0000000000000
%126 = load double*, double** %2
%127 = call i32 @da_add_da_d(double* %123, double %125, double* %126)
ret void
}

LLVM IR (-O2):
@RAND_MAX = global double 0.000000e+00
define void @da_random(double* %0) {
%2 = tail call i64 (...) @rand()
%3 = sitofp i64 %2 to double
%4 = load double, double* @RAND_MAX
%5 = fdiv double %3, %4
%6 = tail call i64 (...) @rand()
%7 = sitofp i64 %6 to double
%8 = load double, double* @RAND_MAX
%9 = fdiv double %7, %8
%10 = tail call i64 (...) @rand()
%11 = sitofp i64 %10 to double
%12 = load double, double* @RAND_MAX
%13 = fdiv double %11, %12
%14 = tail call i64 (...) @rand()
%15 = sitofp i64 %14 to double
%16 = load double, double* @RAND_MAX
%17 = fdiv double %15, %16
%18 = tail call i64 (...) @rand()
%19 = sitofp i64 %18 to double
%20 = load double, double* @RAND_MAX
%21 = fdiv double %19, %20
%22 = tail call i64 (...) @rand()
%23 = sitofp i64 %22 to double
%24 = load double, double* @RAND_MAX
%25 = fdiv double %23, %24
%26 = tail call i64 (...) @rand()
%27 = sitofp i64 %26 to double
%28 = load double, double* @RAND_MAX
%29 = fdiv double %27, %28
%30 = tail call i64 (...) @rand()
%31 = sitofp i64 %30 to double
%32 = load double, double* @RAND_MAX
%33 = fdiv double %31, %32
%34 = tail call i64 (...) @rand()
%35 = sitofp i64 %34 to double
%36 = load double, double* @RAND_MAX
%37 = fdiv double %35, %36
%38 = tail call i64 (...) @rand()
%39 = sitofp i64 %38 to double
%40 = load double, double* @RAND_MAX
%41 = fdiv double %39, %40
store double %5, double* %0
%42 = getelementptr inbounds double, double* %0, i64 1
%43 = fmul double %9, 0x3CB0000000000000
%44 = bitcast double* %42 to i8*
%45 = tail call i32 @da_add_da_d(double* %0, double %43, double* %0)
%46 = fmul double %13, 0x3970000000000000
%47 = tail call i32 @da_add_da_d(double* %0, double %46, double* %0)
%48 = fmul double %17, 0x3630000000000000
%49 = tail call i32 @da_add_da_d(double* %0, double %48, double* %0)
%50 = fmul double %21, 0x32F0000000000000
%51 = tail call i32 @da_add_da_d(double* %0, double %50, double* %0)
%52 = fmul double %25, 0x2FB0000000000000
%53 = tail call i32 @da_add_da_d(double* %0, double %52, double* %0)
%54 = fmul double %29, 0x2C70000000000000
%55 = tail call i32 @da_add_da_d(double* %0, double %54, double* %0)
%56 = fmul double %33, 0x2930000000000000
%57 = tail call i32 @da_add_da_d(double* %0, double %56, double* %0)
%58 = fmul double %37, 0x25F0000000000000
%59 = tail call i32 @da_add_da_d(double* %0, double %58, double* %0)
%60 = fmul double %41, 0x22B0000000000000
%61 = tail call i32 @da_add_da_d(double* %0, double %60, double* %0)
ret void
}