void rbasis(int c, double t, int npts, int x[], double h[], double r[]) {
  int nplusc;
  int i, j, k;
  double d, e;
  double sum;
  double temp[10000];
  nplusc = npts + c;
  if (nplusc < 10000) {
    for (i = 1; i <= nplusc - 1; i++) {
      if ((t >= x[i]) && (t < x[i + 1]))
        temp[i] = 1;
      else
        temp[i] = 0;
    }
    for (k = 2; k <= c; k++) {
      for (i = 1; i <= nplusc - k; i++) {
        if (temp[i] != 0)
          d = ((t - x[i]) * temp[i]) / (x[i + k - 1] - x[i]);
        else
          d = 0;
        if (temp[i + 1] != 0)
          e = ((x[i + k] - t) * temp[i + 1]) / (x[i + k] - x[i + 1]);
        else
          e = 0;
        temp[i] = d + e;
      }
    }
    if (t == (double)x[nplusc]) {
      temp[npts] = 1;
    }
    sum = 0.;
    for (i = 1; i <= npts; i++) {
      sum = sum + temp[i] * h[i];
    }
    for (i = 1; i <= npts; i++) {
      if (sum != 0) {
        r[i] = (temp[i] * h[i]) / (sum);
      } else
        r[i] = 0;
    }
  }
}


