#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 eri(double, double, double, double, int, int, int, double, double,
           double, double, double, int, int, int, double, double, double,
           double, double, int, int, int, double, double, double, double,
           double, int, int, int, double);
double contr_eri(int lena, double *aexps, double *acoefs, double *anorms,
                 double xa, double ya, double za, int la, int ma, int na,
                 int lenb, double *bexps, double *bcoefs, double *bnorms,
                 double xb, double yb, double zb, int lb, int mb, int nb,
                 int lenc, double *cexps, double *ccoefs, double *cnorms,
                 double xc, double yc, double zc, int lc, int mc, int nc,
                 int lend, double *dexps, double *dcoefs, double *dnorms,
                 double xd, double yd, double zd, int ld, int md, int nd) {
  double val = 0.0;
  int i, j, k, l;
  double EE;
  for (i = 0; i < lena; i++) {
    for (j = 0; j < lenb; j++) {
      for (k = 0; k < lenc; k++) {
        for (l = 0; l < lend; l++) {
          EE = acoefs[i] * bcoefs[j] * ccoefs[k] * dcoefs[l] *
               eri(xa, ya, za, anorms[i], la, ma, na, aexps[i], xb, yb, zb,
                   bnorms[j], lb, mb, nb, bexps[j], xc, yc, zc, cnorms[k], lc,
                   mc, nc, cexps[k], xd, yd, zd, dnorms[l], ld, md, nd,
                   dexps[l]);
          val += EE;
        }
      }
    }
  }
  return val;
}


