#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 vrr_recursive(double, double, double, double, int, int, int, double,
                     double, double, double, double, double, double, double,
                     double, double, int, int, int, double, double, double,
                     double, double, double, int);
double vrr(double xa, double ya, double za, double norma, int la, int ma,
           int na, double alphaa, double xb, double yb, double zb, double normb,
           double alphab, double xc, double yc, double zc, double normc, int lc,
           int mc, int nc, double alphac, double xd, double yd, double zd,
           double normd, double alphad, int m) {
  return vrr_recursive(xa, ya, za, norma, la, ma, na, alphaa, xb, yb, zb, normb,
                       alphab, xc, yc, zc, normc, lc, mc, nc, alphac, xd, yd,
                       zd, normd, alphad, m);
}


x86 assembly (clang, -O0):
<vrr>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    0x70(%rbp),%eax
movsd  0x68(%rbp),%xmm8
movsd  0x60(%rbp),%xmm8
movsd  0x58(%rbp),%xmm8
movsd  0x50(%rbp),%xmm8
movsd  0x48(%rbp),%xmm8
movsd  0x40(%rbp),%xmm8
movsd  0x38(%rbp),%xmm8
movsd  0x30(%rbp),%xmm8
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
mov    %edi,-0x24(%rbp)
mov    %esi,-0x28(%rbp)
mov    %edx,-0x2c(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
mov    %ecx,-0x54(%rbp)
mov    %r8d,-0x58(%rbp)
mov    %r9d,-0x5c(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm3
mov    -0x24(%rbp),%edi
mov    -0x28(%rbp),%esi
mov    -0x2c(%rbp),%edx
movsd  -0x38(%rbp),%xmm4
movsd  -0x40(%rbp),%xmm5
movsd  -0x48(%rbp),%xmm6
movsd  -0x50(%rbp),%xmm7
movsd  0x10(%rbp),%xmm8
movsd  0x18(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0x20(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0x28(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0x30(%rbp),%xmm15
movsd  0x38(%rbp),%xmm14
mov    -0x54(%rbp),%ecx
mov    -0x58(%rbp),%r8d
mov    -0x5c(%rbp),%r9d
movsd  0x40(%rbp),%xmm13
movsd  0x48(%rbp),%xmm12
movsd  0x50(%rbp),%xmm11
movsd  0x58(%rbp),%xmm10
movsd  0x60(%rbp),%xmm9
movsd  0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x70(%rbp),%eax
movsd  %xmm8,(%rsp)
movsd  -0x80(%rbp),%xmm8
movsd  %xmm8,0x8(%rsp)
movsd  -0x78(%rbp),%xmm8
movsd  %xmm8,0x10(%rsp)
movsd  -0x70(%rbp),%xmm8
movsd  %xmm8,0x18(%rsp)
movsd  -0x68(%rbp),%xmm8
movsd  %xmm15,0x20(%rsp)
movsd  %xmm14,0x28(%rsp)
movsd  %xmm13,0x30(%rsp)
movsd  %xmm12,0x38(%rsp)
movsd  %xmm11,0x40(%rsp)
movsd  %xmm10,0x48(%rsp)
movsd  %xmm9,0x50(%rsp)
movsd  %xmm8,0x58(%rsp)
mov    %eax,0x60(%rsp)
call   1030 <vrr_recursive@plt>
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<vrr>:
jmp    1030 <vrr_recursive@plt>

LLVM IR (-O0):
define double @vrr(double %0, double %1, double %2, double %3, i32 %4, i32 %5, i32 %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, double %14, double %15, double %16, i32 %17, i32 %18, i32 %19, double %20, double %21, double %22, double %23, double %24, double %25, i32 %26) {
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca i32
%46 = alloca i32
%47 = alloca i32
%48 = alloca double
%49 = alloca double
%50 = alloca double
%51 = alloca double
%52 = alloca double
%53 = alloca double
%54 = alloca i32
store double %0, double* %28
store double %1, double* %29
store double %2, double* %30
store double %3, double* %31
store i32 %4, i32* %32
store i32 %5, i32* %33
store i32 %6, i32* %34
store double %7, double* %35
store double %8, double* %36
store double %9, double* %37
store double %10, double* %38
store double %11, double* %39
store double %12, double* %40
store double %13, double* %41
store double %14, double* %42
store double %15, double* %43
store double %16, double* %44
store i32 %17, i32* %45
store i32 %18, i32* %46
store i32 %19, i32* %47
store double %20, double* %48
store double %21, double* %49
store double %22, double* %50
store double %23, double* %51
store double %24, double* %52
store double %25, double* %53
store i32 %26, i32* %54
%55 = load double, double* %28
%56 = load double, double* %29
%57 = load double, double* %30
%58 = load double, double* %31
%59 = load i32, i32* %32
%60 = load i32, i32* %33
%61 = load i32, i32* %34
%62 = load double, double* %35
%63 = load double, double* %36
%64 = load double, double* %37
%65 = load double, double* %38
%66 = load double, double* %39
%67 = load double, double* %40
%68 = load double, double* %41
%69 = load double, double* %42
%70 = load double, double* %43
%71 = load double, double* %44
%72 = load i32, i32* %45
%73 = load i32, i32* %46
%74 = load i32, i32* %47
%75 = load double, double* %48
%76 = load double, double* %49
%77 = load double, double* %50
%78 = load double, double* %51
%79 = load double, double* %52
%80 = load double, double* %53
%81 = load i32, i32* %54
%82 = call double @vrr_recursive(double %55, double %56, double %57, double %58, i32 %59, i32 %60, i32 %61, double %62, double %63, double %64, double %65, double %66, double %67, double %68, double %69, double %70, double %71, i32 %72, i32 %73, i32 %74, double %75, double %76, double %77, double %78, double %79, double %80, i32 %81)
ret double %82
}

LLVM IR (-O2):
define double @vrr(double %0, double %1, double %2, double %3, i32 %4, i32 %5, i32 %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, double %14, double %15, double %16, i32 %17, i32 %18, i32 %19, double %20, double %21, double %22, double %23, double %24, double %25, i32 %26) {
%28 = tail call double @vrr_recursive(double %0, double %1, double %2, double %3, i32 %4, i32 %5, i32 %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, double %14, double %15, double %16, i32 %17, i32 %18, i32 %19, double %20, double %21, double %22, double %23, double %24, double %25, i32 %26)
ret double %28
}