#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 log10(double);
double pow(double, double);
void gas_acc(int *n, int type[], double *alpha, double a[], double *L,
             double *M, double *k1, double Mp[], double *k2, double *fg,
             double Mg[], double *dt, double Mc[]) {
  int i;
  double Mg_vis, Mg_th, tau_KH, dM_disk, dM, fgap;
  for (i = 0; i < *n; i++) {
    if (type[i] == 1 || type[i] == 2) {
      Mg_vis = 30.0 * (*alpha / 1.0e-3) * pow(a[i], 0.5) *
               pow(*L / 3.839e33, 0.25) * 5.97258e27;
      Mg_th = 0.95e3 * pow(a[i], 0.75) * pow(*L / 3.839e33, 3.0 / 8.0) *
              pow(*M / 1.9884e33, -0.5) * 5.97258e27;
      tau_KH = pow(10.0, *k1) * pow(Mp[i] / 5.97258e27, -(*k2));
      dM_disk = 3.0e-9 * (*fg) * (*alpha / 1.0e-3) * (*M);
      if (Mp[i] / tau_KH < dM_disk)
        dM = Mp[i] / tau_KH;
      else
        dM = dM_disk;
      if (Mp[i] < Mg_vis)
        fgap = 1.0;
      else if (Mp[i] > Mg_th)
        fgap = 0.0;
      else
        fgap = (log10(Mp[i]) - log10(Mg_vis)) / (log10(Mg_th) - log10(Mg_vis));
      Mg[i] += (*dt) * fgap * dM;
      Mp[i] = Mc[i] + Mg[i];
      if (Mp[i] > Mg_vis)
        type[i] = 2;
      if (Mp[i] > Mg_th) {
        Mp[i] = Mg_th;
        Mg[i] = Mp[i] - Mc[i];
        type[i] = 3;
      }
    }
  }
}


