#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 */
int /*<<< orphan*/ foo(int, double, int, int, int, double, double, int, int,
                       int, double, double, int, int, int, double, double, int,
                       int, int, double, double, int, int, int, double, double,
                       int, int, int, double);
int main() {
  foo(3, 1.0, 2, 3, 4, 5.0, 1.0, 2, 3, 4, 5.0, 1.0, 2, 3, 4, 5.0, 1.0, 2, 3, 4,
      5.0, 1.0, 2, 3, 4, 5.0, 1.0, 2, 3, 4, 5.0);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x3,%r9d
movsd  0xecf(%rip),%xmm9
mov    $0x2,%r8d
mov    $0x4,%ecx
movsd  0xec3(%rip),%xmm8
mov    %r9d,%edi
movaps %xmm9,%xmm0
mov    %r8d,%esi
mov    %r9d,%edx
movaps %xmm8,%xmm1
movaps %xmm9,%xmm2
movl   $0x4,(%rsp)
movaps %xmm8,%xmm3
movaps %xmm9,%xmm4
movl   $0x2,0x8(%rsp)
movl   $0x3,0x10(%rsp)
movl   $0x4,0x18(%rsp)
movaps %xmm8,%xmm5
movaps %xmm9,%xmm6
movl   $0x2,0x20(%rsp)
movl   $0x3,0x28(%rsp)
movl   $0x4,0x30(%rsp)
movaps %xmm8,%xmm7
movsd  %xmm9,0x38(%rsp)
movl   $0x2,0x40(%rsp)
movl   $0x3,0x48(%rsp)
movl   $0x4,0x50(%rsp)
movsd  %xmm8,0x58(%rsp)
movsd  %xmm9,0x60(%rsp)
movl   $0x2,0x68(%rsp)
movl   $0x3,0x70(%rsp)
movl   $0x4,0x78(%rsp)
movsd  %xmm8,0x80(%rsp)
call   1030 <foo@plt>
xor    %eax,%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
sub    $0x8,%rsp
movabs $0x4014000000000000,%rax
movabs $0x3ff0000000000000,%r10
movsd  0xecf(%rip),%xmm0
movsd  0xecf(%rip),%xmm1
mov    $0x3,%edi
mov    $0x2,%esi
mov    $0x3,%edx
mov    $0x4,%ecx
movaps %xmm0,%xmm2
mov    $0x2,%r8d
mov    $0x3,%r9d
movaps %xmm1,%xmm3
movaps %xmm0,%xmm4
movaps %xmm1,%xmm5
movaps %xmm0,%xmm6
movaps %xmm1,%xmm7
push   %rax
push   $0x4
push   $0x3
push   $0x2
push   %r10
push   %rax
push   $0x4
push   $0x3
push   $0x2
push   %r10
push   $0x4
push   $0x3
push   $0x2
push   $0x4
push   $0x3
push   $0x2
push   $0x4
call   1030 <foo@plt>
add    $0x90,%rsp
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = call i32 @foo(i32 3, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00)
ret i32 0
}

LLVM IR (-O2):
define i32 @main() {
%1 = tail call i32 @foo(i32 3, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00, double 1.000000e+00, i32 2, i32 3, i32 4, double 5.000000e+00)
ret i32 0
}