x86 assembly (clang, -O0):
<contr_eri>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x148,%rsp
mov    0xd8(%rbp),%eax
mov    0xd0(%rbp),%eax
mov    0xc8(%rbp),%eax
movsd  0xc0(%rbp),%xmm8
movsd  0xb8(%rbp),%xmm8
movsd  0xb0(%rbp),%xmm8
mov    0xa8(%rbp),%rax
mov    0xa0(%rbp),%rax
mov    0x98(%rbp),%rax
mov    0x90(%rbp),%eax
mov    0x88(%rbp),%eax
mov    0x80(%rbp),%eax
mov    0x78(%rbp),%eax
movsd  0x70(%rbp),%xmm8
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x2c(%rbp)
mov    %rsi,-0x38(%rbp)
mov    %rdx,-0x40(%rbp)
mov    %rcx,-0x48(%rbp)
movsd  %xmm0,-0x50(%rbp)
movsd  %xmm1,-0x58(%rbp)
movsd  %xmm2,-0x60(%rbp)
mov    %r8d,-0x64(%rbp)
mov    %r9d,-0x68(%rbp)
movsd  %xmm3,-0x70(%rbp)
movsd  %xmm4,-0x78(%rbp)
movsd  %xmm5,-0x80(%rbp)
movsd  %xmm6,-0x88(%rbp)
ff
movsd  %xmm7,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movl   $0x0,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jge    151d <contr_eri+0x40d>
movl   $0x0,-0xa0(%rbp)
mov    -0xa0(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1504 <contr_eri+0x3f4>
movl   $0x0,-0xa4(%rbp)
mov    -0xa4(%rbp),%eax
cmp    0x50(%rbp),%eax
jge    14eb <contr_eri+0x3db>
movl   $0x0,-0xa8(%rbp)
mov    -0xa8(%rbp),%eax
cmp    0x90(%rbp),%eax
jge    14d2 <contr_eri+0x3c2>
mov    -0x40(%rbp),%rax
movslq -0x9c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0xa0(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x60(%rbp),%rax
movslq -0xa4(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0xa0(%rbp),%rax
movslq -0xa8(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x58(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
mov    -0x48(%rbp),%rax
movslq -0x9c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm3
mov    -0x64(%rbp),%edi
mov    -0x68(%rbp),%esi
mov    0x10(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x9c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm4
movsd  -0x70(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x80(%rbp),%xmm7
mov    0x30(%rbp),%rax
movslq -0xa0(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm8
mov    0x38(%rbp),%ecx
mov    0x40(%rbp),%r8d
mov    0x48(%rbp),%r9d
mov    0x20(%rbp),%rax
movslq -0xa0(%rbp),%r10
movsd  (%rax,%r10,8),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0x70(%rbp),%xmm15
mov    0x68(%rbp),%rax
movslq -0xa4(%rbp),%r10
movsd  (%rax,%r10,8),%xmm14
mov    0x78(%rbp),%r15d
mov    0x80(%rbp),%r14d
mov    0x88(%rbp),%ebx
mov    0x58(%rbp),%rax
movslq -0xa4(%rbp),%r10
movsd  (%rax,%r10,8),%xmm13
movsd  0xb0(%rbp),%xmm12
movsd  0xb8(%rbp),%xmm11
movsd  0xc0(%rbp),%xmm10
mov    0xa8(%rbp),%rax
movslq -0xa8(%rbp),%r10
movsd  (%rax,%r10,8),%xmm9
mov    0xc8(%rbp),%r11d
mov    0xd0(%rbp),%r10d
mov    0xd8(%rbp),%eax
mov    0x98(%rbp),%r12
movslq -0xa8(%rbp),%r13
movsd  (%r12,%r13,8),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm8,(%rsp)
movsd  -0xd8(%rbp),%xmm8
ff ff
movsd  %xmm8,0x8(%rsp)
movsd  -0xd0(%rbp),%xmm8
ff ff
movsd  %xmm8,0x10(%rsp)
movsd  -0xc8(%rbp),%xmm8
ff ff
movsd  %xmm8,0x18(%rsp)
movsd  -0xc0(%rbp),%xmm8
ff ff
movsd  %xmm15,0x20(%rsp)
movsd  %xmm14,0x28(%rsp)
mov    %r15d,0x30(%rsp)
mov    %r14d,0x38(%rsp)
mov    %ebx,0x40(%rsp)
movsd  %xmm13,0x48(%rsp)
movsd  %xmm12,0x50(%rsp)
movsd  %xmm11,0x58(%rsp)
movsd  %xmm10,0x60(%rsp)
movsd  %xmm9,0x68(%rsp)
mov    %r11d,0x70(%rsp)
mov    %r10d,0x78(%rsp)
mov    %eax,0x80(%rsp)
movsd  %xmm8,0x88(%rsp)
call   1030 <eri@plt>
movaps %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0xa8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa8(%rbp)
jmp    1250 <contr_eri+0x140>
jmp    14d7 <contr_eri+0x3c7>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1237 <contr_eri+0x127>
jmp    14f0 <contr_eri+0x3e0>
mov    -0xa0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa0(%rbp)
jmp    121e <contr_eri+0x10e>
jmp    1509 <contr_eri+0x3f9>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    1205 <contr_eri+0xf5>
movsd  -0x98(%rbp),%xmm0
ff
add    $0x148,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<contr_eri>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x128,%rsp
mov    %r9d,0xa4(%rsp)
test   %edi,%edi
jle    14d9 <contr_eri+0x3c9>
movaps %xmm5,%xmm10
movaps %xmm4,%xmm11
movapd %xmm3,%xmm5
movapd %xmm0,%xmm15
mov    %rsi,%r15
mov    0x218(%rsp),%r14d
mov    0x1f8(%rsp),%r13
mov    0x1f0(%rsp),%rsi
mov    0x1e8(%rsp),%r10
mov    0x1d8(%rsp),%r11d
mov    0x1d0(%rsp),%ebx
mov    %edi,%edi
mov    %rdi,0xb8(%rsp)
xorpd  %xmm3,%xmm3
xor    %ebp,%ebp
movsd  %xmm7,0x110(%rsp)
movsd  %xmm6,0x108(%rsp)
movsd  %xmm10,0x100(%rsp)
movsd  %xmm4,0xf8(%rsp)
movsd  %xmm5,0xf0(%rsp)
movsd  %xmm2,0xe8(%rsp)
movsd  %xmm1,0xe0(%rsp)
movsd  %xmm0,0xd8(%rsp)
mov    %r15,0xd0(%rsp)
mov    %rdx,0xc8(%rsp)
mov    %rcx,0xc0(%rsp)
mov    %r8d,0xa0(%rsp)
jmp    1202 <contr_eri+0xf2>
nop
add    $0x1,%rbp
cmp    0xb8(%rsp),%rbp
je     14dd <contr_eri+0x3cd>
cmpl   $0x0,0x168(%rsp)
jle    11f0 <contr_eri+0xe0>
xor    %edi,%edi
mov    %rdi,0x98(%rsp)
mov    %rbp,0xa8(%rsp)
jmp    124e <contr_eri+0x13e>
mov    0x98(%rsp),%rbp
add    $0x1,%rbp
mov    %rbp,%rax
mov    0x168(%rsp),%ebp
mov    %rax,%rdi
mov    %rax,0x98(%rsp)
cmp    %rbp,%rax
mov    0xa8(%rsp),%rbp
je     11f0 <contr_eri+0xe0>
cmpl   $0x0,0x1a0(%rsp)
jle    1220 <contr_eri+0x110>
xor    %edi,%edi
jmp    127e <contr_eri+0x16e>
nopl   0x0(%rax)
add    $0x1,%rdi
mov    %rdi,%rbp
mov    0x1a0(%rsp),%edi
cmp    %rdi,%rbp
mov    %rbp,%rdi
mov    0x98(%rsp),%rbp
je     1228 <contr_eri+0x118>
cmpl   $0x0,0x1e0(%rsp)
jle    1260 <contr_eri+0x150>
xor    %ebp,%ebp
mov    %rdi,0xb0(%rsp)
mov    0xb0(%rsp),%rdi
nopw   0x0(%rax,%rax,1)
movsd  %xmm3,0x120(%rsp)
mov    0xa8(%rsp),%r12
movsd  (%rdx,%r12,8),%xmm0
mov    0x98(%rsp),%rdx
mov    0x178(%rsp),%rax
mulsd  (%rax,%rdx,8),%xmm0
mov    0x1b0(%rsp),%r9
mulsd  (%r9,%rdi,8),%xmm0
mulsd  (%rsi,%rbp,8),%xmm0
movsd  %xmm0,0x118(%rsp)
movsd  (%rcx,%r12,8),%xmm3
movsd  (%r15,%r12,8),%xmm4
mov    0x180(%rsp),%rax
movsd  (%rax,%rdx,8),%xmm8
mov    0x170(%rsp),%rax
movsd  (%rax,%rdx,8),%xmm9
mov    0x1b8(%rsp),%rax
movsd  (%rax,%rdi,8),%xmm12
mov    0x1a8(%rsp),%rax
movsd  (%rax,%rdi,8),%xmm13
movsd  0x0(%r13,%rbp,8),%xmm14
movsd  (%r10,%rbp,8),%xmm0
movsd  %xmm0,0x88(%rsp)
mov    0x228(%rsp),%eax
mov    %eax,0x80(%rsp)
mov    0x220(%rsp),%eax
mov    %eax,0x78(%rsp)
mov    %r14d,0x70(%rsp)
movsd  %xmm14,0x68(%rsp)
movsd  0x210(%rsp),%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0x208(%rsp),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  0x200(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  %xmm13,0x48(%rsp)
mov    %r11d,0x40(%rsp)
mov    %ebx,0x38(%rsp)
mov    0x1c8(%rsp),%eax
mov    %eax,0x30(%rsp)
movsd  %xmm12,0x28(%rsp)
movsd  0x1c0(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  %xmm7,0x18(%rsp)
movsd  %xmm6,0x10(%rsp)
movsd  %xmm9,0x8(%rsp)
movsd  %xmm8,(%rsp)
movapd %xmm15,%xmm0
mov    %r8d,%edi
mov    0xa4(%rsp),%esi
mov    0x160(%rsp),%edx
movaps %xmm11,%xmm6
movaps %xmm10,%xmm7
mov    0x188(%rsp),%ecx
mov    0x190(%rsp),%r8d
mov    0x198(%rsp),%r9d
call   1030 <eri@plt>
mov    0xb0(%rsp),%rdi
movsd  0x120(%rsp),%xmm3
mov    0x1d8(%rsp),%r11d
mov    0x1e8(%rsp),%r10
mov    0x1f0(%rsp),%rsi
mov    0xd0(%rsp),%r15
mov    0xc8(%rsp),%rdx
mov    0xc0(%rsp),%rcx
movsd  0xd8(%rsp),%xmm15
movsd  0xe0(%rsp),%xmm1
movsd  0xe8(%rsp),%xmm2
mov    0xa0(%rsp),%r8d
mov    0x1d0(%rsp),%ebx
movsd  0xf0(%rsp),%xmm5
movsd  0xf8(%rsp),%xmm11
movsd  0x100(%rsp),%xmm10
movsd  0x108(%rsp),%xmm6
movsd  0x110(%rsp),%xmm7
mulsd  0x118(%rsp),%xmm0
addsd  %xmm0,%xmm3
add    $0x1,%rbp
mov    0x1e0(%rsp),%eax
cmp    %rbp,%rax
jne    12a0 <contr_eri+0x190>
jmp    1260 <contr_eri+0x150>
xorpd  %xmm3,%xmm3
movapd %xmm3,%xmm0
add    $0x128,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define double @contr_eri(i32 %0, double* %1, double* %2, double* %3, double %4, double %5, double %6, i32 %7, i32 %8, i32 %9, i32 %10, double* %11, double* %12, double* %13, double %14, double %15, double %16, i32 %17, i32 %18, i32 %19, i32 %20, double* %21, double* %22, double* %23, double %24, double %25, double %26, i32 %27, i32 %28, i32 %29, i32 %30, double* %31, double* %32, double* %33, double %34, double %35, double %36, i32 %37, i32 %38, i32 %39) {
%41 = alloca i32
%42 = alloca double*
%43 = alloca double*
%44 = alloca double*
%45 = alloca double
%46 = alloca double
%47 = alloca double
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca double*
%53 = alloca double*
%54 = alloca double*
%55 = alloca double
%56 = alloca double
%57 = alloca double
%58 = alloca i32
%59 = alloca i32
%60 = alloca i32
%61 = alloca i32
%62 = alloca double*
%63 = alloca double*
%64 = alloca double*
%65 = alloca double
%66 = alloca double
%67 = alloca double
%68 = alloca i32
%69 = alloca i32
%70 = alloca i32
%71 = alloca i32
%72 = alloca double*
%73 = alloca double*
%74 = alloca double*
%75 = alloca double
%76 = alloca double
%77 = alloca double
%78 = alloca i32
%79 = alloca i32
%80 = alloca i32
%81 = alloca double
%82 = alloca i32
%83 = alloca i32
%84 = alloca i32
%85 = alloca i32
%86 = alloca double
store i32 %0, i32* %41
store double* %1, double** %42
store double* %2, double** %43
store double* %3, double** %44
store double %4, double* %45
store double %5, double* %46
store double %6, double* %47
store i32 %7, i32* %48
store i32 %8, i32* %49
store i32 %9, i32* %50
store i32 %10, i32* %51
store double* %11, double** %52
store double* %12, double** %53
store double* %13, double** %54
store double %14, double* %55
store double %15, double* %56
store double %16, double* %57
store i32 %17, i32* %58
store i32 %18, i32* %59
store i32 %19, i32* %60
store i32 %20, i32* %61
store double* %21, double** %62
store double* %22, double** %63
store double* %23, double** %64
store double %24, double* %65
store double %25, double* %66
store double %26, double* %67
store i32 %27, i32* %68
store i32 %28, i32* %69
store i32 %29, i32* %70
store i32 %30, i32* %71
store double* %31, double** %72
store double* %32, double** %73
store double* %33, double** %74
store double %34, double* %75
store double %35, double* %76
store double %36, double* %77
store i32 %37, i32* %78
store i32 %38, i32* %79
store i32 %39, i32* %80
store double 0.000000e+00, double* %81
store i32 0, i32* %82
br label %87
87: ; preds = %211, %40
%88 = load i32, i32* %82
%89 = load i32, i32* %41
%90 = icmp slt i32 %88, %89
br i1 %90, label %91, label %214
91: ; preds = %87
store i32 0, i32* %83
br label %92
92: ; preds = %207, %91
%93 = load i32, i32* %83
%94 = load i32, i32* %51
%95 = icmp slt i32 %93, %94
br i1 %95, label %96, label %210
96: ; preds = %92
store i32 0, i32* %84
br label %97
97: ; preds = %203, %96
%98 = load i32, i32* %84
%99 = load i32, i32* %61
%100 = icmp slt i32 %98, %99
br i1 %100, label %101, label %206
101: ; preds = %97
store i32 0, i32* %85
br label %102
102: ; preds = %199, %101
%103 = load i32, i32* %85
%104 = load i32, i32* %71
%105 = icmp slt i32 %103, %104
br i1 %105, label %106, label %202
106: ; preds = %102
%107 = load double*, double** %43
%108 = load i32, i32* %82
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds double, double* %107, i64 %109
%111 = load double, double* %110
%112 = load double*, double** %53
%113 = load i32, i32* %83
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds double, double* %112, i64 %114
%116 = load double, double* %115
%117 = fmul double %111, %116
%118 = load double*, double** %63
%119 = load i32, i32* %84
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds double, double* %118, i64 %120
%122 = load double, double* %121
%123 = fmul double %117, %122
%124 = load double*, double** %73
%125 = load i32, i32* %85
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds double, double* %124, i64 %126
%128 = load double, double* %127
%129 = fmul double %123, %128
%130 = load double, double* %45
%131 = load double, double* %46
%132 = load double, double* %47
%133 = load double*, double** %44
%134 = load i32, i32* %82
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds double, double* %133, i64 %135
%137 = load double, double* %136
%138 = load i32, i32* %48
%139 = load i32, i32* %49
%140 = load i32, i32* %50
%141 = load double*, double** %42
%142 = load i32, i32* %82
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds double, double* %141, i64 %143
%145 = load double, double* %144
%146 = load double, double* %55
%147 = load double, double* %56
%148 = load double, double* %57
%149 = load double*, double** %54
%150 = load i32, i32* %83
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds double, double* %149, i64 %151
%153 = load double, double* %152
%154 = load i32, i32* %58
%155 = load i32, i32* %59
%156 = load i32, i32* %60
%157 = load double*, double** %52
%158 = load i32, i32* %83
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds double, double* %157, i64 %159
%161 = load double, double* %160
%162 = load double, double* %65
%163 = load double, double* %66
%164 = load double, double* %67
%165 = load double*, double** %64
%166 = load i32, i32* %84
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds double, double* %165, i64 %167
%169 = load double, double* %168
%170 = load i32, i32* %68
%171 = load i32, i32* %69
%172 = load i32, i32* %70
%173 = load double*, double** %62
%174 = load i32, i32* %84
%175 = sext i32 %174 to i64
%176 = getelementptr inbounds double, double* %173, i64 %175
%177 = load double, double* %176
%178 = load double, double* %75
%179 = load double, double* %76
%180 = load double, double* %77
%181 = load double*, double** %74
%182 = load i32, i32* %85
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds double, double* %181, i64 %183
%185 = load double, double* %184
%186 = load i32, i32* %78
%187 = load i32, i32* %79
%188 = load i32, i32* %80
%189 = load double*, double** %72
%190 = load i32, i32* %85
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds double, double* %189, i64 %191
%193 = load double, double* %192
%194 = call double @eri(double %130, double %131, double %132, double %137, i32 %138, i32 %139, i32 %140, double %145, double %146, double %147, double %148, double %153, i32 %154, i32 %155, i32 %156, double %161, double %162, double %163, double %164, double %169, i32 %170, i32 %171, i32 %172, double %177, double %178, double %179, double %180, double %185, i32 %186, i32 %187, i32 %188, double %193)
%195 = fmul double %129, %194
store double %195, double* %86
%196 = load double, double* %86
%197 = load double, double* %81
%198 = fadd double %197, %196
store double %198, double* %81
br label %199
199: ; preds = %106
%200 = load i32, i32* %85
%201 = add nsw i32 %200, 1
store i32 %201, i32* %85
br label %102
202: ; preds = %102
br label %203
203: ; preds = %202
%204 = load i32, i32* %84
%205 = add nsw i32 %204, 1
store i32 %205, i32* %84
br label %97
206: ; preds = %97
br label %207
207: ; preds = %206
%208 = load i32, i32* %83
%209 = add nsw i32 %208, 1
store i32 %209, i32* %83
br label %92
210: ; preds = %92
br label %211
211: ; preds = %210
%212 = load i32, i32* %82
%213 = add nsw i32 %212, 1
store i32 %213, i32* %82
br label %87
214: ; preds = %87
%215 = load double, double* %81
ret double %215
}

LLVM IR (-O2):
define double @contr_eri(i32 %0, double* nocapture %1, double* nocapture %2, double* nocapture %3, double %4, double %5, double %6, i32 %7, i32 %8, i32 %9, i32 %10, double* nocapture %11, double* nocapture %12, double* nocapture %13, double %14, double %15, double %16, i32 %17, i32 %18, i32 %19, i32 %20, double* nocapture %21, double* nocapture %22, double* nocapture %23, double %24, double %25, double %26, i32 %27, i32 %28, i32 %29, i32 %30, double* nocapture %31, double* nocapture %32, double* nocapture %33, double %34, double %35, double %36, i32 %37, i32 %38, i32 %39) {
%41 = icmp sgt i32 %0, 0
br i1 %41, label %42, label %109
42: ; preds = %40
%43 = icmp sgt i32 %10, 0
%44 = icmp sgt i32 %20, 0
%45 = icmp sgt i32 %30, 0
%46 = zext i32 %0 to i64
%47 = zext i32 %10 to i64
%48 = zext i32 %20 to i64
%49 = zext i32 %30 to i64
br label %50
50: ; preds = %42, %105
%51 = phi i64 [ 0, %42 ], [ %107, %105 ]
%52 = phi double [ 0.000000e+00, %42 ], [ %106, %105 ]
br i1 %43, label %53, label %105
53: ; preds = %50
%54 = getelementptr inbounds double, double* %2, i64 %51
%55 = getelementptr inbounds double, double* %3, i64 %51
%56 = getelementptr inbounds double, double* %1, i64 %51
br label %57
57: ; preds = %53, %101
%58 = phi i64 [ 0, %53 ], [ %103, %101 ]
%59 = phi double [ %52, %53 ], [ %102, %101 ]
br i1 %44, label %60, label %101
60: ; preds = %57
%61 = getelementptr inbounds double, double* %12, i64 %58
%62 = getelementptr inbounds double, double* %13, i64 %58
%63 = getelementptr inbounds double, double* %11, i64 %58
br label %64
64: ; preds = %60, %97
%65 = phi i64 [ 0, %60 ], [ %99, %97 ]
%66 = phi double [ %59, %60 ], [ %98, %97 ]
br i1 %45, label %67, label %97
67: ; preds = %64
%68 = getelementptr inbounds double, double* %22, i64 %65
%69 = getelementptr inbounds double, double* %23, i64 %65
%70 = getelementptr inbounds double, double* %21, i64 %65
br label %71
71: ; preds = %67, %71
%72 = phi i64 [ 0, %67 ], [ %95, %71 ]
%73 = phi double [ %66, %67 ], [ %94, %71 ]
%74 = load double, double* %54
%75 = load double, double* %61
%76 = fmul double %74, %75
%77 = load double, double* %68
%78 = fmul double %76, %77
%79 = getelementptr inbounds double, double* %32, i64 %72
%80 = load double, double* %79
%81 = fmul double %78, %80
%82 = load double, double* %55
%83 = load double, double* %56
%84 = load double, double* %62
%85 = load double, double* %63
%86 = load double, double* %69
%87 = load double, double* %70
%88 = getelementptr inbounds double, double* %33, i64 %72
%89 = load double, double* %88
%90 = getelementptr inbounds double, double* %31, i64 %72
%91 = load double, double* %90
%92 = tail call double @eri(double %4, double %5, double %6, double %82, i32 %7, i32 %8, i32 %9, double %83, double %14, double %15, double %16, double %84, i32 %17, i32 %18, i32 %19, double %85, double %24, double %25, double %26, double %86, i32 %27, i32 %28, i32 %29, double %87, double %34, double %35, double %36, double %89, i32 %37, i32 %38, i32 %39, double %91)
%93 = fmul double %81, %92
%94 = fadd double %73, %93
%95 = add nuw nsw i64 %72, 1
%96 = icmp eq i64 %95, %49
br i1 %96, label %97, label %71
97: ; preds = %71, %64
%98 = phi double [ %66, %64 ], [ %94, %71 ]
%99 = add nuw nsw i64 %65, 1
%100 = icmp eq i64 %99, %48
br i1 %100, label %101, label %64
101: ; preds = %97, %57
%102 = phi double [ %59, %57 ], [ %98, %97 ]
%103 = add nuw nsw i64 %58, 1
%104 = icmp eq i64 %103, %47
br i1 %104, label %105, label %57
105: ; preds = %101, %50
%106 = phi double [ %52, %50 ], [ %102, %101 ]
%107 = add nuw nsw i64 %51, 1
%108 = icmp eq i64 %107, %46
br i1 %108, label %109, label %50
109: ; preds = %105, %40
%110 = phi double [ 0.000000e+00, %40 ], [ %106, %105 ]
ret double %110
}