int getnp_(double *x, double *y, double *z__, int *list, int *lptr, int *lend,
           int *l, int *npts, double *df, int *ier) {
  int i__1, i__2;
  static int i__, n1;
  static double x1, y11, z1;
  static int nb, ni, lp, np, lm1;
  static double dnb, dnp;
  static int lpl;
  --x;
  --y;
  --z__;
  --list;
  --lptr;
  --lend;
  --npts;
  lm1 = *l - 1;
  if (lm1 < 1) {
    goto L6;
  }
  *ier = 0;
  n1 = npts[1];
  x1 = x[n1];
  y11 = y[n1];
  z1 = z__[n1];
  i__1 = lm1;
  for (i__ = 1; i__ <= i__1; ++i__) {
    ni = npts[i__];
    lend[ni] = -lend[ni];
  }
  dnp = 2.;
  i__1 = lm1;
  for (i__ = 1; i__ <= i__1; ++i__) {
    ni = npts[i__];
    lpl = -lend[ni];
    lp = lpl;
  L2:
    nb = (i__2 = list[lp], ((i__2) >= 0 ? (i__2) : -(i__2)));
    if (lend[nb] < 0) {
      goto L3;
    }
    dnb = -(x[nb] * x1 + y[nb] * y11 + z__[nb] * z1);
    if (dnb >= dnp) {
      goto L3;
    }
    np = nb;
    dnp = dnb;
  L3:
    lp = lptr[lp];
    if (lp != lpl) {
      goto L2;
    }
  }
  npts[*l] = np;
  *df = dnp;
  i__1 = lm1;
  for (i__ = 1; i__ <= i__1; ++i__) {
    ni = npts[i__];
    lend[ni] = -lend[ni];
  }
  return 0;
L6:
  *ier = 1;
  return 0;
}


