int odrrc(char *jobt, int *n, double *vl, double *vu, double *d__, double *e,
          double *pivmin, int *eigcnt, int *lcnt, int *rcnt, int *info) {
  int i__1;
  double d__1;
  int i__;
  double sl, su, tmp, tmp2;
  int matt;
  extern int olsame(char *, char *);
  double lpivot, rpivot;
  --e;
  --d__;
  *info = 0;
  *lcnt = 0;
  *rcnt = 0;
  *eigcnt = 0;
  matt = olsame(jobt, "T");
  if (matt) {
    lpivot = d__[1] - *vl;
    rpivot = d__[1] - *vu;
    if (lpivot <= 0.) {
      ++(*lcnt);
    }
    if (rpivot <= 0.) {
      ++(*rcnt);
    }
    i__1 = *n - 1;
    for (i__ = 1; i__ <= i__1; ++i__) {
      d__1 = e[i__];
      tmp = d__1 * d__1;
      lpivot = d__[i__ + 1] - *vl - tmp / lpivot;
      rpivot = d__[i__ + 1] - *vu - tmp / rpivot;
      if (lpivot <= 0.) {
        ++(*lcnt);
      }
      if (rpivot <= 0.) {
        ++(*rcnt);
      }
    }
  } else {
    sl = -(*vl);
    su = -(*vu);
    i__1 = *n - 1;
    for (i__ = 1; i__ <= i__1; ++i__) {
      lpivot = d__[i__] + sl;
      rpivot = d__[i__] + su;
      if (lpivot <= 0.) {
        ++(*lcnt);
      }
      if (rpivot <= 0.) {
        ++(*rcnt);
      }
      tmp = e[i__] * d__[i__] * e[i__];
      tmp2 = tmp / lpivot;
      if (tmp2 == 0.) {
        sl = tmp - *vl;
      } else {
        sl = sl * tmp2 - *vl;
      }
      tmp2 = tmp / rpivot;
      if (tmp2 == 0.) {
        su = tmp - *vu;
      } else {
        su = su * tmp2 - *vu;
      }
    }
    lpivot = d__[*n] + sl;
    rpivot = d__[*n] + su;
    if (lpivot <= 0.) {
      ++(*lcnt);
    }
    if (rpivot <= 0.) {
      ++(*rcnt);
    }
  }
  *eigcnt = *rcnt - *lcnt;
  return 0;
}


