#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 */
int /*<<< orphan*/ cdoAbort(char *, double);
void vert_gen_weights(int expol, int nlev1, double *lev1, int nlev2,
                      double *lev2, int *lev_idx1, int *lev_idx2,
                      double *lev_wgt1, double *lev_wgt2) {
  int i1, i2;
  int idx1 = 0, idx2 = 0;
  double val1, val2 = 0;
  for (i2 = 0; i2 < nlev2; ++i2) {
    for (i1 = 1; i1 < nlev1; ++i1) {
      if (lev1[i1 - 1] < lev1[i1]) {
        idx1 = i1 - 1;
        idx2 = i1;
      } else {
        idx1 = i1;
        idx2 = i1 - 1;
      }
      val1 = lev1[idx1];
      val2 = lev1[idx2];
      if (lev2[i2] > val1 && lev2[i2] <= val2)
        break;
    }
    if (i1 == nlev1)
      cdoAbort("Level %g not found!", lev2[i2]);
    else {
      if (i1 - 1 == 0) {
        lev_idx1[i2] = 1;
        lev_idx2[i2] = 1;
        lev_wgt1[i2] = 0;
        if (expol || (!(lev2[i2] < val2 || val2 < lev2[i2])))
          lev_wgt2[i2] = 1;
        else
          lev_wgt2[i2] = 0;
      } else if (i1 == nlev1 - 1) {
        lev_idx1[i2] = nlev1 - 2;
        lev_idx2[i2] = nlev1 - 2;
        if (expol || (!(lev2[i2] < val2 || val2 < lev2[i2])))
          lev_wgt1[i2] = 1;
        else
          lev_wgt1[i2] = 0;
        lev_wgt2[i2] = 0;
      } else {
        lev_idx1[i2] = idx1;
        lev_idx2[i2] = idx2;
        lev_wgt1[i2] = (lev1[idx2] - lev2[i2]) / (lev1[idx2] - lev1[idx1]);
        lev_wgt2[i2] = (lev2[i2] - lev1[idx1]) / (lev1[idx2] - lev1[idx1]);
      }
      lev_idx1[i2]--;
      lev_idx2[i2]--;
    }
  }
}