x86 assembly (clang, -O0):
<rbasis>:
push   %rbp
mov    %rsp,%rbp
sub    $0x13860,%rsp
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    -0x14(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x2710,-0x34(%rbp)
jge    144d <rbasis+0x34d>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     11ca <rbasis+0xca>
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
ucomisd %xmm1,%xmm0
jb     11a7 <rbasis+0xa7>
movsd  -0x10(%rbp),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
ucomisd %xmm1,%xmm0
jbe    11a7 <rbasis+0xa7>
movslq -0x38(%rbp),%rax
movsd  0xe67(%rip),%xmm0
movsd  %xmm0,-0x138e0(%rbp,%rax,8)
fe ff
jmp    11b7 <rbasis+0xb7>
movslq -0x38(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x138e0(%rbp,%rax,8)
fe ff
jmp    11bc <rbasis+0xbc>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    113f <rbasis+0x3f>
movl   $0x2,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1338 <rbasis+0x238>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    -0x40(%rbp),%ecx
cmp    %ecx,%eax
jg     1325 <rbasis+0x225>
movslq -0x38(%rbp),%rax
movsd  -0x138e0(%rbp,%rax,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    121a <rbasis+0x11a>
jp     121a <rbasis+0x11a>
jmp    126d <rbasis+0x16d>
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
subsd  %xmm1,%xmm0
movslq -0x38(%rbp),%rax
mulsd  -0x138e0(%rbp,%rax,8),%xmm0
fe ff
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
movslq -0x38(%rbp),%rdx
sub    (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1275 <rbasis+0x175>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
cltq
movsd  -0x138e0(%rbp,%rax,8),%xmm0
fe ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    129e <rbasis+0x19e>
jp     129e <rbasis+0x19e>
jmp    12f8 <rbasis+0x1f8>
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x40(%rbp),%ecx
movslq %ecx,%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
subsd  -0x10(%rbp),%xmm0
mov    -0x38(%rbp),%eax
add    $0x1,%eax
cltq
mulsd  -0x138e0(%rbp,%rax,8),%xmm0
fe ff
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x40(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x38(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
sub    (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    1300 <rbasis+0x200>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movslq -0x38(%rbp),%rax
movsd  %xmm0,-0x138e0(%rbp,%rax,8)
fe ff
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11e4 <rbasis+0xe4>
jmp    132a <rbasis+0x22a>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    11d1 <rbasis+0xd1>
movsd  -0x10(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
ucomisd %xmm1,%xmm0
jne    136f <rbasis+0x26f>
jp     136f <rbasis+0x26f>
movslq -0x14(%rbp),%rax
movsd  0xc9a(%rip),%xmm0
movsd  %xmm0,-0x138e0(%rbp,%rax,8)
fe ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     13c4 <rbasis+0x2c4>
movsd  -0x58(%rbp),%xmm1
movslq -0x38(%rbp),%rax
movsd  -0x138e0(%rbp,%rax,8),%xmm0
fe ff
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    137e <rbasis+0x27e>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     1448 <rbasis+0x348>
movsd  -0x58(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13f4 <rbasis+0x2f4>
jp     13f4 <rbasis+0x2f4>
jmp    1425 <rbasis+0x325>
movslq -0x38(%rbp),%rax
movsd  -0x138e0(%rbp,%rax,8),%xmm0
fe ff
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1435 <rbasis+0x335>
mov    -0x30(%rbp),%rax
movslq -0x38(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    143a <rbasis+0x33a>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    13cb <rbasis+0x2cb>
jmp    144d <rbasis+0x34d>
add    $0x13860,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rbasis>:
push   %rbp
push   %r14
push   %rbx
sub    $0x13800,%rsp
lea    (%rsi,%rdi,1),%r10d
cmp    $0x270f,%r10d
jg     1464 <rbasis+0x364>
cmp    $0x2,%r10d
jl     1205 <rbasis+0x105>
mov    %r10d,%r9d
add    $0xffffffffffffffff,%r9
mov    $0x1,%r14d
cmp    $0x2,%r10d
jne    1177 <rbasis+0x77>
test   $0x1,%r9b
je     1205 <rbasis+0x105>
xorps  %xmm1,%xmm1
cvtsi2sdl (%rdx,%r14,4),%xmm1
ucomisd %xmm1,%xmm0
jb     11fa <rbasis+0xfa>
xorps  %xmm1,%xmm1
cvtsi2sdl 0x4(%rdx,%r14,4),%xmm1
ucomisd %xmm0,%xmm1
jbe    11fa <rbasis+0xfa>
movsd  0xe8e(%rip),%xmm1
jmp    11fe <rbasis+0xfe>
mov    %r9,%r11
and    $0xfffffffffffffffe,%r11
neg    %r11
mov    $0x1,%ebx
movsd  0xe72(%rip),%xmm1
jmp    11a7 <rbasis+0xa7>
xorpd  %xmm2,%xmm2
movsd  %xmm2,-0x78(%rsp,%rbx,8)
lea    (%r11,%r14,1),%rax
mov    %r14,%rbx
cmp    $0x1,%rax
je     1139 <rbasis+0x39>
xorps  %xmm2,%xmm2
cvtsi2sdl (%rdx,%rbx,4),%xmm2
ucomisd %xmm2,%xmm0
jb     11c8 <rbasis+0xc8>
xorps  %xmm2,%xmm2
cvtsi2sdl 0x4(%rdx,%rbx,4),%xmm2
ucomisd %xmm0,%xmm2
movapd %xmm1,%xmm2
ja     11cc <rbasis+0xcc>
xorpd  %xmm2,%xmm2
movsd  %xmm2,-0x80(%rsp,%rbx,8)
xorps  %xmm2,%xmm2
cvtsi2sdl 0x4(%rdx,%rbx,4),%xmm2
lea    0x2(%rbx),%r14
ucomisd %xmm2,%xmm0
jb     1190 <rbasis+0x90>
xorps  %xmm2,%xmm2
cvtsi2sdl 0x8(%rdx,%rbx,4),%xmm2
ucomisd %xmm0,%xmm2
movapd %xmm1,%xmm2
jbe    1190 <rbasis+0x90>
jmp    1194 <rbasis+0x94>
xorpd  %xmm1,%xmm1
movsd  %xmm1,-0x80(%rsp,%r14,8)
movslq %r10d,%r9
cmp    $0x2,%edi
jge    1266 <rbasis+0x166>
xorps  %xmm1,%xmm1
cvtsi2sdl (%rdx,%r9,4),%xmm1
ucomisd %xmm0,%xmm1
jne    1230 <rbasis+0x130>
jp     1230 <rbasis+0x130>
movslq %esi,%rax
movabs $0x3ff0000000000000,%rdx
mov    %rdx,-0x80(%rsp,%rax,8)
test   %esi,%esi
jle    1464 <rbasis+0x364>
mov    %esi,%r9d
lea    -0x1(%r9),%r10
mov    %r9d,%edi
and    $0x3,%edi
cmp    $0x3,%r10
jae    132f <rbasis+0x22f>
xorpd  %xmm0,%xmm0
mov    $0x1,%ebx
test   %rdi,%rdi
jne    1392 <rbasis+0x292>
jmp    13b7 <rbasis+0x2b7>
add    $0x1,%edi
lea    0xc(%rdx),%r14
mov    $0x2,%r10d
jmp    128d <rbasis+0x18d>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r10
add    $0x4,%r14
cmp    %rdi,%r10
je     120d <rbasis+0x10d>
mov    %r9,%r11
sub    %r10,%r11
jle    1280 <rbasis+0x180>
xor    %ebx,%ebx
jmp    12b3 <rbasis+0x1b3>
nopl   0x0(%rax)
addsd  %xmm1,%xmm2
movsd  %xmm2,-0x78(%rsp,%rbx,8)
add    $0x1,%rbx
cmp    %r11,%rbx
jge    1280 <rbasis+0x180>
movsd  -0x78(%rsp,%rbx,8),%xmm3
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm3
xorpd  %xmm2,%xmm2
jne    12c9 <rbasis+0x1c9>
jnp    12f6 <rbasis+0x1f6>
mov    0x4(%rdx,%rbx,4),%ebp
xorps  %xmm2,%xmm2
cvtsi2sd %ebp,%xmm2
movapd %xmm0,%xmm4
subsd  %xmm2,%xmm4
mulsd  %xmm4,%xmm3
mov    -0x4(%r14,%rbx,4),%eax
sub    %ebp,%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
divsd  %xmm2,%xmm3
movapd %xmm3,%xmm2
movsd  -0x70(%rsp,%rbx,8),%xmm3
ucomisd %xmm1,%xmm3
jne    1304 <rbasis+0x204>
jnp    12a0 <rbasis+0x1a0>
mov    (%r14,%rbx,4),%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
subsd  %xmm0,%xmm1
sub    0x8(%rdx,%rbx,4),%eax
mulsd  %xmm1,%xmm3
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm3
movapd %xmm3,%xmm1
jmp    12a0 <rbasis+0x1a0>
mov    %r9d,%eax
and    $0xfffffffc,%eax
xorpd  %xmm0,%xmm0
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movsd  -0x78(%rsp,%rbx,8),%xmm1
movsd  -0x70(%rsp,%rbx,8),%xmm2
mulsd  0x8(%rcx,%rbx,8),%xmm1
mulsd  0x10(%rcx,%rbx,8),%xmm2
addsd  %xmm0,%xmm1
movsd  -0x68(%rsp,%rbx,8),%xmm3
mulsd  0x18(%rcx,%rbx,8),%xmm3
addsd  %xmm1,%xmm2
movsd  -0x60(%rsp,%rbx,8),%xmm0
mulsd  0x20(%rcx,%rbx,8),%xmm0
addsd  %xmm2,%xmm3
addsd  %xmm3,%xmm0
add    $0x4,%rbx
cmp    %rbx,%rax
jne    1340 <rbasis+0x240>
add    $0x1,%rbx
test   %rdi,%rdi
je     13b7 <rbasis+0x2b7>
lea    (%rcx,%rbx,8),%rax
lea    (%rsp,%rbx,8),%rbx
add    $0xffffffffffffff80,%rbx
xor    %edx,%edx
movsd  (%rbx,%rdx,8),%xmm1
mulsd  (%rax,%rdx,8),%xmm1
addsd  %xmm1,%xmm0
add    $0x1,%rdx
cmp    %rdx,%rdi
jne    13a0 <rbasis+0x2a0>
test   %esi,%esi
jle    1464 <rbasis+0x364>
test   %r10,%r10
je     1438 <rbasis+0x338>
mov    %r9d,%esi
and    $0xfffffffe,%esi
neg    %rsi
mov    $0x1,%edx
jmp    13f9 <rbasis+0x2f9>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  %xmm1,0x8(%r8,%rdx,8)
lea    (%rsi,%rdx,1),%rax
add    $0x2,%rax
add    $0x2,%rdx
cmp    $0x1,%rax
je     143d <rbasis+0x33d>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
xorpd  %xmm2,%xmm2
jne    1409 <rbasis+0x309>
jnp    1418 <rbasis+0x318>
movsd  -0x80(%rsp,%rdx,8),%xmm2
mulsd  (%rcx,%rdx,8),%xmm2
divsd  %xmm0,%xmm2
ucomisd %xmm1,%xmm0
movsd  %xmm2,(%r8,%rdx,8)
jne    1426 <rbasis+0x326>
jnp    13e0 <rbasis+0x2e0>
movsd  -0x78(%rsp,%rdx,8),%xmm1
mulsd  0x8(%rcx,%rdx,8),%xmm1
divsd  %xmm0,%xmm1
jmp    13e0 <rbasis+0x2e0>
mov    $0x1,%edx
test   $0x1,%r9b
je     1464 <rbasis+0x364>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    144f <rbasis+0x34f>
jnp    145e <rbasis+0x35e>
movsd  -0x80(%rsp,%rdx,8),%xmm1
mulsd  (%rcx,%rdx,8),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%r8,%rdx,8)
add    $0x13800,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

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

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