x86 assembly (clang, -O0):
<odrrc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
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)
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x28(%rbp)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x20(%rbp),%rax
movl   $0x0,(%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x8(%rbp),%rdi
lea    0xe6e(%rip),%rsi
call   1030 <olsame@plt>
mov    %eax,-0x6c(%rbp)
cmpl   $0x0,-0x6c(%rbp)
je     12e6 <odrrc+0x1d6>
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x78(%rbp),%xmm0
jb     11e9 <odrrc+0xd9>
mov    0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
xorps  %xmm0,%xmm0
ucomisd -0x80(%rbp),%xmm0
jb     1202 <odrrc+0xf2>
mov    0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     12e1 <odrrc+0x1d1>
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
movsd  -0x60(%rbp),%xmm1
divsd  -0x78(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
movsd  -0x60(%rbp),%xmm1
divsd  -0x80(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x78(%rbp),%xmm0
jb     12b5 <odrrc+0x1a5>
mov    0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
xorps  %xmm0,%xmm0
ucomisd -0x80(%rbp),%xmm0
jb     12ce <odrrc+0x1be>
mov    0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    12d3 <odrrc+0x1c3>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1215 <odrrc+0x105>
jmp    153f <odrrc+0x42f>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     14d4 <odrrc+0x3c4>
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x78(%rbp),%xmm0
jb     1394 <odrrc+0x284>
mov    0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
xorps  %xmm0,%xmm0
ucomisd -0x80(%rbp),%xmm0
jb     13ad <odrrc+0x29d>
mov    0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1417 <odrrc+0x307>
jp     1417 <odrrc+0x307>
movsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    144d <odrrc+0x33d>
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x60(%rbp),%xmm0
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    148b <odrrc+0x37b>
jp     148b <odrrc+0x37b>
movsd  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    14c1 <odrrc+0x3b1>
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    14c6 <odrrc+0x3b6>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1341 <odrrc+0x231>
mov    -0x28(%rbp),%rax
mov    -0x10(%rbp),%rcx
movslq (%rcx),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x10(%rbp),%rcx
movslq (%rcx),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x78(%rbp),%xmm0
jb     1521 <odrrc+0x411>
mov    0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
xorps  %xmm0,%xmm0
ucomisd -0x80(%rbp),%xmm0
jb     153a <odrrc+0x42a>
mov    0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    153f <odrrc+0x42f>
mov    0x28(%rbp),%rax
mov    (%rax),%ecx
mov    0x20(%rbp),%rax
sub    (%rax),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
xor    %eax,%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<odrrc>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r9,%r14
mov    %r8,%rbx
mov    %rcx,%r12
mov    %rdx,%r13
mov    %rsi,%rbp
mov    0x58(%rsp),%r15
mov    0x50(%rsp),%rdx
mov    0x48(%rsp),%rcx
mov    0x60(%rsp),%rax
movl   $0x0,(%rax)
movl   $0x0,(%rdx)
movl   $0x0,(%r15)
movl   $0x0,(%rcx)
lea    0xeb2(%rip),%rsi
call   1030 <olsame@plt>
test   %eax,%eax
je     121e <odrrc+0x10e>
movsd  0x0(%r13),%xmm1
movsd  (%r12),%xmm0
unpcklpd %xmm1,%xmm0
movsd  (%rbx),%xmm1
unpcklpd %xmm1,%xmm1
subpd  %xmm0,%xmm1
movapd %xmm1,%xmm3
unpckhpd %xmm1,%xmm3
xorpd  %xmm2,%xmm2
ucomisd %xmm3,%xmm2
mov    0x50(%rsp),%rsi
jb     11a1 <odrrc+0x91>
addl   $0x1,(%rsi)
ucomisd %xmm1,%xmm2
mov    0x48(%rsp),%rdx
jb     11b0 <odrrc+0xa0>
addl   $0x1,(%r15)
mov    0x0(%rbp),%eax
cmp    $0x2,%eax
jl     131a <odrrc+0x20a>
add    $0xffffffffffffffff,%rax
xor    %ecx,%ecx
xorpd  %xmm2,%xmm2
jmp    11dd <odrrc+0xcd>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rcx
cmp    %rcx,%rax
je     131a <odrrc+0x20a>
movsd  (%r14,%rcx,8),%xmm3
mulsd  %xmm3,%xmm3
unpcklpd %xmm3,%xmm3
divpd  %xmm1,%xmm3
movsd  0x8(%rbx,%rcx,8),%xmm1
unpcklpd %xmm1,%xmm1
subpd  %xmm0,%xmm1
subpd  %xmm3,%xmm1
movapd %xmm1,%xmm3
unpckhpd %xmm1,%xmm3
ucomisd %xmm3,%xmm2
jb     1212 <odrrc+0x102>
addl   $0x1,(%rsi)
ucomisd %xmm1,%xmm2
jb     11d0 <odrrc+0xc0>
addl   $0x1,(%r15)
jmp    11d0 <odrrc+0xc0>
movsd  0x0(%r13),%xmm1
movsd  (%r12),%xmm0
unpcklpd %xmm0,%xmm1
movapd 0xdca(%rip),%xmm2
xorpd  %xmm1,%xmm2
mov    0x0(%rbp),%eax
cmp    $0x2,%eax
mov    0x48(%rsp),%rdx
mov    0x50(%rsp),%rsi
jl     12e2 <odrrc+0x1d2>
add    $0xffffffffffffffff,%rax
xor    %ecx,%ecx
xorpd  %xmm3,%xmm3
xorpd  %xmm4,%xmm4
movapd %xmm2,%xmm0
jmp    12b4 <odrrc+0x1a4>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%r14,%rcx,8),%xmm7
mulsd  %xmm7,%xmm5
mulsd  %xmm7,%xmm5
unpcklpd %xmm5,%xmm5
movapd %xmm5,%xmm7
divpd  %xmm6,%xmm7
subpd  %xmm1,%xmm5
mulpd  %xmm7,%xmm0
cmpeqpd %xmm4,%xmm7
addpd  %xmm2,%xmm0
andpd  %xmm7,%xmm5
andnpd %xmm0,%xmm7
movapd %xmm7,%xmm0
orpd   %xmm5,%xmm0
add    $0x1,%rcx
cmp    %rcx,%rax
je     12e8 <odrrc+0x1d8>
movsd  (%rbx,%rcx,8),%xmm5
movapd %xmm5,%xmm6
unpcklpd %xmm5,%xmm6
addpd  %xmm0,%xmm6
ucomisd %xmm6,%xmm3
jb     12ce <odrrc+0x1be>
addl   $0x1,(%rsi)
movapd %xmm6,%xmm7
unpckhpd %xmm6,%xmm7
ucomisd %xmm7,%xmm3
jb     1270 <odrrc+0x160>
addl   $0x1,(%r15)
jmp    1270 <odrrc+0x160>
movapd %xmm2,%xmm0
jmp    12eb <odrrc+0x1db>
mov    0x0(%rbp),%eax
cltq
movsd  -0x8(%rbx,%rax,8),%xmm1
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm2,%xmm1
jb     1310 <odrrc+0x200>
addl   $0x1,(%rsi)
ucomisd %xmm0,%xmm1
jb     131a <odrrc+0x20a>
addl   $0x1,(%r15)
mov    (%r15),%eax
sub    (%rsi),%eax
mov    %eax,(%rdx)
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [2 x i8] c"T\00"
define i32 @odrrc(i8* %0, i32* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture %5, double* nocapture readnone %6, i32* nocapture writeonly %7, i32* nocapture %8, i32* nocapture %9, i32* nocapture writeonly %10) {
%12 = getelementptr inbounds double, double* %5, i64 -1
%13 = getelementptr inbounds double, double* %4, i64 -1
store i32 0, i32* %10
store i32 0, i32* %8
store i32 0, i32* %9
store i32 0, i32* %7
%14 = tail call i32 @olsame(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%15 = icmp eq i32 %14, 0
br i1 %15, label %72, label %16
16: ; preds = %11
%17 = load double, double* %4
%18 = load double, double* %2
%19 = load double, double* %3
%20 = insertelement <2 x double> poison, double %17, i64 0
%21 = shufflevector <2 x double> %20, <2 x double> poison, <2 x i32> zeroinitializer
%22 = insertelement <2 x double> poison, double %19, i64 0
%23 = insertelement <2 x double> %22, double %18, i64 1
%24 = fsub <2 x double> %21, %23
%25 = extractelement <2 x double> %24, i64 1
%26 = fcmp ugt double %25, 0.000000e+00
br i1 %26, label %30, label %27
27: ; preds = %16
%28 = load i32, i32* %8
%29 = add nsw i32 %28, 1
store i32 %29, i32* %8
br label %30
30: ; preds = %27, %16
%31 = extractelement <2 x double> %24, i64 0
%32 = fcmp ugt double %31, 0.000000e+00
br i1 %32, label %36, label %33
33: ; preds = %30
%34 = load i32, i32* %9
%35 = add nsw i32 %34, 1
store i32 %35, i32* %9
br label %36
36: ; preds = %33, %30
%37 = load i32, i32* %1
%38 = icmp sgt i32 %37, 1
br i1 %38, label %39, label %138
39: ; preds = %36
%40 = zext i32 %37 to i64
%41 = insertelement <2 x double> poison, double %19, i64 0
%42 = insertelement <2 x double> %41, double %18, i64 1
br label %43
43: ; preds = %39, %70
%44 = phi i64 [ 1, %39 ], [ %49, %70 ]
%45 = phi <2 x double> [ %24, %39 ], [ %58, %70 ]
%46 = getelementptr inbounds double, double* %12, i64 %44
%47 = load double, double* %46
%48 = fmul double %47, %47
%49 = add nuw nsw i64 %44, 1
%50 = getelementptr inbounds double, double* %4, i64 %44
%51 = load double, double* %50
%52 = insertelement <2 x double> poison, double %51, i64 0
%53 = shufflevector <2 x double> %52, <2 x double> poison, <2 x i32> zeroinitializer
%54 = fsub <2 x double> %53, %42
%55 = insertelement <2 x double> poison, double %48, i64 0
%56 = shufflevector <2 x double> %55, <2 x double> poison, <2 x i32> zeroinitializer
%57 = fdiv <2 x double> %56, %45
%58 = fsub <2 x double> %54, %57
%59 = extractelement <2 x double> %58, i64 1
%60 = fcmp ugt double %59, 0.000000e+00
br i1 %60, label %64, label %61
61: ; preds = %43
%62 = load i32, i32* %8
%63 = add nsw i32 %62, 1
store i32 %63, i32* %8
br label %64
64: ; preds = %61, %43
%65 = extractelement <2 x double> %58, i64 0
%66 = fcmp ugt double %65, 0.000000e+00
br i1 %66, label %70, label %67
67: ; preds = %64
%68 = load i32, i32* %9
%69 = add nsw i32 %68, 1
store i32 %69, i32* %9
br label %70
70: ; preds = %64, %67
%71 = icmp eq i64 %49, %40
br i1 %71, label %138, label %43
72: ; preds = %11
%73 = load double, double* %2
%74 = load double, double* %3
%75 = insertelement <2 x double> poison, double %73, i64 0
%76 = insertelement <2 x double> %75, double %74, i64 1
%77 = fneg <2 x double> %76
%78 = load i32, i32* %1
%79 = icmp sgt i32 %78, 1
br i1 %79, label %80, label %119
80: ; preds = %72
%81 = zext i32 %78 to i64
%82 = insertelement <2 x double> poison, double %73, i64 0
%83 = insertelement <2 x double> %82, double %74, i64 1
br label %84
84: ; preds = %80, %103
%85 = phi i64 [ 1, %80 ], [ %115, %103 ]
%86 = phi <2 x double> [ %77, %80 ], [ %114, %103 ]
%87 = getelementptr inbounds double, double* %13, i64 %85
%88 = load double, double* %87
%89 = insertelement <2 x double> poison, double %88, i64 0
%90 = shufflevector <2 x double> %89, <2 x double> poison, <2 x i32> zeroinitializer
%91 = fadd <2 x double> %86, %90
%92 = extractelement <2 x double> %91, i64 0
%93 = fcmp ugt double %92, 0.000000e+00
br i1 %93, label %97, label %94
94: ; preds = %84
%95 = load i32, i32* %8
%96 = add nsw i32 %95, 1
store i32 %96, i32* %8
br label %97
97: ; preds = %94, %84
%98 = extractelement <2 x double> %91, i64 1
%99 = fcmp ugt double %98, 0.000000e+00
br i1 %99, label %103, label %100
100: ; preds = %97
%101 = load i32, i32* %9
%102 = add nsw i32 %101, 1
store i32 %102, i32* %9
br label %103
103: ; preds = %100, %97
%104 = getelementptr inbounds double, double* %12, i64 %85
%105 = load double, double* %104
%106 = fmul double %88, %105
%107 = fmul double %105, %106
%108 = insertelement <2 x double> poison, double %107, i64 0
%109 = shufflevector <2 x double> %108, <2 x double> poison, <2 x i32> zeroinitializer
%110 = fdiv <2 x double> %109, %91
%111 = fcmp oeq <2 x double> %110, zeroinitializer
%112 = fsub <2 x double> %109, %83
%113 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %86, <2 x double> %110, <2 x double> %77)
%114 = select <2 x i1> %111, <2 x double> %112, <2 x double> %113
%115 = add nuw nsw i64 %85, 1
%116 = icmp eq i64 %115, %81
br i1 %116, label %117, label %84
117: ; preds = %103
%118 = load i32, i32* %1
br label %119
119: ; preds = %117, %72
%120 = phi i32 [ %78, %72 ], [ %118, %117 ]
%121 = phi <2 x double> [ %77, %72 ], [ %114, %117 ]
%122 = sext i32 %120 to i64
%123 = getelementptr inbounds double, double* %13, i64 %122
%124 = load double, double* %123
%125 = extractelement <2 x double> %121, i64 0
%126 = fadd double %125, %124
%127 = extractelement <2 x double> %121, i64 1
%128 = fadd double %127, %124
%129 = fcmp ugt double %126, 0.000000e+00
br i1 %129, label %133, label %130
130: ; preds = %119
%131 = load i32, i32* %8
%132 = add nsw i32 %131, 1
store i32 %132, i32* %8
br label %133
133: ; preds = %130, %119
%134 = fcmp ugt double %128, 0.000000e+00
br i1 %134, label %138, label %135
135: ; preds = %133
%136 = load i32, i32* %9
%137 = add nsw i32 %136, 1
store i32 %137, i32* %9
br label %138
138: ; preds = %70, %36, %133, %135
%139 = load i32, i32* %9
%140 = load i32, i32* %8
%141 = sub nsw i32 %139, %140
store i32 %141, i32* %7
ret i32 0
}