int main(int argc, char *argv[]) {
  const double numbers[8] = {2.39373654120722785592079162598E6,
                             0,
                             0,
                             0,
                             1234567,
                             2345678,
                             3456789,
                             4567890};
  double result;
  const double *ptr = numbers, *end = numbers + 8;
  int i;
  result = 0.0;
  while (ptr < end) {
    result += *ptr;
    ptr++;
  }
  return (result == 12345.0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x50(%rbp),%rdi
xor    %esi,%esi
mov    $0x40,%edx
call   1030 <memset@plt>
movsd  0xee2(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xecd(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xeb8(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xea3(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xe8e(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
lea    -0x50(%rbp),%rax
mov    %rax,-0x60(%rbp)
lea    -0x50(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x60(%rbp),%rax
cmp    -0x68(%rbp),%rax
jae    11c4 <main+0xb4>
mov    -0x60(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x60(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x60(%rbp)
jmp    1193 <main+0x83>
movsd  -0x58(%rbp),%xmm0
movsd  0xe57(%rip),%xmm1
ucomisd %xmm1,%xmm0
sete   %al
setnp  %cl
and    %cl,%al
and    $0x1,%al
movzbl %al,%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca [8 x double]
%7 = alloca double
%8 = alloca double*
%9 = alloca double*
%10 = alloca i32
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%11 = bitcast [8 x double]* %6 to i8*
%12 = bitcast i8* %11 to [8 x double]*
%13 = getelementptr inbounds [8 x double], [8 x double]* %12, i32 0, i32 0
store double 0x4142434445464748, double* %13
%14 = getelementptr inbounds [8 x double], [8 x double]* %12, i32 0, i32 4
store double 0x4132D68700000000, double* %14
%15 = getelementptr inbounds [8 x double], [8 x double]* %12, i32 0, i32 5
store double 0x4141E56700000000, double* %15
%16 = getelementptr inbounds [8 x double], [8 x double]* %12, i32 0, i32 6
store double 0x414A5F8A80000000, double* %16
%17 = getelementptr inbounds [8 x double], [8 x double]* %12, i32 0, i32 7
store double 4.567890e+06, double* %17
%18 = getelementptr inbounds [8 x double], [8 x double]* %6, i64 0, i64 0
store double* %18, double** %8
%19 = getelementptr inbounds [8 x double], [8 x double]* %6, i64 0, i64 0
%20 = getelementptr inbounds double, double* %19, i64 8
store double* %20, double** %9
store double 0.000000e+00, double* %7
br label %21
21: ; preds = %25, %2
%22 = load double*, double** %8
%23 = load double*, double** %9
%24 = icmp ult double* %22, %23
br i1 %24, label %25, label %32
25: ; preds = %21
%26 = load double*, double** %8
%27 = load double, double* %26
%28 = load double, double* %7
%29 = fadd double %28, %27
store double %29, double* %7
%30 = load double*, double** %8
%31 = getelementptr inbounds double, double* %30, i32 1
store double* %31, double** %8
br label %21
32: ; preds = %21
%33 = load double, double* %7
%34 = fcmp oeq double %33, 1.234500e+04
%35 = zext i1 %34 to i32
ret i32 %35
}

LLVM IR (-O2):
define i32 @main(i32 %0, i8** nocapture readnone %1) {
ret i32 0
}