x86 assembly (clang, -O0):
<gas_acc>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x8(%rbp),%rcx
cmp    (%rcx),%eax
jge    1576 <gas_acc+0x456>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
je     1199 <gas_acc+0x79>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x2,(%rax,%rcx,4)
jne    1563 <gas_acc+0x443>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0xe57(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xeab(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xe82(%rip),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xe36(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xe42(%rip),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0xde6(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xe00(%rip),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  0xde8(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xdc7(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xdb3(%rip),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xd85(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd71(%rip),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xd48(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0xd37(%rip),%xmm0
call   1030 <pow@plt>
movsd  %xmm0,-0x70(%rbp)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd10(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x28(%rbp),%rax
movsd  0xcc3(%rip),%xmm0
mulsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0xca7(%rip),%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
divsd  -0x50(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    13ab <gas_acc+0x28b>
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    13b5 <gas_acc+0x295>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    13e3 <gas_acc+0x2c3>
movsd  0xc8f(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1484 <gas_acc+0x364>
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    1408 <gas_acc+0x2e8>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    147f <gas_acc+0x35f>
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1040 <log10@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
call   1040 <log10@plt>
movaps %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
call   1040 <log10@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
call   1040 <log10@plt>
movsd  -0xa0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x98(%rbp),%xmm0
ff
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1484 <gas_acc+0x364>
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mov    0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x40(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    14fe <gas_acc+0x3de>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x2,(%rax,%rcx,4)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    155e <gas_acc+0x43e>
movsd  -0x48(%rbp),%xmm0
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x40(%rbp),%rax
movslq -0x34(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x3,(%rax,%rcx,4)
jmp    1563 <gas_acc+0x443>
jmp    1568 <gas_acc+0x448>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1166 <gas_acc+0x46>
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gas_acc>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r9,0x58(%rsp)
mov    %r8,0x50(%rsp)
mov    %rcx,0x48(%rsp)
mov    %rdx,0x40(%rsp)
cmpl   $0x0,(%rdi)
jle    1443 <gas_acc+0x323>
mov    %rsi,%r13
mov    0xa8(%rsp),%rbx
xor    %r14d,%r14d
mov    %rdi,0x38(%rsp)
mov    0x40(%rsp),%r12
mov    0x50(%rsp),%rbp
jmp    1180 <gas_acc+0x60>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r14
movslq (%rdi),%rax
cmp    %rax,%r14
jge    1443 <gas_acc+0x323>
mov    0x0(%r13,%r14,4),%eax
add    $0xffffffff,%eax
cmp    $0x1,%eax
ja     1170 <gas_acc+0x50>
movsd  (%r12),%xmm1
movsd  0xe65(%rip),%xmm0
divsd  %xmm0,%xmm1
mulsd  0xe61(%rip),%xmm1
movsd  %xmm1,(%rsp)
mov    %rbx,%r15
mov    0x48(%rsp),%rbx
movsd  (%rbx,%r14,8),%xmm0
movsd  0xe4e(%rip),%xmm1
call   1030 <pow@plt>
mulsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x0(%rbp),%xmm0
movsd  0xe3a(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xe36(%rip),%xmm1
call   1030 <pow@plt>
movapd %xmm0,%xmm1
mulsd  (%rsp),%xmm1
movsd  0xe28(%rip),%xmm0
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  (%rbx,%r14,8),%xmm0
mov    %r15,%rbx
movsd  0xe15(%rip),%xmm1
call   1030 <pow@plt>
mulsd  0xe10(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x0(%rbp),%xmm0
divsd  0xdde(%rip),%xmm0
movsd  0xdfe(%rip),%xmm1
call   1030 <pow@plt>
mulsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
mov    0x58(%rsp),%r15
movsd  (%r15),%xmm0
divsd  0xde5(%rip),%xmm0
movsd  0xde5(%rip),%xmm1
call   1030 <pow@plt>
mulsd  (%rsp),%xmm0
mulsd  0xdab(%rip),%xmm0
movsd  %xmm0,(%rsp)
mov    0xa0(%rsp),%rax
movsd  (%rax),%xmm1
movsd  0xdc2(%rip),%xmm0
call   1030 <pow@plt>
movsd  %xmm0,0x60(%rsp)
movsd  (%rbx,%r14,8),%xmm0
divsd  0xd79(%rip),%xmm0
mov    0xb0(%rsp),%rax
movsd  (%rax),%xmm1
xorps  0xdae(%rip),%xmm1
call   1030 <pow@plt>
mov    0xb8(%rsp),%rax
movsd  (%rax),%xmm1
mulsd  0xd85(%rip),%xmm1
movsd  (%r12),%xmm3
divsd  0xd17(%rip),%xmm3
mulsd  %xmm1,%xmm3
movsd  0x8(%rsp),%xmm1
mulsd  (%r15),%xmm3
movapd %xmm0,%xmm6
movsd  (%rbx,%r14,8),%xmm5
ucomisd %xmm5,%xmm1
movsd  0xd5a(%rip),%xmm4
ja     13a6 <gas_acc+0x286>
xorpd  %xmm4,%xmm4
ucomisd (%rsp),%xmm5
ja     13a6 <gas_acc+0x286>
movapd %xmm5,%xmm0
movsd  %xmm3,0x30(%rsp)
movsd  %xmm5,0x28(%rsp)
movsd  %xmm6,0x20(%rsp)
call   1040 <log10@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1040 <log10@plt>
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1040 <log10@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x8(%rsp),%xmm0
call   1040 <log10@plt>
movsd  0x20(%rsp),%xmm6
movsd  0x28(%rsp),%xmm5
movsd  0x10(%rsp),%xmm4
movsd  0x30(%rsp),%xmm3
movsd  0x8(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
subsd  %xmm0,%xmm2
divsd  %xmm2,%xmm4
movsd  (%rsp),%xmm0
movsd  0x60(%rsp),%xmm2
mulsd  %xmm6,%xmm2
divsd  %xmm2,%xmm5
mov    0xc8(%rsp),%rax
mulsd  (%rax),%xmm4
minsd  %xmm3,%xmm5
mulsd  %xmm5,%xmm4
mov    0xc0(%rsp),%rax
addsd  (%rax,%r14,8),%xmm4
movsd  %xmm4,(%rax,%r14,8)
mov    0xd0(%rsp),%rax
addsd  (%rax,%r14,8),%xmm4
movsd  %xmm4,(%rbx,%r14,8)
ucomisd %xmm1,%xmm4
jbe    1404 <gas_acc+0x2e4>
movl   $0x2,0x0(%r13,%r14,4)
ucomisd %xmm0,%xmm4
mov    0x38(%rsp),%rdi
jbe    1170 <gas_acc+0x50>
movsd  %xmm0,(%rbx,%r14,8)
mov    0xd0(%rsp),%rax
subsd  (%rax,%r14,8),%xmm0
mov    0xc0(%rsp),%rax
movsd  %xmm0,(%rax,%r14,8)
movl   $0x3,0x0(%r13,%r14,4)
jmp    1170 <gas_acc+0x50>
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @gas_acc(i32* nocapture %0, i32* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture %5, double* nocapture %6, double* nocapture %7, double* nocapture %8, double* nocapture %9, double* nocapture %10, double* nocapture %11, double* nocapture %12) {
%14 = load i32, i32* %0
%15 = icmp sgt i32 %14, 0
br i1 %15, label %16, label %100
16: ; preds = %13, %95
%17 = phi i64 [ %96, %95 ], [ 0, %13 ]
%18 = getelementptr inbounds i32, i32* %1, i64 %17
%19 = load i32, i32* %18
%20 = add i32 %19, -1
%21 = icmp ult i32 %20, 2
br i1 %21, label %22, label %95
22: ; preds = %16
%23 = load double, double* %2
%24 = fdiv double %23, 1.000000e-03
%25 = fmul double %24, 3.000000e+01
%26 = getelementptr inbounds double, double* %3, i64 %17
%27 = load double, double* %26
%28 = tail call double @pow(double %27, double 5.000000e-01)
%29 = fmul double %25, %28
%30 = load double, double* %4
%31 = fdiv double %30, 3.839000e+33
%32 = tail call double @pow(double %31, double 2.500000e-01)
%33 = fmul double %29, %32
%34 = fmul double %33, 5.972580e+27
%35 = load double, double* %26
%36 = tail call double @pow(double %35, double 7.500000e-01)
%37 = fmul double %36, 9.500000e+02
%38 = load double, double* %4
%39 = fdiv double %38, 3.839000e+33
%40 = tail call double @pow(double %39, double 3.750000e-01)
%41 = fmul double %37, %40
%42 = load double, double* %5
%43 = fdiv double %42, 1.988400e+33
%44 = tail call double @pow(double %43, double -5.000000e-01)
%45 = fmul double %41, %44
%46 = fmul double %45, 5.972580e+27
%47 = load double, double* %6
%48 = tail call double @pow(double 1.000000e+01, double %47)
%49 = getelementptr inbounds double, double* %7, i64 %17
%50 = load double, double* %49
%51 = fdiv double %50, 5.972580e+27
%52 = load double, double* %8
%53 = fneg double %52
%54 = tail call double @pow(double %51, double %53)
%55 = fmul double %48, %54
%56 = load double, double* %9
%57 = fmul double %56, 3.000000e-09
%58 = load double, double* %2
%59 = fdiv double %58, 1.000000e-03
%60 = fmul double %57, %59
%61 = load double, double* %5
%62 = fmul double %61, %60
%63 = load double, double* %49
%64 = fdiv double %63, %55
%65 = fcmp olt double %64, %62
%66 = select i1 %65, double %64, double %62
%67 = fcmp olt double %63, %34
br i1 %67, label %78, label %68
68: ; preds = %22
%69 = fcmp ogt double %63, %46
br i1 %69, label %78, label %70
70: ; preds = %68
%71 = tail call double @log10(double %63)
%72 = tail call double @log10(double %34)
%73 = fsub double %71, %72
%74 = tail call double @log10(double %46)
%75 = tail call double @log10(double %34)
%76 = fsub double %74, %75
%77 = fdiv double %73, %76
br label %78
78: ; preds = %68, %22, %70
%79 = phi double [ %77, %70 ], [ 1.000000e+00, %22 ], [ 0.000000e+00, %68 ]
%80 = load double, double* %11
%81 = fmul double %79, %80
%82 = getelementptr inbounds double, double* %10, i64 %17
%83 = load double, double* %82
%84 = tail call double @llvm.fmuladd.f64(double %81, double %66, double %83)
store double %84, double* %82
%85 = getelementptr inbounds double, double* %12, i64 %17
%86 = load double, double* %85
%87 = fadd double %84, %86
store double %87, double* %49
%88 = fcmp ogt double %87, %34
br i1 %88, label %89, label %90
89: ; preds = %78
store i32 2, i32* %18
br label %90
90: ; preds = %89, %78
%91 = fcmp ogt double %87, %46
br i1 %91, label %92, label %95
92: ; preds = %90
store double %46, double* %49
%93 = load double, double* %85
%94 = fsub double %46, %93
store double %94, double* %82
store i32 3, i32* %18
br label %95
95: ; preds = %16, %92, %90
%96 = add nuw nsw i64 %17, 1
%97 = load i32, i32* %0
%98 = sext i32 %97 to i64
%99 = icmp slt i64 %96, %98
br i1 %99, label %16, label %100
100: ; preds = %95, %13
ret void
}