#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 */
scalar_t__ SphGenOh(double *, int, double, double, double);
int MakeAngularGrid_350(double (*pOut)[4]) {
  double a = 0, b = 0, v;
  int N = 0;
  v = 0.3006796749453936e-2;
  N += SphGenOh(&pOut[N][0], 0, a, b, v);
  v = 0.3050627745650771e-2;
  N += SphGenOh(&pOut[N][0], 2, a, b, v);
  a = 0.7068965463912316e+0;
  v = 0.1621104600288991e-2;
  N += SphGenOh(&pOut[N][0], 3, a, b, v);
  a = 0.4794682625712025e+0;
  v = 0.3005701484901752e-2;
  N += SphGenOh(&pOut[N][0], 3, a, b, v);
  a = 0.1927533154878019e+0;
  v = 0.2990992529653774e-2;
  N += SphGenOh(&pOut[N][0], 3, a, b, v);
  a = 0.6930357961327123e+0;
  v = 0.2982170644107595e-2;
  N += SphGenOh(&pOut[N][0], 3, a, b, v);
  a = 0.3608302115520091e+0;
  v = 0.2721564237310992e-2;
  N += SphGenOh(&pOut[N][0], 3, a, b, v);
  a = 0.6498486161496169e+0;
  v = 0.3033513795811141e-2;
  N += SphGenOh(&pOut[N][0], 3, a, b, v);
  a = 0.1932945013230339e+0;
  v = 0.3007949555218533e-2;
  N += SphGenOh(&pOut[N][0], 4, a, b, v);
  a = 0.3800494919899303e+0;
  v = 0.2881964603055307e-2;
  N += SphGenOh(&pOut[N][0], 4, a, b, v);
  a = 0.2899558825499574e+0;
  b = 0.7934537856582316e+0;
  v = 0.2958357626535696e-2;
  N += SphGenOh(&pOut[N][0], 5, a, b, v);
  a = 0.9684121455103957e-1;
  b = 0.8280801506686862e+0;
  v = 0.3036020026407088e-2;
  N += SphGenOh(&pOut[N][0], 5, a, b, v);
  a = 0.1833434647041659e+0;
  b = 0.9074658265305127e+0;
  v = 0.2832187403926303e-2;
  N += SphGenOh(&pOut[N][0], 5, a, b, v);
  return N;
}