x86 assembly (clang, -O0):
<getnp_>:
push   %rbp
mov    %rsp,%rbp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x10(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x38(%rbp)
mov    0x18(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,0x18(%rbp)
mov    0x10(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
mov    %eax,0x2ec9(%rip)
cmpl   $0x1,0x2ec2(%rip)
jge    11a1 <getnp_+0xa1>
jmp    14ab <getnp_+0x3ab>
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x18(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,0x2e74(%rip)
mov    -0x10(%rbp),%rax
movslq 0x2e69(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,0x2e60(%rip)
mov    -0x18(%rbp),%rax
movslq 0x2e51(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,0x2e50(%rip)
mov    -0x20(%rbp),%rax
movslq 0x2e39(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,0x2e40(%rip)
mov    0x2e52(%rip),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,0x2e15(%rip)
mov    0x2e0f(%rip),%eax
cmp    -0x3c(%rbp),%eax
jg     1268 <getnp_+0x168>
mov    0x18(%rbp),%rax
movslq 0x2dfb(%rip),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,0x2e16(%rip)
mov    -0x38(%rbp),%rax
movslq 0x2e0b(%rip),%rcx
xor    %edx,%edx
sub    (%rax,%rcx,4),%edx
mov    -0x38(%rbp),%rax
movslq 0x2dfb(%rip),%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x2dce(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2dc5(%rip)
jmp    1213 <getnp_+0x113>
movsd  0xd90(%rip),%xmm0
movsd  %xmm0,0x2df0(%rip)
mov    0x2dda(%rip),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,0x2d9d(%rip)
mov    0x2d97(%rip),%eax
cmp    -0x3c(%rbp),%eax
jg     1413 <getnp_+0x313>
mov    0x18(%rbp),%rax
movslq 0x2d83(%rip),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,0x2d9e(%rip)
mov    -0x38(%rbp),%rcx
movslq 0x2d93(%rip),%rdx
xor    %eax,%eax
sub    (%rcx,%rdx,4),%eax
mov    %eax,0x2dac(%rip)
mov    0x2da6(%rip),%eax
mov    %eax,0x2d80(%rip)
mov    -0x28(%rbp),%rax
movslq 0x2d75(%rip),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jl     12f6 <getnp_+0x1f6>
mov    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    12fe <getnp_+0x1fe>
xor    %eax,%eax
sub    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,0x2d41(%rip)
mov    -0x38(%rbp),%rax
movslq 0x2d36(%rip),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jge    1321 <getnp_+0x221>
jmp    13cf <getnp_+0x2cf>
mov    -0x10(%rbp),%rax
movslq 0x2d1c(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0x2cf7(%rip),%xmm2
mov    -0x18(%rbp),%rax
movslq 0x2d04(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  0x2ce7(%rip),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x20(%rbp),%rax
movslq 0x2ce4(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0x2ccf(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,0x2cc8(%rip)
movsd  0x2cc0(%rip),%xmm0
ucomisd 0x2cc0(%rip),%xmm0
jb     13b3 <getnp_+0x2b3>
jmp    13cf <getnp_+0x2cf>
mov    0x2c8f(%rip),%eax
mov    %eax,0x2c95(%rip)
movsd  0x2c99(%rip),%xmm0
movsd  %xmm0,0x2c99(%rip)
mov    -0x30(%rbp),%rax
movslq 0x2c76(%rip),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,0x2c6d(%rip)
mov    0x2c67(%rip),%eax
cmp    0x2c81(%rip),%eax
je     13fa <getnp_+0x2fa>
jmp    12d0 <getnp_+0x1d0>
jmp    13ff <getnp_+0x2ff>
mov    0x2c23(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2c1a(%rip)
jmp    128b <getnp_+0x18b>
mov    0x2c3b(%rip),%edx
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rcx
movslq (%rcx),%rcx
mov    %edx,(%rax,%rcx,4)
movsd  0x2c39(%rip),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x2c1b(%rip),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,0x2bde(%rip)
mov    0x2bd8(%rip),%eax
cmp    -0x3c(%rbp),%eax
jg     149f <getnp_+0x39f>
mov    0x18(%rbp),%rax
movslq 0x2bc4(%rip),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,0x2bdf(%rip)
mov    -0x38(%rbp),%rax
movslq 0x2bd4(%rip),%rcx
xor    %edx,%edx
sub    (%rax,%rcx,4),%edx
mov    -0x38(%rbp),%rax
movslq 0x2bc4(%rip),%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x2b97(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2b8e(%rip)
jmp    144a <getnp_+0x34a>
movl   $0x0,-0x4(%rbp)
jmp    14bc <getnp_+0x3bc>
mov    0x28(%rbp),%rax
movl   $0x1,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<getnp_>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x50(%rsp),%rax
mov    0x38(%rsp),%r11
mov    (%r11),%r12d
cmp    $0x2,%r12d
jge    1128 <getnp_+0x28>
movl   $0x1,(%rax)
jmp    1362 <getnp_+0x262>
mov    0x40(%rsp),%r13
movl   $0x0,(%rax)
movslq 0x0(%r13),%rax
movsd  -0x8(%rdi,%rax,8),%xmm0
movsd  -0x8(%rsi,%rax,8),%xmm1
movsd  -0x8(%rdx,%rax,8),%xmm2
lea    -0x1(%r12),%r10
lea    -0x2(%r12),%rbx
mov    %r10d,%r15d
and    $0x3,%r15d
mov    $0x1,%eax
mov    %rbx,-0x8(%rsp)
cmp    $0x3,%rbx
jb     11ba <getnp_+0xba>
mov    %r10,%rbp
and    $0xfffffffffffffffc,%rbp
neg    %rbp
mov    $0x1,%eax
nopl   0x0(%rax)
movslq -0x4(%r13,%rax,4),%rbx
negl   -0x4(%r9,%rbx,4)
movslq 0x0(%r13,%rax,4),%rbx
negl   -0x4(%r9,%rbx,4)
movslq 0x4(%r13,%rax,4),%rbx
negl   -0x4(%r9,%rbx,4)
movslq 0x8(%r13,%rax,4),%rbx
negl   -0x4(%r9,%rbx,4)
lea    (%rax,%rbp,1),%rbx
add    $0x4,%rbx
add    $0x4,%rax
cmp    $0x1,%rbx
jne    1180 <getnp_+0x80>
test   %r15,%r15
je     11e2 <getnp_+0xe2>
lea    -0x4(,%rax,4),%rax
ff
add    %r13,%rax
xor    %ebp,%ebp
nopl   0x0(%rax)
movslq (%rax,%rbp,4),%rbx
negl   -0x4(%r9,%rbx,4)
add    $0x1,%rbp
cmp    %rbp,%r15
jne    11d0 <getnp_+0xd0>
mov    0x48(%rsp),%rbx
cmp    $0x1,%r12d
jle    1292 <getnp_+0x192>
movsd  0xe07(%rip),%xmm3
mov    $0x1,%ebx
movapd 0xe0a(%rip),%xmm4
jmp    121d <getnp_+0x11d>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbx
cmp    %r12,%rbx
je     12b2 <getnp_+0x1b2>
movslq -0x4(%r13,%rbx,4),%rax
xor    %ebp,%ebp
sub    -0x4(%r9,%rax,4),%ebp
mov    %ebp,%eax
jmp    1239 <getnp_+0x139>
nopl   (%rax)
mov    -0x4(%r8,%rax,4),%eax
cmp    %ebp,%eax
je     1210 <getnp_+0x110>
cltq
mov    -0x4(%rcx,%rax,4),%r14d
mov    %r14d,%r15d
neg    %r15d
cmovs  %r14d,%r15d
cmpl   $0x0,-0x4(%r9,%r15,4)
js     1230 <getnp_+0x130>
movsd  -0x8(%rsi,%r15,8),%xmm5
mulsd  %xmm1,%xmm5
movsd  -0x8(%rdi,%r15,8),%xmm6
mulsd  %xmm0,%xmm6
addsd  %xmm5,%xmm6
movsd  -0x8(%rdx,%r15,8),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm6,%xmm5
xorpd  %xmm4,%xmm5
ucomisd %xmm3,%xmm5
jae    1230 <getnp_+0x130>
mov    %r15d,0x2d98(%rip)
movapd %xmm5,%xmm3
jmp    1230 <getnp_+0x130>
mov    0x2d8c(%rip),%eax
movslq (%r11),%rcx
mov    %eax,-0x4(%r13,%rcx,4)
movabs $0x4000000000000000,%rax
mov    %rax,(%rbx)
jmp    1362 <getnp_+0x262>
mov    0x2d6c(%rip),%eax
movslq (%r11),%rcx
mov    %eax,-0x4(%r13,%rcx,4)
mov    0x48(%rsp),%rax
movsd  %xmm3,(%rax)
cmp    $0x2,%r12d
jl     1362 <getnp_+0x262>
mov    %r10d,%ecx
and    $0x3,%ecx
mov    $0x1,%eax
cmpq   $0x3,-0x8(%rsp)
jb     133a <getnp_+0x23a>
and    $0xfffffffffffffffc,%r10
neg    %r10
mov    $0x1,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movslq -0x4(%r13,%rax,4),%rdx
negl   -0x4(%r9,%rdx,4)
movslq 0x0(%r13,%rax,4),%rdx
negl   -0x4(%r9,%rdx,4)
movslq 0x4(%r13,%rax,4),%rdx
negl   -0x4(%r9,%rdx,4)
movslq 0x8(%r13,%rax,4),%rdx
negl   -0x4(%r9,%rdx,4)
lea    (%r10,%rax,1),%rdx
add    $0x4,%rdx
add    $0x4,%rax
cmp    $0x1,%rdx
jne    1300 <getnp_+0x200>
test   %rcx,%rcx
je     1362 <getnp_+0x262>
lea    -0x4(,%rax,4),%rax
ff
add    %r13,%rax
xor    %edx,%edx
nopl   0x0(%rax)
movslq (%rax,%rdx,4),%rsi
negl   -0x4(%r9,%rsi,4)
add    $0x1,%rdx
cmp    %rdx,%rcx
jne    1350 <getnp_+0x250>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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