#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 */
struct timeval {
  unsigned int tv_sec;
  double tv_usec;
};
typedef scalar_t__ clock_t;

/* Variables and functions */
int /*<<< orphan*/ assert(int);
int atoi(char *);
scalar_t__ clock();
double f(double, double, double, double, double);
int /*<<< orphan*/ gettimeofday(struct timeval *, int /*<<< orphan*/ *);
int /*<<< orphan*/ omp_set_num_threads(int);
int /*<<< orphan*/ printf(char *, double, ...);
int main(int argc, char **argv) {
  double a = 0.0;
  double b = 1.0;
  assert(argc == 2);
  int n = atoi(argv[1]);
  double delta = (b - a) / n;
  double integral = 0.0;
  double h = delta / 2.0;
  double w[3];
  w[0] = h / 3.0;
  w[1] = 4.0 * w[0];
  w[2] = w[0];
  clock_t ts = clock();
  struct timeval start, end;
  gettimeofday(&start, NULL);
  omp_set_num_threads(16);
#pragma omp parallel for shared(integral)
  for (int i5 = 0; i5 < n; i5++) {
    for (int j5 = 0; j5 < 3; j5++) {
      double x5 = a + i5 * delta + j5 * h;
      for (int i4 = 0; i4 < n; i4++) {
        for (int j4 = 0; j4 < 3; j4++) {
          double x4 = a + i4 * delta + j4 * h;
          for (int i3 = 0; i3 < n; i3++) {
            for (int j3 = 0; j3 < 3; j3++) {
              double x3 = a + i3 * delta + j3 * h;
              for (int i2 = 0; i2 < n; i2++) {
                for (int j2 = 0; j2 < 3; j2++) {
                  double x2 = a + i2 * delta + j2 * h;
                  for (int i1 = 0; i1 < n; i1++) {
                    for (int j1 = 0; j1 < 3; j1++) {
                      double x1 = a + i1 * delta + j1 * h;
#pragma omp atomic
                      integral += w[j1] * w[j2] * w[j3] * w[j4] * w[j5] *
                                  f(x1, x2, x3, x4, x5);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  gettimeofday(&end, NULL);
  double elapsed =
      ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) /
      1.e6;
  ts = clock() - ts;
  printf("%ld clocks (%lf seconds)\n", ts, elapsed);
  printf("integral is: %lf\n", integral);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe7f(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
cmpl   $0x2,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1070 <assert@plt>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
call   1090 <atoi@plt>
mov    %eax,-0x24(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xe24(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  0xe06(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xded(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x68(%rbp)
lea    -0x78(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1060 <gettimeofday@plt>
mov    $0x10,%edi
call   1080 <omp_set_num_threads@plt>
movl   $0x0,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    15d4 <main+0x464>
movl   $0x0,-0x90(%rbp)
cmpl   $0x3,-0x90(%rbp)
jge    15bb <main+0x44b>
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x8c(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
cvtsi2sdl -0x90(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movl   $0x0,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    15a2 <main+0x432>
movl   $0x0,-0xa0(%rbp)
cmpl   $0x3,-0xa0(%rbp)
jge    1589 <main+0x419>
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x9c(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
cvtsi2sdl -0xa0(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movl   $0x0,-0xac(%rbp)
mov    -0xac(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1570 <main+0x400>
movl   $0x0,-0xb0(%rbp)
cmpl   $0x3,-0xb0(%rbp)
jge    1557 <main+0x3e7>
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0xac(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
cvtsi2sdl -0xb0(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movl   $0x0,-0xbc(%rbp)
mov    -0xbc(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    153e <main+0x3ce>
movl   $0x0,-0xc0(%rbp)
cmpl   $0x3,-0xc0(%rbp)
jge    1525 <main+0x3b5>
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0xbc(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
cvtsi2sdl -0xc0(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movl   $0x0,-0xcc(%rbp)
mov    -0xcc(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    150c <main+0x39c>
movl   $0x0,-0xd0(%rbp)
cmpl   $0x3,-0xd0(%rbp)
jge    14f3 <main+0x383>
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0xcc(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
cvtsi2sdl -0xd0(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movslq -0xd0(%rbp),%rax
movsd  -0x60(%rbp,%rax,8),%xmm0
movslq -0xc0(%rbp),%rax
mulsd  -0x60(%rbp,%rax,8),%xmm0
movslq -0xb0(%rbp),%rax
mulsd  -0x60(%rbp,%rax,8),%xmm0
movslq -0xa0(%rbp),%rax
mulsd  -0x60(%rbp,%rax,8),%xmm0
movslq -0x90(%rbp),%rax
mulsd  -0x60(%rbp,%rax,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm3
ff
movsd  -0x98(%rbp),%xmm4
ff
call   1040 <f@plt>
movaps %xmm0,%xmm2
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0xd0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd0(%rbp)
jmp    1408 <main+0x298>
jmp    14f8 <main+0x388>
mov    -0xcc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
jmp    13ef <main+0x27f>
jmp    1511 <main+0x3a1>
mov    -0xc0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc0(%rbp)
jmp    13a1 <main+0x231>
jmp    152a <main+0x3ba>
mov    -0xbc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
jmp    1388 <main+0x218>
jmp    1543 <main+0x3d3>
mov    -0xb0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb0(%rbp)
jmp    133a <main+0x1ca>
jmp    155c <main+0x3ec>
mov    -0xac(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
jmp    1321 <main+0x1b1>
jmp    1575 <main+0x405>
mov    -0xa0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa0(%rbp)
jmp    12d3 <main+0x163>
jmp    158e <main+0x41e>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    12ba <main+0x14a>
jmp    15a7 <main+0x437>
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    126c <main+0xfc>
jmp    15c0 <main+0x450>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    1253 <main+0xe3>
xor    %eax,%eax
mov    %eax,%esi
lea    -0x88(%rbp),%rdi
call   1060 <gettimeofday@plt>
mov    -0x88(%rbp),%eax
mov    -0x78(%rbp),%ecx
sub    %ecx,%eax
imul   $0xf4240,%eax,%eax
cvtsi2sd %rax,%xmm0
addsd  -0x80(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  0xa14(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    $0x0,%al
call   1030 <clock@plt>
sub    -0x68(%rbp),%rax
mov    %rax,-0x68(%rbp)
cvtsi2sdq -0x68(%rbp),%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
lea    0x9ec(%rip),%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  -0x38(%rbp),%xmm0
lea    0x9f3(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
xor    %eax,%eax
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x168,%rsp
mov    %rsi,%rbx
xor    %eax,%eax
cmp    $0x2,%edi
sete   %al
mov    %eax,%edi
call   1070 <assert@plt>
mov    0x8(%rbx),%rdi
call   1090 <atoi@plt>
mov    %eax,%r13d
cvtsi2sd %eax,%xmm0
movsd  0xe55(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0xe51(%rip),%xmm0
movsd  %xmm1,0x40(%rsp)
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x30(%rsp)
divsd  0xe41(%rip),%xmm0
movsd  %xmm0,0x70(%rsp)
movsd  0xe3b(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x48(%rsp)
movsd  %xmm1,0x78(%rsp)
movsd  %xmm0,0x50(%rsp)
movsd  %xmm0,0x80(%rsp)
xor    %ebx,%ebx
xor    %eax,%eax
call   1030 <clock@plt>
mov    %rax,0xb0(%rsp)
lea    0x158(%rsp),%rdi
xor    %esi,%esi
call   1060 <gettimeofday@plt>
mov    $0x10,%edi
call   1080 <omp_set_num_threads@plt>
test   %r13d,%r13d
jle    18ff <main+0x78f>
movsd  0x70(%rsp),%xmm0
movsd  0x78(%rsp),%xmm1
movsd  0x50(%rsp),%xmm9
movapd %xmm9,%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,0xf8(%rsp)
movsd  0x48(%rsp),%xmm8
mulsd  %xmm8,%xmm0
movsd  %xmm0,0x108(%rsp)
movapd %xmm9,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0xf0(%rsp)
mulsd  %xmm8,%xmm1
movsd  %xmm1,0x100(%rsp)
movsd  0x80(%rsp),%xmm0
mulsd  %xmm0,%xmm9
mulsd  %xmm0,%xmm8
xorpd  %xmm5,%xmm5
xorpd  %xmm0,%xmm0
movsd  %xmm0,(%rsp)
xorpd  %xmm0,%xmm0
movsd  0x40(%rsp),%xmm13
movsd  0x30(%rsp),%xmm1
movsd  %xmm9,0x50(%rsp)
movsd  %xmm8,0x48(%rsp)
nopl   0x0(%rax,%rax,1)
mov    %rbx,0xc0(%rsp)
movsd  %xmm0,0xb8(%rsp)
mulsd  %xmm13,%xmm0
addsd  %xmm5,%xmm0
movsd  %xmm0,0xc8(%rsp)
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
mulsd  %xmm1,%xmm4
addsd  0xc8(%rsp),%xmm4
mov    %rax,0xd0(%rsp)
movsd  0x70(%rsp,%rax,8),%xmm0
movsd  %xmm0,0x110(%rsp)
xor    %eax,%eax
xorpd  %xmm6,%xmm6
movsd  %xmm4,0x18(%rsp)
nopw   0x0(%rax,%rax,1)
mov    %eax,0x6c(%rsp)
movsd  %xmm6,0xd8(%rsp)
mulsd  %xmm13,%xmm6
addsd  %xmm5,%xmm6
movsd  %xmm6,0xe0(%rsp)
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm3,%xmm3
cvtsi2sd %ebx,%xmm3
mulsd  %xmm1,%xmm3
addsd  0xe0(%rsp),%xmm3
movsd  0x70(%rsp,%rbx,8),%xmm0
movsd  %xmm0,0x118(%rsp)
xor    %r14d,%r14d
xorpd  %xmm6,%xmm6
movsd  %xmm3,0x20(%rsp)
movsd  %xmm6,0xe8(%rsp)
mulsd  %xmm13,%xmm6
addsd  %xmm5,%xmm6
movsd  %xmm6,0x120(%rsp)
xor    %r15d,%r15d
xchg   %ax,%ax
xorps  %xmm2,%xmm2
cvtsi2sd %r15d,%xmm2
mulsd  %xmm1,%xmm2
addsd  0x120(%rsp),%xmm2
movsd  0x70(%rsp,%r15,8),%xmm12
movsd  0xf8(%rsp),%xmm6
mulsd  %xmm12,%xmm6
movsd  0x118(%rsp),%xmm11
mulsd  %xmm11,%xmm6
movsd  0x110(%rsp),%xmm10
mulsd  %xmm10,%xmm6
movsd  0x108(%rsp),%xmm0
mulsd  %xmm12,%xmm0
mulsd  %xmm11,%xmm0
mulsd  %xmm10,%xmm0
movsd  %xmm0,0x138(%rsp)
movsd  0xf0(%rsp),%xmm0
mulsd  %xmm12,%xmm0
mulsd  %xmm11,%xmm0
mulsd  %xmm10,%xmm0
movsd  %xmm0,0x98(%rsp)
movsd  0x100(%rsp),%xmm0
mulsd  %xmm12,%xmm0
mulsd  %xmm11,%xmm0
mulsd  %xmm10,%xmm0
movsd  %xmm0,0x130(%rsp)
mulsd  %xmm12,%xmm9
mulsd  %xmm11,%xmm9
mulsd  %xmm10,%xmm9
mulsd  %xmm8,%xmm12
mulsd  %xmm11,%xmm12
mulsd  %xmm10,%xmm12
movsd  %xmm12,0x140(%rsp)
xor    %r12d,%r12d
xorpd  %xmm8,%xmm8
movsd  %xmm2,0x8(%rsp)
movsd  %xmm6,0xa0(%rsp)
movsd  %xmm9,0x90(%rsp)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  %xmm8,0x128(%rsp)
mulsd  %xmm13,%xmm8
xorpd  %xmm0,%xmm0
addsd  %xmm0,%xmm8
movapd %xmm1,%xmm7
mulsd  %xmm0,%xmm7
movsd  %xmm8,0x38(%rsp)
addsd  %xmm8,%xmm7
movsd  %xmm7,0x10(%rsp)
mov    %r13d,%ebp
xorpd  %xmm0,%xmm0
movsd  (%rsp),%xmm7
xchg   %ax,%ax
movsd  %xmm7,(%rsp)
movsd  %xmm0,0x58(%rsp)
movapd %xmm0,%xmm6
mulsd  %xmm13,%xmm6
addsd  %xmm5,%xmm6
movsd  %xmm6,0x28(%rsp)
movapd %xmm1,%xmm0
mulsd  %xmm5,%xmm0
movsd  %xmm0,0xa8(%rsp)
addsd  %xmm6,%xmm0
movsd  0x10(%rsp),%xmm1
call   1040 <f@plt>
mulsd  0xa0(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
call   1040 <f@plt>
mulsd  0x138(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm1
addsd  %xmm1,%xmm1
movsd  %xmm1,0x60(%rsp)
movsd  0x28(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
call   1040 <f@plt>
movsd  0xa0(%rsp),%xmm6
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
xorpd  %xmm5,%xmm5
movsd  0x30(%rsp),%xmm1
movsd  0x40(%rsp),%xmm13
movapd %xmm0,%xmm7
movsd  0x58(%rsp),%xmm0
mulsd  %xmm6,%xmm7
addsd  (%rsp),%xmm7
addsd  0x9f5(%rip),%xmm0
add    $0xffffffff,%ebp
jne    1500 <main+0x390>
movapd %xmm1,%xmm0
addsd  0x38(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
xorpd  %xmm0,%xmm0
mov    %r13d,%ebp
nopl   0x0(%rax,%rax,1)
movsd  %xmm7,(%rsp)
movsd  %xmm0,0x58(%rsp)
movapd %xmm0,%xmm1
mulsd  %xmm13,%xmm1
addsd  %xmm5,%xmm1
movsd  %xmm1,0x28(%rsp)
movsd  0xa8(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
call   1040 <f@plt>
mulsd  0x98(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
call   1040 <f@plt>
mulsd  0x130(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x28(%rsp),%xmm0
addsd  0x60(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
call   1040 <f@plt>
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
xorpd  %xmm5,%xmm5
movsd  0x40(%rsp),%xmm13
movapd %xmm0,%xmm7
movsd  0x58(%rsp),%xmm0
mulsd  0x98(%rsp),%xmm7
addsd  (%rsp),%xmm7
addsd  0x8e5(%rip),%xmm0
add    $0xffffffff,%ebp
jne    1630 <main+0x4c0>
movsd  0x38(%rsp),%xmm1
addsd  0x60(%rsp),%xmm1
xorpd  %xmm6,%xmm6
mov    %r13d,%ebp
movsd  %xmm1,0x38(%rsp)
nopl   (%rax)
movsd  %xmm7,(%rsp)
movsd  %xmm6,0x28(%rsp)
mulsd  %xmm13,%xmm6
addsd  %xmm5,%xmm6
movsd  %xmm6,0x10(%rsp)
movsd  0xa8(%rsp),%xmm0
addsd  %xmm6,%xmm0
call   1040 <f@plt>
mulsd  0x90(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  0x38(%rsp),%xmm1
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
call   1040 <f@plt>
mulsd  0x140(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x10(%rsp),%xmm0
addsd  0x60(%rsp),%xmm0
movsd  0x38(%rsp),%xmm1
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
call   1040 <f@plt>
movsd  0x28(%rsp),%xmm6
movsd  0x38(%rsp),%xmm1
movsd  0x90(%rsp),%xmm9
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm4
xorpd  %xmm5,%xmm5
movsd  0x40(%rsp),%xmm13
movapd %xmm0,%xmm7
movsd  0x7dd(%rip),%xmm0
mulsd  %xmm9,%xmm7
addsd  (%rsp),%xmm7
addsd  %xmm0,%xmm6
add    $0xffffffff,%ebp
jne    1740 <main+0x5d0>
movsd  %xmm7,(%rsp)
movsd  0x128(%rsp),%xmm8
addsd  %xmm0,%xmm8
add    $0x1,%r12d
cmp    %r13d,%r12d
movsd  0x30(%rsp),%xmm1
jne    14c0 <main+0x350>
add    $0x1,%r15
cmp    $0x3,%r15
movsd  0x50(%rsp),%xmm9
movsd  0x48(%rsp),%xmm8
jne    13c0 <main+0x250>
movsd  0xe8(%rsp),%xmm6
addsd  %xmm0,%xmm6
add    $0x1,%r14d
cmp    %r13d,%r14d
jne    13a0 <main+0x230>
add    $0x1,%rbx
cmp    $0x3,%rbx
jne    1370 <main+0x200>
movsd  0xd8(%rsp),%xmm6
addsd  %xmm0,%xmm6
mov    0x6c(%rsp),%eax
add    $0x1,%eax
cmp    %r13d,%eax
jne    1340 <main+0x1d0>
mov    0xd0(%rsp),%rax
add    $0x1,%rax
cmp    $0x3,%rax
jne    1300 <main+0x190>
movsd  0xb8(%rsp),%xmm6
addsd  %xmm0,%xmm6
movapd %xmm6,%xmm0
mov    0xc0(%rsp),%rbx
add    $0x1,%ebx
cmp    %r13d,%ebx
jne    12d0 <main+0x160>
jmp    1908 <main+0x798>
xorpd  %xmm0,%xmm0
movsd  %xmm0,(%rsp)
lea    0x148(%rsp),%rdi
xor    %esi,%esi
call   1060 <gettimeofday@plt>
mov    0x148(%rsp),%eax
sub    0x158(%rsp),%eax
imul   $0xf4240,%eax,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0x150(%rsp),%xmm0
subsd  0x160(%rsp),%xmm0
divsd  0x6d3(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
xor    %eax,%eax
call   1030 <clock@plt>
sub    0xb0(%rsp),%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
lea    0x6b7(%rip),%rdi
movsd  0x8(%rsp),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0x6bd(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
xor    %eax,%eax
add    $0x168,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.timeval = type { i32, double }
@.str = [26 x i8] c"%ld clocks (%lf seconds)\0A\00"
@.str.1 = [18 x i8] c"integral is: %lf\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca double
%7 = alloca double
%8 = alloca i32
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca [3 x double]
%13 = alloca i64
%14 = alloca %struct.timeval
%15 = alloca %struct.timeval
%16 = alloca i32
%17 = alloca i32
%18 = alloca double
%19 = alloca i32
%20 = alloca i32
%21 = alloca double
%22 = alloca i32
%23 = alloca i32
%24 = alloca double
%25 = alloca i32
%26 = alloca i32
%27 = alloca double
%28 = alloca i32
%29 = alloca i32
%30 = alloca double
%31 = alloca double
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store double 0.000000e+00, double* %6
store double 1.000000e+00, double* %7
%32 = load i32, i32* %4
%33 = icmp eq i32 %32, 2
%34 = zext i1 %33 to i32
%35 = call i32 @assert(i32 %34)
%36 = load i8**, i8*** %5
%37 = getelementptr inbounds i8*, i8** %36, i64 1
%38 = load i8*, i8** %37
%39 = call i32 @atoi(i8* %38)
store i32 %39, i32* %8
%40 = load double, double* %7
%41 = load double, double* %6
%42 = fsub double %40, %41
%43 = load i32, i32* %8
%44 = sitofp i32 %43 to double
%45 = fdiv double %42, %44
store double %45, double* %9
store double 0.000000e+00, double* %10
%46 = load double, double* %9
%47 = fdiv double %46, 2.000000e+00
store double %47, double* %11
%48 = load double, double* %11
%49 = fdiv double %48, 3.000000e+00
%50 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 0
store double %49, double* %50
%51 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 0
%52 = load double, double* %51
%53 = fmul double 4.000000e+00, %52
%54 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 1
store double %53, double* %54
%55 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 0
%56 = load double, double* %55
%57 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 2
store double %56, double* %57
%58 = call i64 (...) @clock()
store i64 %58, i64* %13
%59 = call i32 @gettimeofday(%struct.timeval* %14, i32* null)
%60 = call i32 @omp_set_num_threads(i32 16)
store i32 0, i32* %16
br label %61
61: ; preds = %219, %2
%62 = load i32, i32* %16
%63 = load i32, i32* %8
%64 = icmp slt i32 %62, %63
br i1 %64, label %65, label %222
65: ; preds = %61
store i32 0, i32* %17
br label %66
66: ; preds = %215, %65
%67 = load i32, i32* %17
%68 = icmp slt i32 %67, 3
br i1 %68, label %69, label %218
69: ; preds = %66
%70 = load double, double* %6
%71 = load i32, i32* %16
%72 = sitofp i32 %71 to double
%73 = load double, double* %9
%74 = call double @llvm.fmuladd.f64(double %72, double %73, double %70)
%75 = load i32, i32* %17
%76 = sitofp i32 %75 to double
%77 = load double, double* %11
%78 = call double @llvm.fmuladd.f64(double %76, double %77, double %74)
store double %78, double* %18
store i32 0, i32* %19
br label %79
79: ; preds = %211, %69
%80 = load i32, i32* %19
%81 = load i32, i32* %8
%82 = icmp slt i32 %80, %81
br i1 %82, label %83, label %214
83: ; preds = %79
store i32 0, i32* %20
br label %84
84: ; preds = %207, %83
%85 = load i32, i32* %20
%86 = icmp slt i32 %85, 3
br i1 %86, label %87, label %210
87: ; preds = %84
%88 = load double, double* %6
%89 = load i32, i32* %19
%90 = sitofp i32 %89 to double
%91 = load double, double* %9
%92 = call double @llvm.fmuladd.f64(double %90, double %91, double %88)
%93 = load i32, i32* %20
%94 = sitofp i32 %93 to double
%95 = load double, double* %11
%96 = call double @llvm.fmuladd.f64(double %94, double %95, double %92)
store double %96, double* %21
store i32 0, i32* %22
br label %97
97: ; preds = %203, %87
%98 = load i32, i32* %22
%99 = load i32, i32* %8
%100 = icmp slt i32 %98, %99
br i1 %100, label %101, label %206
101: ; preds = %97
store i32 0, i32* %23
br label %102
102: ; preds = %199, %101
%103 = load i32, i32* %23
%104 = icmp slt i32 %103, 3
br i1 %104, label %105, label %202
105: ; preds = %102
%106 = load double, double* %6
%107 = load i32, i32* %22
%108 = sitofp i32 %107 to double
%109 = load double, double* %9
%110 = call double @llvm.fmuladd.f64(double %108, double %109, double %106)
%111 = load i32, i32* %23
%112 = sitofp i32 %111 to double
%113 = load double, double* %11
%114 = call double @llvm.fmuladd.f64(double %112, double %113, double %110)
store double %114, double* %24
store i32 0, i32* %25
br label %115
115: ; preds = %195, %105
%116 = load i32, i32* %25
%117 = load i32, i32* %8
%118 = icmp slt i32 %116, %117
br i1 %118, label %119, label %198
119: ; preds = %115
store i32 0, i32* %26
br label %120
120: ; preds = %191, %119
%121 = load i32, i32* %26
%122 = icmp slt i32 %121, 3
br i1 %122, label %123, label %194
123: ; preds = %120
%124 = load double, double* %6
%125 = load i32, i32* %25
%126 = sitofp i32 %125 to double
%127 = load double, double* %9
%128 = call double @llvm.fmuladd.f64(double %126, double %127, double %124)
%129 = load i32, i32* %26
%130 = sitofp i32 %129 to double
%131 = load double, double* %11
%132 = call double @llvm.fmuladd.f64(double %130, double %131, double %128)
store double %132, double* %27
store i32 0, i32* %28
br label %133
133: ; preds = %187, %123
%134 = load i32, i32* %28
%135 = load i32, i32* %8
%136 = icmp slt i32 %134, %135
br i1 %136, label %137, label %190
137: ; preds = %133
store i32 0, i32* %29
br label %138
138: ; preds = %183, %137
%139 = load i32, i32* %29
%140 = icmp slt i32 %139, 3
br i1 %140, label %141, label %186
141: ; preds = %138
%142 = load double, double* %6
%143 = load i32, i32* %28
%144 = sitofp i32 %143 to double
%145 = load double, double* %9
%146 = call double @llvm.fmuladd.f64(double %144, double %145, double %142)
%147 = load i32, i32* %29
%148 = sitofp i32 %147 to double
%149 = load double, double* %11
%150 = call double @llvm.fmuladd.f64(double %148, double %149, double %146)
store double %150, double* %30
%151 = load i32, i32* %29
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 %152
%154 = load double, double* %153
%155 = load i32, i32* %26
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 %156
%158 = load double, double* %157
%159 = fmul double %154, %158
%160 = load i32, i32* %23
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 %161
%163 = load double, double* %162
%164 = fmul double %159, %163
%165 = load i32, i32* %20
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 %166
%168 = load double, double* %167
%169 = fmul double %164, %168
%170 = load i32, i32* %17
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 %171
%173 = load double, double* %172
%174 = fmul double %169, %173
%175 = load double, double* %30
%176 = load double, double* %27
%177 = load double, double* %24
%178 = load double, double* %21
%179 = load double, double* %18
%180 = call double @f(double %175, double %176, double %177, double %178, double %179)
%181 = load double, double* %10
%182 = call double @llvm.fmuladd.f64(double %174, double %180, double %181)
store double %182, double* %10
br label %183
183: ; preds = %141
%184 = load i32, i32* %29
%185 = add nsw i32 %184, 1
store i32 %185, i32* %29
br label %138
186: ; preds = %138
br label %187
187: ; preds = %186
%188 = load i32, i32* %28
%189 = add nsw i32 %188, 1
store i32 %189, i32* %28
br label %133
190: ; preds = %133
br label %191
191: ; preds = %190
%192 = load i32, i32* %26
%193 = add nsw i32 %192, 1
store i32 %193, i32* %26
br label %120
194: ; preds = %120
br label %195
195: ; preds = %194
%196 = load i32, i32* %25
%197 = add nsw i32 %196, 1
store i32 %197, i32* %25
br label %115
198: ; preds = %115
br label %199
199: ; preds = %198
%200 = load i32, i32* %23
%201 = add nsw i32 %200, 1
store i32 %201, i32* %23
br label %102
202: ; preds = %102
br label %203
203: ; preds = %202
%204 = load i32, i32* %22
%205 = add nsw i32 %204, 1
store i32 %205, i32* %22
br label %97
206: ; preds = %97
br label %207
207: ; preds = %206
%208 = load i32, i32* %20
%209 = add nsw i32 %208, 1
store i32 %209, i32* %20
br label %84
210: ; preds = %84
br label %211
211: ; preds = %210
%212 = load i32, i32* %19
%213 = add nsw i32 %212, 1
store i32 %213, i32* %19
br label %79
214: ; preds = %79
br label %215
215: ; preds = %214
%216 = load i32, i32* %17
%217 = add nsw i32 %216, 1
store i32 %217, i32* %17
br label %66
218: ; preds = %66
br label %219
219: ; preds = %218
%220 = load i32, i32* %16
%221 = add nsw i32 %220, 1
store i32 %221, i32* %16
br label %61
222: ; preds = %61
%223 = call i32 @gettimeofday(%struct.timeval* %15, i32* null)
%224 = getelementptr inbounds %struct.timeval, %struct.timeval* %15, i32 0, i32 0
%225 = load i32, i32* %224
%226 = getelementptr inbounds %struct.timeval, %struct.timeval* %14, i32 0, i32 0
%227 = load i32, i32* %226
%228 = sub i32 %225, %227
%229 = mul i32 %228, 1000000
%230 = uitofp i32 %229 to double
%231 = getelementptr inbounds %struct.timeval, %struct.timeval* %15, i32 0, i32 1
%232 = load double, double* %231
%233 = fadd double %230, %232
%234 = getelementptr inbounds %struct.timeval, %struct.timeval* %14, i32 0, i32 1
%235 = load double, double* %234
%236 = fsub double %233, %235
%237 = fdiv double %236, 1.000000e+06
store double %237, double* %31
%238 = call i64 (...) @clock()
%239 = load i64, i64* %13
%240 = sub nsw i64 %238, %239
store i64 %240, i64* %13
%241 = load i64, i64* %13
%242 = sitofp i64 %241 to double
%243 = load double, double* %31
%244 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), double %242, double %243)
%245 = load double, double* %10
%246 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.1, i64 0, i64 0), double %245)
ret i32 0
}

LLVM IR (-O2):
%struct.timeval = type { i32, double }
@.str = [26 x i8] c"%ld clocks (%lf seconds)\0A\00"
@.str.1 = [18 x i8] c"integral is: %lf\0A\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = alloca [3 x double]
%4 = alloca %struct.timeval
%5 = alloca %struct.timeval
%6 = icmp eq i32 %0, 2
%7 = zext i1 %6 to i32
%8 = tail call i32 @assert(i32 %7)
%9 = getelementptr inbounds i8*, i8** %1, i64 1
%10 = load i8*, i8** %9
%11 = tail call i32 @atoi(i8* %10)
%12 = sitofp i32 %11 to double
%13 = fdiv double 1.000000e+00, %12
%14 = fmul double %13, 5.000000e-01
%15 = bitcast [3 x double]* %3 to i8*
%16 = fdiv double %14, 3.000000e+00
%17 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 0
store double %16, double* %17
%18 = fmul double %16, 4.000000e+00
%19 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 1
store double %18, double* %19
%20 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 2
store double %16, double* %20
%21 = tail call i64 (...) @clock()
%22 = bitcast %struct.timeval* %4 to i8*
%23 = bitcast %struct.timeval* %5 to i8*
%24 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
%25 = tail call i32 @omp_set_num_threads(i32 16)
%26 = icmp sgt i32 %11, 0
br i1 %26, label %27, label %45
27: ; preds = %2
%28 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 0
%29 = load double, double* %28
%30 = fmul double %16, %29
%31 = fmul double %18, %29
%32 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 1
%33 = load double, double* %32
%34 = fmul double %16, %33
%35 = fmul double %18, %33
%36 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 2
%37 = load double, double* %36
%38 = fmul double %16, %37
%39 = fmul double %18, %37
br label %40
40: ; preds = %27, %67
%41 = phi double [ %192, %67 ], [ 0.000000e+00, %27 ]
%42 = phi i32 [ %68, %67 ], [ 0, %27 ]
%43 = sitofp i32 %42 to double
%44 = tail call double @llvm.fmuladd.f64(double %43, double %13, double 0.000000e+00)
br label %70
45: ; preds = %67, %2
%46 = phi double [ 0.000000e+00, %2 ], [ %192, %67 ]
%47 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%48 = getelementptr inbounds %struct.timeval, %struct.timeval* %5, i64 0, i32 0
%49 = load i32, i32* %48
%50 = getelementptr inbounds %struct.timeval, %struct.timeval* %4, i64 0, i32 0
%51 = load i32, i32* %50
%52 = sub i32 %49, %51
%53 = mul i32 %52, 1000000
%54 = uitofp i32 %53 to double
%55 = getelementptr inbounds %struct.timeval, %struct.timeval* %5, i64 0, i32 1
%56 = load double, double* %55
%57 = fadd double %56, %54
%58 = getelementptr inbounds %struct.timeval, %struct.timeval* %4, i64 0, i32 1
%59 = load double, double* %58
%60 = fsub double %57, %59
%61 = fdiv double %60, 1.000000e+06
%62 = tail call i64 (...) @clock()
%63 = sub nsw i64 %62, %21
%64 = sitofp i64 %63 to double
%65 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), double %64, double %61)
%66 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.1, i64 0, i64 0), double %46)
ret i32 0
67: ; preds = %83
%68 = add nuw nsw i32 %42, 1
%69 = icmp eq i32 %68, %11
br i1 %69, label %45, label %40
70: ; preds = %83, %40
%71 = phi i64 [ 0, %40 ], [ %84, %83 ]
%72 = phi double [ %41, %40 ], [ %192, %83 ]
%73 = trunc i64 %71 to i32
%74 = sitofp i32 %73 to double
%75 = tail call double @llvm.fmuladd.f64(double %74, double %14, double %44)
%76 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 %71
%77 = load double, double* %76
br label %78
78: ; preds = %70, %86
%79 = phi double [ %72, %70 ], [ %192, %86 ]
%80 = phi i32 [ 0, %70 ], [ %87, %86 ]
%81 = sitofp i32 %80 to double
%82 = tail call double @llvm.fmuladd.f64(double %81, double %13, double 0.000000e+00)
br label %89
83: ; preds = %86
%84 = add nuw nsw i64 %71, 1
%85 = icmp eq i64 %84, 3
br i1 %85, label %67, label %70
86: ; preds = %102
%87 = add nuw nsw i32 %80, 1
%88 = icmp eq i32 %87, %11
br i1 %88, label %83, label %78
89: ; preds = %102, %78
%90 = phi i64 [ 0, %78 ], [ %103, %102 ]
%91 = phi double [ %79, %78 ], [ %192, %102 ]
%92 = trunc i64 %90 to i32
%93 = sitofp i32 %92 to double
%94 = tail call double @llvm.fmuladd.f64(double %93, double %14, double %82)
%95 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 %90
%96 = load double, double* %95
br label %97
97: ; preds = %89, %105
%98 = phi double [ %91, %89 ], [ %192, %105 ]
%99 = phi i32 [ 0, %89 ], [ %106, %105 ]
%100 = sitofp i32 %99 to double
%101 = tail call double @llvm.fmuladd.f64(double %100, double %13, double 0.000000e+00)
br label %108
102: ; preds = %105
%103 = add nuw nsw i64 %90, 1
%104 = icmp eq i64 %103, 3
br i1 %104, label %86, label %89
105: ; preds = %140
%106 = add nuw nsw i32 %99, 1
%107 = icmp eq i32 %106, %11
br i1 %107, label %102, label %97
108: ; preds = %140, %97
%109 = phi i64 [ 0, %97 ], [ %141, %140 ]
%110 = phi double [ %98, %97 ], [ %192, %140 ]
%111 = trunc i64 %109 to i32
%112 = sitofp i32 %111 to double
%113 = tail call double @llvm.fmuladd.f64(double %112, double %14, double %101)
%114 = getelementptr inbounds [3 x double], [3 x double]* %3, i64 0, i64 %109
%115 = load double, double* %114
%116 = fmul double %30, %115
%117 = fmul double %116, %96
%118 = fmul double %117, %77
%119 = fmul double %31, %115
%120 = fmul double %119, %96
%121 = fmul double %120, %77
%122 = fmul double %34, %115
%123 = fmul double %122, %96
%124 = fmul double %123, %77
%125 = fmul double %35, %115
%126 = fmul double %125, %96
%127 = fmul double %126, %77
%128 = fmul double %38, %115
%129 = fmul double %128, %96
%130 = fmul double %129, %77
%131 = fmul double %39, %115
%132 = fmul double %131, %96
%133 = fmul double %132, %77
br label %134
134: ; preds = %108, %195
%135 = phi double [ %110, %108 ], [ %192, %195 ]
%136 = phi i32 [ 0, %108 ], [ %196, %195 ]
%137 = sitofp i32 %136 to double
%138 = tail call double @llvm.fmuladd.f64(double %137, double %13, double 0.000000e+00)
%139 = tail call double @llvm.fmuladd.f64(double %14, double 0.000000e+00, double %138)
br label %143
140: ; preds = %195
%141 = add nuw nsw i64 %109, 1
%142 = icmp eq i64 %141, 3
br i1 %142, label %105, label %108
143: ; preds = %134, %143
%144 = phi double [ %135, %134 ], [ %156, %143 ]
%145 = phi i32 [ 0, %134 ], [ %157, %143 ]
%146 = sitofp i32 %145 to double
%147 = tail call double @llvm.fmuladd.f64(double %146, double %13, double 0.000000e+00)
%148 = tail call double @llvm.fmuladd.f64(double %14, double 0.000000e+00, double %147)
%149 = tail call double @f(double %148, double %139, double %113, double %94, double %75)
%150 = tail call double @llvm.fmuladd.f64(double %118, double %149, double %144)
%151 = fadd double %14, %147
%152 = tail call double @f(double %151, double %139, double %113, double %94, double %75)
%153 = tail call double @llvm.fmuladd.f64(double %121, double %152, double %150)
%154 = tail call double @llvm.fmuladd.f64(double %14, double 2.000000e+00, double %147)
%155 = tail call double @f(double %154, double %139, double %113, double %94, double %75)
%156 = tail call double @llvm.fmuladd.f64(double %118, double %155, double %153)
%157 = add nuw nsw i32 %145, 1
%158 = icmp eq i32 %157, %11
br i1 %158, label %159, label %143
159: ; preds = %143
%160 = fadd double %14, %138
br label %161
161: ; preds = %161, %159
%162 = phi double [ %156, %159 ], [ %174, %161 ]
%163 = phi i32 [ 0, %159 ], [ %175, %161 ]
%164 = sitofp i32 %163 to double
%165 = tail call double @llvm.fmuladd.f64(double %164, double %13, double 0.000000e+00)
%166 = tail call double @llvm.fmuladd.f64(double %14, double 0.000000e+00, double %165)
%167 = tail call double @f(double %166, double %160, double %113, double %94, double %75)
%168 = tail call double @llvm.fmuladd.f64(double %124, double %167, double %162)
%169 = fadd double %14, %165
%170 = tail call double @f(double %169, double %160, double %113, double %94, double %75)
%171 = tail call double @llvm.fmuladd.f64(double %127, double %170, double %168)
%172 = tail call double @llvm.fmuladd.f64(double %14, double 2.000000e+00, double %165)
%173 = tail call double @f(double %172, double %160, double %113, double %94, double %75)
%174 = tail call double @llvm.fmuladd.f64(double %124, double %173, double %171)
%175 = add nuw nsw i32 %163, 1
%176 = icmp eq i32 %175, %11
br i1 %176, label %177, label %161
177: ; preds = %161
%178 = tail call double @llvm.fmuladd.f64(double %14, double 2.000000e+00, double %138)
br label %179
179: ; preds = %179, %177
%180 = phi double [ %174, %177 ], [ %192, %179 ]
%181 = phi i32 [ 0, %177 ], [ %193, %179 ]
%182 = sitofp i32 %181 to double
%183 = tail call double @llvm.fmuladd.f64(double %182, double %13, double 0.000000e+00)
%184 = tail call double @llvm.fmuladd.f64(double %14, double 0.000000e+00, double %183)
%185 = tail call double @f(double %184, double %178, double %113, double %94, double %75)
%186 = tail call double @llvm.fmuladd.f64(double %130, double %185, double %180)
%187 = fadd double %14, %183
%188 = tail call double @f(double %187, double %178, double %113, double %94, double %75)
%189 = tail call double @llvm.fmuladd.f64(double %133, double %188, double %186)
%190 = tail call double @llvm.fmuladd.f64(double %14, double 2.000000e+00, double %183)
%191 = tail call double @f(double %190, double %178, double %113, double %94, double %75)
%192 = tail call double @llvm.fmuladd.f64(double %130, double %191, double %189)
%193 = add nuw nsw i32 %181, 1
%194 = icmp eq i32 %193, %11
br i1 %194, label %195, label %179
195: ; preds = %179
%196 = add nuw nsw i32 %136, 1
%197 = icmp eq i32 %196, %11
br i1 %197, label %140, label %134
}