x86 assembly (clang, -O0):
<vert_gen_weights>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    149d <vert_gen_weights+0x38d>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1231 <vert_gen_weights+0x121>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    11b2 <vert_gen_weights+0xa2>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    11c1 <vert_gen_weights+0xb1>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    121e <vert_gen_weights+0x10e>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     121e <vert_gen_weights+0x10e>
jmp    1231 <vert_gen_weights+0x121>
jmp    1223 <vert_gen_weights+0x113>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1169 <vert_gen_weights+0x59>
mov    -0x2c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    125b <vert_gen_weights+0x14b>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xdb7(%rip),%rdi
call   1030 <cdoAbort@plt>
jmp    148a <vert_gen_weights+0x37a>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jne    1309 <vert_gen_weights+0x1f9>
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x0,-0x4(%rbp)
jne    12da <vert_gen_weights+0x1ca>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
ja     12f4 <vert_gen_weights+0x1e4>
movsd  -0x48(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
ja     12f4 <vert_gen_weights+0x1e4>
mov    0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  0xd16(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1304 <vert_gen_weights+0x1f4>
mov    0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1468 <vert_gen_weights+0x358>
mov    -0x2c(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    13bd <vert_gen_weights+0x2ad>
mov    -0x8(%rbp),%edx
sub    $0x2,%edx
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%edx
sub    $0x2,%edx
mov    0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
cmpl   $0x0,-0x4(%rbp)
jne    137e <vert_gen_weights+0x26e>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
ja     1398 <vert_gen_weights+0x288>
movsd  -0x48(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
ja     1398 <vert_gen_weights+0x288>
mov    0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  0xc72(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    13a8 <vert_gen_weights+0x298>
mov    0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1463 <vert_gen_weights+0x353>
mov    -0x34(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%edx
mov    0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1468 <vert_gen_weights+0x358>
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
add    $0xffffffff,%edx
mov    %edx,(%rax,%rcx,4)
mov    0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
add    $0xffffffff,%edx
mov    %edx,(%rax,%rcx,4)
jmp    148f <vert_gen_weights+0x37f>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1156 <vert_gen_weights+0x46>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<vert_gen_weights>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,0x8(%rsp)
mov    %edi,0x4(%rsp)
test   %ecx,%ecx
jle    1344 <vert_gen_weights+0x234>
mov    %r8,%r15
mov    %rdx,%rbx
mov    %esi,%r12d
lea    -0x2(%r12),%eax
mov    %eax,0x14(%rsp)
mov    %ecx,%ebp
mov    %esi,%r13d
mov    %esi,%eax
neg    %eax
mov    %rax,0x18(%rsp)
add    $0xffffffffffffffff,%r13
xorpd  %xmm3,%xmm3
xor    %r14d,%r14d
jmp    118b <vert_gen_weights+0x7b>
nopl   0x0(%rax)
movsd  %xmm3,0x20(%rsp)
movsd  (%r15,%r14,8),%xmm0
lea    0xe95(%rip),%rdi
call   1030 <cdoAbort@plt>
movsd  0x20(%rsp),%xmm3
add    $0x1,%r14
cmp    %rbp,%r14
je     1344 <vert_gen_weights+0x234>
cmp    $0x2,%r12d
jl     1270 <vert_gen_weights+0x160>
movsd  (%r15,%r14,8),%xmm0
movsd  (%rbx),%xmm1
xor    %eax,%eax
jmp    11b9 <vert_gen_weights+0xa9>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rax
cmp    %rax,%r13
je     1160 <vert_gen_weights+0x50>
movapd %xmm1,%xmm2
lea    0x1(%rax),%ecx
movsd  0x8(%rbx,%rax,8),%xmm1
ucomisd %xmm2,%xmm1
ja     11e0 <vert_gen_weights+0xd0>
mov    %ecx,%edx
mov    %eax,%ecx
jmp    11e2 <vert_gen_weights+0xd2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %eax,%edx
movslq %edx,%rdx
movslq %ecx,%rcx
movsd  (%rbx,%rcx,8),%xmm3
ucomisd (%rbx,%rdx,8),%xmm0
jbe    11b0 <vert_gen_weights+0xa0>
ucomisd %xmm0,%xmm3
jb     11b0 <vert_gen_weights+0xa0>
mov    0x18(%rsp),%rsi
add    %rax,%rsi
cmp    $0xffffffff,%esi
je     1160 <vert_gen_weights+0x50>
test   %eax,%eax
je     127a <vert_gen_weights+0x16a>
cmp    $0xfffffffe,%esi
jne    12c0 <vert_gen_weights+0x1b0>
mov    0x8(%rsp),%rax
mov    0x14(%rsp),%ecx
mov    %ecx,(%rax,%r14,4)
mov    0x60(%rsp),%rax
mov    %ecx,(%rax,%r14,4)
movsd  0xdca(%rip),%xmm0
cmpl   $0x0,0x4(%rsp)
jne    1251 <vert_gen_weights+0x141>
ucomisd (%r15,%r14,8),%xmm3
movsd  0xdb5(%rip),%xmm0
je     1251 <vert_gen_weights+0x141>
xorpd  %xmm0,%xmm0
mov    0x68(%rsp),%rax
movsd  %xmm0,(%rax,%r14,8)
xorpd  %xmm0,%xmm0
jmp    1320 <vert_gen_weights+0x210>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x1,%r12d
je     1160 <vert_gen_weights+0x50>
mov    0x8(%rsp),%rax
movl   $0x1,(%rax,%r14,4)
mov    0x60(%rsp),%rax
movl   $0x1,(%rax,%r14,4)
mov    0x68(%rsp),%rax
movq   $0x0,(%rax,%r14,8)
cmpl   $0x0,0x4(%rsp)
je     12b2 <vert_gen_weights+0x1a2>
movsd  0xd50(%rip),%xmm0
jmp    1320 <vert_gen_weights+0x210>
ucomisd (%r15,%r14,8),%xmm3
je     12a8 <vert_gen_weights+0x198>
xorpd  %xmm0,%xmm0
jmp    1320 <vert_gen_weights+0x210>
mov    0x8(%rsp),%rax
mov    %edx,(%rax,%r14,4)
mov    0x60(%rsp),%rax
mov    %ecx,(%rax,%r14,4)
movsd  (%rbx,%rcx,8),%xmm0
movapd %xmm0,%xmm1
subsd  (%r15,%r14,8),%xmm1
subsd  (%rbx,%rdx,8),%xmm0
divsd  %xmm0,%xmm1
mov    0x68(%rsp),%rax
movsd  %xmm1,(%rax,%r14,8)
movsd  (%r15,%r14,8),%xmm0
movsd  (%rbx,%rdx,8),%xmm1
subsd  %xmm1,%xmm0
movsd  (%rbx,%rcx,8),%xmm2
subsd  %xmm1,%xmm2
divsd  %xmm2,%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x70(%rsp),%rax
movsd  %xmm0,(%rax,%r14,8)
mov    0x8(%rsp),%rax
addl   $0xffffffff,(%rax,%r14,4)
mov    0x60(%rsp),%rax
addl   $0xffffffff,(%rax,%r14,4)
jmp    117e <vert_gen_weights+0x6e>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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