x86 assembly (clang, -O0):
<MakeAngularGrid_350>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
movl   $0x0,-0x24(%rbp)
movsd  0xf95(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
xor    %esi,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xf4e(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x2,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xf04(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xeef(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xea5(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xe90(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xe46(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xe31(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xde7(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xdd2(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xd88(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xd73(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xd29(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xd14(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xcca(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xcb5(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x4,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xc6b(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xc56(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x4,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xc0c(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xbf7(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xbe2(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x5,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xb98(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xb83(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xb6e(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x5,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
movsd  0xb24(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xb0f(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xafa(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x5,%rax
add    %rax,%rdi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
mov    $0x5,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rcx
movslq -0x24(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<MakeAngularGrid_350>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
mov    %rdi,%r14
movsd  0xedd(%rip),%xmm2
xorps  %xmm0,%xmm0
xorps  %xmm1,%xmm1
xor    %esi,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%r15
movslq %r15d,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xec3(%rip),%xmm2
xorps  %xmm0,%xmm0
xorps  %xmm1,%xmm1
mov    $0x2,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%r12
add    %r15,%r12
movslq %r12d,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xea3(%rip),%xmm0
movsd  0xea3(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rbx
add    %r12,%rbx
movslq %ebx,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xe86(%rip),%xmm0
movsd  0xe86(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%r15
add    %rbx,%r15
movslq %r15d,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xe69(%rip),%xmm0
movsd  0xe69(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rbx
add    %r15,%rbx
movslq %ebx,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xe4c(%rip),%xmm0
movsd  0xe4c(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%r15
add    %rbx,%r15
movslq %r15d,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xe2f(%rip),%xmm0
movsd  0xe2f(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rbx
add    %r15,%rbx
movslq %ebx,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xe12(%rip),%xmm0
movsd  0xe12(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x3,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%r15
add    %rbx,%r15
movslq %r15d,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xdf5(%rip),%xmm0
movsd  0xdf5(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x4,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rbx
add    %r15,%rbx
movslq %ebx,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xdd8(%rip),%xmm0
movsd  0xdd8(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x4,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%r15
add    %rbx,%r15
movslq %r15d,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xdbb(%rip),%xmm0
movsd  0xdbb(%rip),%xmm1
movsd  0xdbb(%rip),%xmm2
mov    $0x5,%esi
call   1030 <SphGenOh@plt>
mov    %rax,%rbx
add    %r15,%rbx
movslq %ebx,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xda1(%rip),%xmm0
movsd  0xda1(%rip),%xmm1
movsd  0xda1(%rip),%xmm2
mov    $0x5,%esi
call   1030 <SphGenOh@plt>
add    %rbx,%rax
movslq %eax,%rbx
mov    %rbx,%rdi
shl    $0x5,%rdi
add    %r14,%rdi
movsd  0xd87(%rip),%xmm0
movsd  0xd87(%rip),%xmm1
movsd  0xd87(%rip),%xmm2
mov    $0x5,%esi
call   1030 <SphGenOh@plt>
add    %ebx,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define i32 @MakeAngularGrid_350([4 x double]* %0) {
%2 = alloca [4 x double]*
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca i32
store [4 x double]* %0, [4 x double]** %2
store double 0.000000e+00, double* %3
store double 0.000000e+00, double* %4
store i32 0, i32* %6
store double 0x3F68A1B5B68C4721, double* %5
%7 = load [4 x double]*, [4 x double]** %2
%8 = load i32, i32* %6
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds [4 x double], [4 x double]* %7, i64 %9
%11 = getelementptr inbounds [4 x double], [4 x double]* %10, i64 0, i64 0
%12 = load double, double* %3
%13 = load double, double* %4
%14 = load double, double* %5
%15 = call i64 @SphGenOh(double* %11, i32 0, double %12, double %13, double %14)
%16 = load i32, i32* %6
%17 = sext i32 %16 to i64
%18 = add nsw i64 %17, %15
%19 = trunc i64 %18 to i32
store i32 %19, i32* %6
store double 0x3F68FDA14CCB7DD1, double* %5
%20 = load [4 x double]*, [4 x double]** %2
%21 = load i32, i32* %6
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [4 x double], [4 x double]* %20, i64 %22
%24 = getelementptr inbounds [4 x double], [4 x double]* %23, i64 0, i64 0
%25 = load double, double* %3
%26 = load double, double* %4
%27 = load double, double* %5
%28 = call i64 @SphGenOh(double* %24, i32 2, double %25, double %26, double %27)
%29 = load i32, i32* %6
%30 = sext i32 %29 to i64
%31 = add nsw i64 %30, %28
%32 = trunc i64 %31 to i32
store i32 %32, i32* %6
store double 0x3FE69EE5818CFB62, double* %3
store double 0x3F5A8F67CF76F863, double* %5
%33 = load [4 x double]*, [4 x double]** %2
%34 = load i32, i32* %6
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds [4 x double], [4 x double]* %33, i64 %35
%37 = getelementptr inbounds [4 x double], [4 x double]* %36, i64 0, i64 0
%38 = load double, double* %3
%39 = load double, double* %4
%40 = load double, double* %5
%41 = call i64 @SphGenOh(double* %37, i32 3, double %38, double %39, double %40)
%42 = load i32, i32* %6
%43 = sext i32 %42 to i64
%44 = add nsw i64 %43, %41
%45 = trunc i64 %44 to i32
store i32 %45, i32* %6
store double 0x3FDEAF9BA6CDA5FB, double* %3
store double 0x3F689F69B288BCF4, double* %5
%46 = load [4 x double]*, [4 x double]** %2
%47 = load i32, i32* %6
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [4 x double], [4 x double]* %46, i64 %48
%50 = getelementptr inbounds [4 x double], [4 x double]* %49, i64 0, i64 0
%51 = load double, double* %3
%52 = load double, double* %4
%53 = load double, double* %5
%54 = call i64 @SphGenOh(double* %50, i32 3, double %51, double %52, double %53)
%55 = load i32, i32* %6
%56 = sext i32 %55 to i64
%57 = add nsw i64 %56, %54
%58 = trunc i64 %57 to i32
store i32 %58, i32* %6
store double 0x3FC8AC24011B9B62, double* %3
store double 0x3F688090E31E4159, double* %5
%59 = load [4 x double]*, [4 x double]** %2
%60 = load i32, i32* %6
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [4 x double], [4 x double]* %59, i64 %61
%63 = getelementptr inbounds [4 x double], [4 x double]* %62, i64 0, i64 0
%64 = load double, double* %3
%65 = load double, double* %4
%66 = load double, double* %5
%67 = call i64 @SphGenOh(double* %63, i32 3, double %64, double %65, double %66)
%68 = load i32, i32* %6
%69 = sext i32 %68 to i64
%70 = add nsw i64 %69, %67
%71 = trunc i64 %70 to i32
store i32 %71, i32* %6
store double 0x3FE62D5967EB1D44, double* %3
store double 0x3F686E10AC66AC65, double* %5
%72 = load [4 x double]*, [4 x double]** %2
%73 = load i32, i32* %6
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [4 x double], [4 x double]* %72, i64 %74
%76 = getelementptr inbounds [4 x double], [4 x double]* %75, i64 0, i64 0
%77 = load double, double* %3
%78 = load double, double* %4
%79 = load double, double* %5
%80 = call i64 @SphGenOh(double* %76, i32 3, double %77, double %78, double %79)
%81 = load i32, i32* %6
%82 = sext i32 %81 to i64
%83 = add nsw i64 %82, %80
%84 = trunc i64 %83 to i32
store i32 %84, i32* %6
store double 0x3FD717D7998193B6, double* %3
store double 0x3F664B88AC95354E, double* %5
%85 = load [4 x double]*, [4 x double]** %2
%86 = load i32, i32* %6
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [4 x double], [4 x double]* %85, i64 %87
%89 = getelementptr inbounds [4 x double], [4 x double]* %88, i64 0, i64 0
%90 = load double, double* %3
%91 = load double, double* %4
%92 = load double, double* %5
%93 = call i64 @SphGenOh(double* %89, i32 3, double %90, double %91, double %92)
%94 = load i32, i32* %6
%95 = sext i32 %94 to i64
%96 = add nsw i64 %95, %93
%97 = trunc i64 %96 to i32
store i32 %97, i32* %6
store double 0x3FE4CB8F5336D4AE, double* %3
store double 0x3F68D9BD51706CA1, double* %5
%98 = load [4 x double]*, [4 x double]** %2
%99 = load i32, i32* %6
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds [4 x double], [4 x double]* %98, i64 %100
%102 = getelementptr inbounds [4 x double], [4 x double]* %101, i64 0, i64 0
%103 = load double, double* %3
%104 = load double, double* %4
%105 = load double, double* %5
%106 = call i64 @SphGenOh(double* %102, i32 3, double %103, double %104, double %105)
%107 = load i32, i32* %6
%108 = sext i32 %107 to i64
%109 = add nsw i64 %108, %106
%110 = trunc i64 %109 to i32
store i32 %110, i32* %6
store double 0x3FC8BDDFCCD6EB6B, double* %3
store double 0x3F68A4209EF73EDE, double* %5
%111 = load [4 x double]*, [4 x double]** %2
%112 = load i32, i32* %6
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds [4 x double], [4 x double]* %111, i64 %113
%115 = getelementptr inbounds [4 x double], [4 x double]* %114, i64 0, i64 0
%116 = load double, double* %3
%117 = load double, double* %4
%118 = load double, double* %5
%119 = call i64 @SphGenOh(double* %115, i32 4, double %116, double %117, double %118)
%120 = load i32, i32* %6
%121 = sext i32 %120 to i64
%122 = add nsw i64 %121, %119
%123 = trunc i64 %122 to i32
store i32 %123, i32* %6
store double 0x3FD852BB1ABD5292, double* %3
store double 0x3F679BEAF6FCBDAE, double* %5
%124 = load [4 x double]*, [4 x double]** %2
%125 = load i32, i32* %6
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds [4 x double], [4 x double]* %124, i64 %126
%128 = getelementptr inbounds [4 x double], [4 x double]* %127, i64 0, i64 0
%129 = load double, double* %3
%130 = load double, double* %4
%131 = load double, double* %5
%132 = call i64 @SphGenOh(double* %128, i32 4, double %129, double %130, double %131)
%133 = load i32, i32* %6
%134 = sext i32 %133 to i64
%135 = add nsw i64 %134, %132
%136 = trunc i64 %135 to i32
store i32 %136, i32* %6
store double 0x3FD28EA31E356EBE, double* %3
store double 0x3FE963F931894392, double* %4
store double 0x3F683C20282FDDA7, double* %5
%137 = load [4 x double]*, [4 x double]** %2
%138 = load i32, i32* %6
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds [4 x double], [4 x double]* %137, i64 %139
%141 = getelementptr inbounds [4 x double], [4 x double]* %140, i64 0, i64 0
%142 = load double, double* %3
%143 = load double, double* %4
%144 = load double, double* %5
%145 = call i64 @SphGenOh(double* %141, i32 5, double %142, double %143, double %144)
%146 = load i32, i32* %6
%147 = sext i32 %146 to i64
%148 = add nsw i64 %147, %145
%149 = trunc i64 %148 to i32
store i32 %149, i32* %6
store double 0x3FB8CA95F966D181, double* %3
store double 0x3FEA7FA1F1B2D71F, double* %4
store double 0x3F68DEFED72640A6, double* %5
%150 = load [4 x double]*, [4 x double]** %2
%151 = load i32, i32* %6
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds [4 x double], [4 x double]* %150, i64 %152
%154 = getelementptr inbounds [4 x double], [4 x double]* %153, i64 0, i64 0
%155 = load double, double* %3
%156 = load double, double* %4
%157 = load double, double* %5
%158 = call i64 @SphGenOh(double* %154, i32 5, double %155, double %156, double %157)
%159 = load i32, i32* %6
%160 = sext i32 %159 to i64
%161 = add nsw i64 %160, %158
%162 = trunc i64 %161 to i32
store i32 %162, i32* %6
store double 0x3FC777CC746B7C0A, double* %3
store double 0x3FED09F5C5E5F508, double* %4
store double 0x3F67338708D50BD2, double* %5
%163 = load [4 x double]*, [4 x double]** %2
%164 = load i32, i32* %6
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds [4 x double], [4 x double]* %163, i64 %165
%167 = getelementptr inbounds [4 x double], [4 x double]* %166, i64 0, i64 0
%168 = load double, double* %3
%169 = load double, double* %4
%170 = load double, double* %5
%171 = call i64 @SphGenOh(double* %167, i32 5, double %168, double %169, double %170)
%172 = load i32, i32* %6
%173 = sext i32 %172 to i64
%174 = add nsw i64 %173, %171
%175 = trunc i64 %174 to i32
store i32 %175, i32* %6
%176 = load i32, i32* %6
ret i32 %176
}

LLVM IR (-O2):
define i32 @MakeAngularGrid_350([4 x double]* %0) {
%2 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 0, i64 0
%3 = tail call i64 @SphGenOh(double* %2, i32 0, double 0.000000e+00, double 0.000000e+00, double 0x3F68A1B5B68C4721)
%4 = shl i64 %3, 32
%5 = ashr exact i64 %4, 32
%6 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %5, i64 0
%7 = tail call i64 @SphGenOh(double* %6, i32 2, double 0.000000e+00, double 0.000000e+00, double 0x3F68FDA14CCB7DD1)
%8 = add i64 %7, %3
%9 = shl i64 %8, 32
%10 = ashr exact i64 %9, 32
%11 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %10, i64 0
%12 = tail call i64 @SphGenOh(double* %11, i32 3, double 0x3FE69EE5818CFB62, double 0.000000e+00, double 0x3F5A8F67CF76F863)
%13 = add i64 %8, %12
%14 = shl i64 %13, 32
%15 = ashr exact i64 %14, 32
%16 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %15, i64 0
%17 = tail call i64 @SphGenOh(double* %16, i32 3, double 0x3FDEAF9BA6CDA5FB, double 0.000000e+00, double 0x3F689F69B288BCF4)
%18 = add i64 %13, %17
%19 = shl i64 %18, 32
%20 = ashr exact i64 %19, 32
%21 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %20, i64 0
%22 = tail call i64 @SphGenOh(double* %21, i32 3, double 0x3FC8AC24011B9B62, double 0.000000e+00, double 0x3F688090E31E4159)
%23 = add i64 %18, %22
%24 = shl i64 %23, 32
%25 = ashr exact i64 %24, 32
%26 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %25, i64 0
%27 = tail call i64 @SphGenOh(double* %26, i32 3, double 0x3FE62D5967EB1D44, double 0.000000e+00, double 0x3F686E10AC66AC65)
%28 = add i64 %23, %27
%29 = shl i64 %28, 32
%30 = ashr exact i64 %29, 32
%31 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %30, i64 0
%32 = tail call i64 @SphGenOh(double* %31, i32 3, double 0x3FD717D7998193B6, double 0.000000e+00, double 0x3F664B88AC95354E)
%33 = add i64 %28, %32
%34 = shl i64 %33, 32
%35 = ashr exact i64 %34, 32
%36 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %35, i64 0
%37 = tail call i64 @SphGenOh(double* %36, i32 3, double 0x3FE4CB8F5336D4AE, double 0.000000e+00, double 0x3F68D9BD51706CA1)
%38 = add i64 %33, %37
%39 = shl i64 %38, 32
%40 = ashr exact i64 %39, 32
%41 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %40, i64 0
%42 = tail call i64 @SphGenOh(double* %41, i32 4, double 0x3FC8BDDFCCD6EB6B, double 0.000000e+00, double 0x3F68A4209EF73EDE)
%43 = add i64 %38, %42
%44 = shl i64 %43, 32
%45 = ashr exact i64 %44, 32
%46 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %45, i64 0
%47 = tail call i64 @SphGenOh(double* %46, i32 4, double 0x3FD852BB1ABD5292, double 0.000000e+00, double 0x3F679BEAF6FCBDAE)
%48 = add i64 %43, %47
%49 = shl i64 %48, 32
%50 = ashr exact i64 %49, 32
%51 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %50, i64 0
%52 = tail call i64 @SphGenOh(double* %51, i32 5, double 0x3FD28EA31E356EBE, double 0x3FE963F931894392, double 0x3F683C20282FDDA7)
%53 = add i64 %48, %52
%54 = shl i64 %53, 32
%55 = ashr exact i64 %54, 32
%56 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %55, i64 0
%57 = tail call i64 @SphGenOh(double* %56, i32 5, double 0x3FB8CA95F966D181, double 0x3FEA7FA1F1B2D71F, double 0x3F68DEFED72640A6)
%58 = add i64 %53, %57
%59 = shl i64 %58, 32
%60 = ashr exact i64 %59, 32
%61 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 %60, i64 0
%62 = tail call i64 @SphGenOh(double* %61, i32 5, double 0x3FC777CC746B7C0A, double 0x3FED09F5C5E5F508, double 0x3F67338708D50BD2)
%63 = add i64 %58, %62
%64 = trunc i64 %63 to i32
ret i32 %64
}