int odsrt(char *id, int *n, double *d__, int *info) {
  int i__1, i__2;
  int i__, j;
  double d1, d2, d3;
  int dir;
  double tmp;
  int endd;
  extern int olsame(char *, char *);
  int stack[64];
  double dmnmx;
  int start;
  extern int oerbla(char *, int *);
  int stkpnt;
  --d__;
  *info = 0;
  dir = -1;
  if (olsame(id, "D")) {
    dir = 0;
  } else if (olsame(id, "I")) {
    dir = 1;
  }
  if (dir == -1) {
    *info = -1;
  } else if (*n < 0) {
    *info = -2;
  }
  if (*info != 0) {
    i__1 = -(*info);
    oerbla("ODSRT", &i__1);
    return 0;
  }
  if (*n <= 1) {
    return 0;
  }
  stkpnt = 1;
  stack[0] = 1;
  stack[1] = *n;
L10:
  start = stack[(stkpnt << 1) - 2];
  endd = stack[(stkpnt << 1) - 1];
  --stkpnt;
  if (endd - start <= 20 && endd - start > 0) {
    if (dir == 0) {
      i__1 = endd;
      for (i__ = start + 1; i__ <= i__1; ++i__) {
        i__2 = start + 1;
        for (j = i__; j >= i__2; --j) {
          if (d__[j] > d__[j - 1]) {
            dmnmx = d__[j];
            d__[j] = d__[j - 1];
            d__[j - 1] = dmnmx;
          } else {
            goto L30;
          }
        }
      L30:;
      }
    } else {
      i__1 = endd;
      for (i__ = start + 1; i__ <= i__1; ++i__) {
        i__2 = start + 1;
        for (j = i__; j >= i__2; --j) {
          if (d__[j] < d__[j - 1]) {
            dmnmx = d__[j];
            d__[j] = d__[j - 1];
            d__[j - 1] = dmnmx;
          } else {
            goto L50;
          }
        }
      L50:;
      }
    }
  } else if (endd - start > 20) {
    d1 = d__[start];
    d2 = d__[endd];
    i__ = (start + endd) / 2;
    d3 = d__[i__];
    if (d1 < d2) {
      if (d3 < d1) {
        dmnmx = d1;
      } else if (d3 < d2) {
        dmnmx = d3;
      } else {
        dmnmx = d2;
      }
    } else {
      if (d3 < d2) {
        dmnmx = d2;
      } else if (d3 < d1) {
        dmnmx = d3;
      } else {
        dmnmx = d1;
      }
    }
    if (dir == 0) {
      i__ = start - 1;
      j = endd + 1;
    L60:
    L70:
      --j;
      if (d__[j] < dmnmx) {
        goto L70;
      }
    L80:
      ++i__;
      if (d__[i__] > dmnmx) {
        goto L80;
      }
      if (i__ < j) {
        tmp = d__[i__];
        d__[i__] = d__[j];
        d__[j] = tmp;
        goto L60;
      }
      if (j - start > endd - j - 1) {
        ++stkpnt;
        stack[(stkpnt << 1) - 2] = start;
        stack[(stkpnt << 1) - 1] = j;
        ++stkpnt;
        stack[(stkpnt << 1) - 2] = j + 1;
        stack[(stkpnt << 1) - 1] = endd;
      } else {
        ++stkpnt;
        stack[(stkpnt << 1) - 2] = j + 1;
        stack[(stkpnt << 1) - 1] = endd;
        ++stkpnt;
        stack[(stkpnt << 1) - 2] = start;
        stack[(stkpnt << 1) - 1] = j;
      }
    } else {
      i__ = start - 1;
      j = endd + 1;
    L90:
    L100:
      --j;
      if (d__[j] > dmnmx) {
        goto L100;
      }
    L110:
      ++i__;
      if (d__[i__] < dmnmx) {
        goto L110;
      }
      if (i__ < j) {
        tmp = d__[i__];
        d__[i__] = d__[j];
        d__[j] = tmp;
        goto L90;
      }
      if (j - start > endd - j - 1) {
        ++stkpnt;
        stack[(stkpnt << 1) - 2] = start;
        stack[(stkpnt << 1) - 1] = j;
        ++stkpnt;
        stack[(stkpnt << 1) - 2] = j + 1;
        stack[(stkpnt << 1) - 1] = endd;
      } else {
        ++stkpnt;
        stack[(stkpnt << 1) - 2] = j + 1;
        stack[(stkpnt << 1) - 1] = endd;
        ++stkpnt;
        stack[(stkpnt << 1) - 2] = start;
        stack[(stkpnt << 1) - 1] = j;
      }
    }
  }
  if (stkpnt > 0) {
    goto L10;
  }
  return 0;
}


x86 assembly (clang, -O0):
<odsrt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x180,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x20(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
movl   $0xffffffff,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xe9d(%rip),%rsi
call   1040 <olsame@plt>
cmp    $0x0,%eax
je     117d <odsrt+0x5d>
movl   $0x0,-0x54(%rbp)
jmp    11a2 <odsrt+0x82>
mov    -0x10(%rbp),%rdi
lea    0xe7a(%rip),%rsi
call   1040 <olsame@plt>
cmp    $0x0,%eax
je     119d <odsrt+0x7d>
movl   $0x1,-0x54(%rbp)
jmp    11a2 <odsrt+0x82>
cmpl   $0xffffffff,-0x54(%rbp)
jne    11bb <odsrt+0x9b>
mov    -0x28(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    11d7 <odsrt+0xb7>
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jge    11d2 <odsrt+0xb2>
mov    -0x28(%rbp),%rax
movl   $0xfffffffe,(%rax)
jmp    11d7 <odsrt+0xb7>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
je     120b <odsrt+0xeb>
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
sub    (%rcx),%eax
mov    %eax,-0x2c(%rbp)
lea    0xe0e(%rip),%rdi
lea    -0x2c(%rbp),%rsi
call   1030 <oerbla@plt>
movl   $0x0,-0x4(%rbp)
jmp    19d5 <odsrt+0x8b5>
mov    -0x18(%rbp),%rax
cmpl   $0x1,(%rax)
jg     1224 <odsrt+0x104>
movl   $0x0,-0x4(%rbp)
jmp    19d5 <odsrt+0x8b5>
movl   $0x1,-0x180(%rbp)
movl   $0x1,-0x170(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x16c(%rbp)
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    -0x170(%rbp,%rax,4),%eax
mov    %eax,-0x17c(%rbp)
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    -0x170(%rbp,%rax,4),%eax
mov    %eax,-0x64(%rbp)
mov    -0x180(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x180(%rbp)
mov    -0x64(%rbp),%eax
sub    -0x17c(%rbp),%eax
cmp    $0x14,%eax
jg     148f <odsrt+0x36f>
mov    -0x64(%rbp),%eax
sub    -0x17c(%rbp),%eax
cmp    $0x0,%eax
jle    148f <odsrt+0x36f>
cmpl   $0x0,-0x54(%rbp)
jne    139d <odsrt+0x27d>
mov    -0x64(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x17c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1398 <odsrt+0x278>
mov    -0x17c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x30(%rbp),%eax
jl     1380 <odsrt+0x260>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    1368 <odsrt+0x248>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x178(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    136d <odsrt+0x24d>
jmp    1385 <odsrt+0x265>
jmp    1372 <odsrt+0x252>
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
jmp    12e4 <odsrt+0x1c4>
jmp    1385 <odsrt+0x265>
jmp    138a <odsrt+0x26a>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12c6 <odsrt+0x1a6>
jmp    148a <odsrt+0x36a>
mov    -0x64(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x17c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1485 <odsrt+0x365>
mov    -0x17c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x30(%rbp),%eax
jl     146d <odsrt+0x34d>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    1455 <odsrt+0x335>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x178(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    145a <odsrt+0x33a>
jmp    1472 <odsrt+0x352>
jmp    145f <odsrt+0x33f>
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
jmp    13cd <odsrt+0x2ad>
jmp    1472 <odsrt+0x352>
jmp    1477 <odsrt+0x357>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    13af <odsrt+0x28f>
jmp    148a <odsrt+0x36a>
jmp    19bc <odsrt+0x89c>
mov    -0x64(%rbp),%eax
sub    -0x17c(%rbp),%eax
cmp    $0x14,%eax
jle    19b7 <odsrt+0x897>
mov    -0x20(%rbp),%rax
movslq -0x17c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x17c(%rbp),%eax
add    -0x64(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1565 <odsrt+0x445>
movsd  -0x50(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1528 <odsrt+0x408>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
jmp    1560 <odsrt+0x440>
movsd  -0x50(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    154e <odsrt+0x42e>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
jmp    155b <odsrt+0x43b>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
jmp    1560 <odsrt+0x440>
jmp    15c8 <odsrt+0x4a8>
movsd  -0x50(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    158b <odsrt+0x46b>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
jmp    15c3 <odsrt+0x4a3>
movsd  -0x50(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    15b1 <odsrt+0x491>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
jmp    15be <odsrt+0x49e>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
jmp    15c3 <odsrt+0x4a3>
jmp    15c8 <odsrt+0x4a8>
cmpl   $0x0,-0x54(%rbp)
jne    17c2 <odsrt+0x6a2>
mov    -0x17c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    15ec <odsrt+0x4cc>
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x178(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1619 <odsrt+0x4f9>
jmp    15ec <odsrt+0x4cc>
jmp    161e <odsrt+0x4fe>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x178(%rbp),%xmm0
ff
jbe    1647 <odsrt+0x527>
jmp    161e <odsrt+0x4fe>
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1696 <odsrt+0x576>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    15e7 <odsrt+0x4c7>
mov    -0x38(%rbp),%eax
sub    -0x17c(%rbp),%eax
mov    -0x64(%rbp),%ecx
sub    -0x38(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jle    1739 <odsrt+0x619>
mov    -0x180(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x180(%rbp)
mov    -0x17c(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x38(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x180(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x180(%rbp)
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x64(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
jmp    17bd <odsrt+0x69d>
mov    -0x180(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x180(%rbp)
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x64(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x180(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x180(%rbp)
mov    -0x17c(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x38(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
jmp    19b2 <odsrt+0x892>
mov    -0x17c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    17dc <odsrt+0x6bc>
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x178(%rbp),%xmm0
ff
jbe    1805 <odsrt+0x6e5>
jmp    17dc <odsrt+0x6bc>
jmp    180a <odsrt+0x6ea>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x178(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1837 <odsrt+0x717>
jmp    180a <odsrt+0x6ea>
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1886 <odsrt+0x766>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    17d7 <odsrt+0x6b7>
mov    -0x38(%rbp),%eax
sub    -0x17c(%rbp),%eax
mov    -0x64(%rbp),%ecx
sub    -0x38(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jle    1929 <odsrt+0x809>
mov    -0x180(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x180(%rbp)
mov    -0x17c(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x38(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x180(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x180(%rbp)
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x64(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
jmp    19ad <odsrt+0x88d>
mov    -0x180(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x180(%rbp)
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x64(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x180(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x180(%rbp)
mov    -0x17c(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x2,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
mov    -0x38(%rbp),%ecx
mov    -0x180(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x170(%rbp,%rax,4)
jmp    19b2 <odsrt+0x892>
jmp    19b7 <odsrt+0x897>
jmp    19bc <odsrt+0x89c>
cmpl   $0x0,-0x180(%rbp)
jle    19ce <odsrt+0x8ae>
jmp    1244 <odsrt+0x124>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x180,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<odsrt>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x108,%rsp
mov    %rcx,%r12
mov    %rdx,%rbx
mov    %rsi,%r15
mov    %rdi,%rbp
movl   $0x0,(%rcx)
lea    0xeb6(%rip),%rsi
call   1040 <olsame@plt>
mov    %eax,%r14d
test   %eax,%eax
jne    116d <odsrt+0x4d>
lea    0xea5(%rip),%rsi
mov    %rbp,%rdi
call   1040 <olsame@plt>
test   %eax,%eax
je     1419 <odsrt+0x2f9>
mov    (%r15),%ecx
test   %ecx,%ecx
js     1412 <odsrt+0x2f2>
mov    (%r12),%eax
test   %eax,%eax
jne    1422 <odsrt+0x302>
cmp    $0x2,%ecx
jb     1436 <odsrt+0x316>
movl   $0x1,(%rsp)
mov    %ecx,0x4(%rsp)
lea    -0x8(%rbx),%r11
mov    $0x1,%r10d
jmp    11cf <odsrt+0xaf>
mov    %eax,(%rsp,%r8,4)
mov    %r13d,%r12d
mov    %r10d,%edi
add    $0x1,%edi
lea    (%r10,%r10,1),%eax
add    $0x2,%eax
cltq
mov    %r15d,-0x8(%rsp,%rax,4)
mov    %r12d,-0x4(%rsp,%rax,4)
mov    %edi,%r10d
test   %edi,%edi
jle    1436 <odsrt+0x316>
lea    (%r10,%r10,1),%eax
movslq %eax,%r9
mov    -0x8(%rsp,%r9,4),%r15d
mov    -0x4(%rsp,%r9,4),%r12d
movslq %r15d,%rbp
lea    -0x1(%r10),%edi
mov    %r12d,%eax
sub    %ebp,%eax
lea    -0x1(%rax),%ecx
cmp    $0x13,%ecx
ja     1260 <odsrt+0x140>
test   %r14d,%r14d
je     12a4 <odsrt+0x184>
cmp    %r15d,%r12d
jle    11c4 <odsrt+0xa4>
mov    %rbp,%rax
jmp    1215 <odsrt+0xf5>
nopw   0x0(%rax,%rax,1)
cmp    %r12d,%eax
je     11c4 <odsrt+0xa4>
mov    %rax,%rcx
add    $0x1,%rax
cmp    %r15d,%ecx
jl     1210 <odsrt+0xf0>
movsd  (%rbx,%rcx,8),%xmm0
mov    %rax,%rcx
nopl   0x0(%rax)
movsd  -0x10(%rbx,%rcx,8),%xmm1
ucomisd %xmm1,%xmm0
jbe    1210 <odsrt+0xf0>
movsd  %xmm1,-0x8(%rbx,%rcx,8)
movsd  %xmm0,-0x10(%rbx,%rcx,8)
lea    -0x1(%rcx),%rdx
mov    %rdx,%rcx
cmp    %rbp,%rdx
jg     1230 <odsrt+0x110>
jmp    1210 <odsrt+0xf0>
cs nopw 0x0(%rax,%rax,1)
cmp    $0x15,%eax
jl     11c4 <odsrt+0xa4>
movslq %r12d,%rax
movsd  -0x8(%rbx,%rbp,8),%xmm1
movsd  -0x8(%rbx,%rax,8),%xmm2
lea    (%r12,%r15,1),%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
add    %eax,%ecx
sar    %ecx
movslq %ecx,%rax
movsd  -0x8(%rbx,%rax,8),%xmm3
ucomisd %xmm1,%xmm2
jbe    1306 <odsrt+0x1e6>
ucomisd %xmm3,%xmm1
movapd %xmm1,%xmm0
ja     1318 <odsrt+0x1f8>
minsd  %xmm2,%xmm3
jmp    1314 <odsrt+0x1f4>
cmp    %r15d,%r12d
jle    11c4 <odsrt+0xa4>
mov    %rbp,%rax
jmp    12c9 <odsrt+0x1a9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    %r12d,%eax
je     11c4 <odsrt+0xa4>
mov    %rax,%rcx
add    $0x1,%rax
cmp    %r15d,%ecx
jl     12c0 <odsrt+0x1a0>
movsd  (%rbx,%rcx,8),%xmm0
mov    %rax,%rcx
nopl   (%rax)
movsd  -0x10(%rbx,%rcx,8),%xmm1
ucomisd %xmm0,%xmm1
jbe    12c0 <odsrt+0x1a0>
movsd  %xmm1,-0x8(%rbx,%rcx,8)
movsd  %xmm0,-0x10(%rbx,%rcx,8)
lea    -0x1(%rcx),%rdx
mov    %rdx,%rcx
cmp    %rbp,%rdx
jg     12e0 <odsrt+0x1c0>
jmp    12c0 <odsrt+0x1a0>
ucomisd %xmm3,%xmm2
movapd %xmm2,%xmm0
ja     1318 <odsrt+0x1f8>
minsd  %xmm1,%xmm3
movapd %xmm3,%xmm0
lea    -0x2(%r9),%r8
add    $0xffffffffffffffff,%r9
lea    -0x1(%r15),%edi
lea    0x1(%r12),%ebp
test   %r14d,%r14d
je     139c <odsrt+0x27c>
xchg   %ax,%ax
movslq %ebp,%rax
lea    (%r11,%rax,8),%rcx
xor    %esi,%esi
nopl   0x0(%rax)
movsd  -0x8(%rcx,%rsi,8),%xmm1
add    $0xffffffffffffffff,%rsi
ucomisd %xmm1,%xmm0
ja     1340 <odsrt+0x220>
mov    %ebp,%r13d
lea    (%rsi,%r13,1),%rax
movslq %edi,%rdx
lea    (%rbx,%rdx,8),%rdx
xchg   %ax,%ax
movsd  (%rdx),%xmm2
add    $0x8,%rdx
add    $0x1,%edi
ucomisd %xmm0,%xmm2
ja     1360 <odsrt+0x240>
cmp    %eax,%edi
jge    13e5 <odsrt+0x2c5>
movsd  %xmm1,-0x8(%rdx)
movsd  %xmm2,(%rcx,%rsi,8)
mov    %eax,%ebp
jmp    1330 <odsrt+0x210>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  %xmm1,-0x8(%rdx)
movsd  %xmm2,(%rcx,%rsi,8)
mov    %eax,%ebp
movslq %ebp,%rax
lea    (%r11,%rax,8),%rcx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nop
movsd  -0x8(%rcx,%rsi,8),%xmm1
add    $0xffffffffffffffff,%rsi
ucomisd %xmm0,%xmm1
ja     13b0 <odsrt+0x290>
mov    %ebp,%r13d
lea    (%rsi,%r13,1),%rax
movslq %edi,%rdx
lea    (%rbx,%rdx,8),%rdx
xchg   %ax,%ax
movsd  (%rdx),%xmm2
add    $0x8,%rdx
add    $0x1,%edi
ucomisd %xmm2,%xmm0
ja     13d0 <odsrt+0x2b0>
cmp    %eax,%edi
jl     1390 <odsrt+0x270>
lea    (%rsi,%r13,1),%rax
add    $0x1,%rax
add    %rsi,%r13
mov    %r12d,%ecx
sub    %ebp,%ecx
sub    %r15d,%ebp
add    %esi,%ebp
not    %esi
add    %ecx,%esi
cmp    %esi,%ebp
jle    11a4 <odsrt+0x84>
mov    %r13d,(%rsp,%r9,4)
mov    %eax,%r15d
jmp    11ab <odsrt+0x8b>
mov    $0xfffffffe,%eax
jmp    141e <odsrt+0x2fe>
mov    $0xffffffff,%eax
mov    %eax,(%r12)
neg    %eax
mov    %eax,(%rsp)
lea    0xbd6(%rip),%rdi
mov    %rsp,%rsi
call   1030 <oerbla@plt>
xor    %eax,%eax
add    $0x108,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [2 x i8] c"D\00"
@.str.1 = [2 x i8] c"I\00"
@.str.2 = [6 x i8] c"ODSRT\00"
define i32 @odsrt(i8* %0, i32* %1, double* %2, i32* %3) {
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i32*
%8 = alloca double*
%9 = alloca i32*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca i32
%18 = alloca double
%19 = alloca i32
%20 = alloca [64 x i32]
%21 = alloca double
%22 = alloca i32
%23 = alloca i32
store i8* %0, i8** %6
store i32* %1, i32** %7
store double* %2, double** %8
store i32* %3, i32** %9
%24 = load double*, double** %8
%25 = getelementptr inbounds double, double* %24, i32 -1
store double* %25, double** %8
%26 = load i32*, i32** %9
store i32 0, i32* %26
store i32 -1, i32* %17
%27 = load i8*, i8** %6
%28 = call i32 @olsame(i8* %27, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%29 = icmp ne i32 %28, 0
br i1 %29, label %30, label %31
30: ; preds = %4
store i32 0, i32* %17
br label %37
31: ; preds = %4
%32 = load i8*, i8** %6
%33 = call i32 @olsame(i8* %32, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%34 = icmp ne i32 %33, 0
br i1 %34, label %35, label %36
35: ; preds = %31
store i32 1, i32* %17
br label %36
36: ; preds = %35, %31
br label %37
37: ; preds = %36, %30
%38 = load i32, i32* %17
%39 = icmp eq i32 %38, -1
br i1 %39, label %40, label %42
40: ; preds = %37
%41 = load i32*, i32** %9
store i32 -1, i32* %41
br label %49
42: ; preds = %37
%43 = load i32*, i32** %7
%44 = load i32, i32* %43
%45 = icmp slt i32 %44, 0
br i1 %45, label %46, label %48
46: ; preds = %42
%47 = load i32*, i32** %9
store i32 -2, i32* %47
br label %48
48: ; preds = %46, %42
br label %49
49: ; preds = %48, %40
%50 = load i32*, i32** %9
%51 = load i32, i32* %50
%52 = icmp ne i32 %51, 0
br i1 %52, label %53, label %58
53: ; preds = %49
%54 = load i32*, i32** %9
%55 = load i32, i32* %54
%56 = sub nsw i32 0, %55
store i32 %56, i32* %10
%57 = call i32 @oerbla(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i32* %10)
store i32 0, i32* %5
br label %536
58: ; preds = %49
%59 = load i32*, i32** %7
%60 = load i32, i32* %59
%61 = icmp sle i32 %60, 1
br i1 %61, label %62, label %63
62: ; preds = %58
store i32 0, i32* %5
br label %536
63: ; preds = %58
store i32 1, i32* %23
%64 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 0
store i32 1, i32* %64
%65 = load i32*, i32** %7
%66 = load i32, i32* %65
%67 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 1
store i32 %66, i32* %67
br label %68
68: ; preds = %534, %63
%69 = load i32, i32* %23
%70 = shl i32 %69, 1
%71 = sub nsw i32 %70, 2
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %72
%74 = load i32, i32* %73
store i32 %74, i32* %22
%75 = load i32, i32* %23
%76 = shl i32 %75, 1
%77 = sub nsw i32 %76, 1
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %78
%80 = load i32, i32* %79
store i32 %80, i32* %19
%81 = load i32, i32* %23
%82 = add nsw i32 %81, -1
store i32 %82, i32* %23
%83 = load i32, i32* %19
%84 = load i32, i32* %22
%85 = sub nsw i32 %83, %84
%86 = icmp sle i32 %85, 20
br i1 %86, label %87, label %220
87: ; preds = %68
%88 = load i32, i32* %19
%89 = load i32, i32* %22
%90 = sub nsw i32 %88, %89
%91 = icmp sgt i32 %90, 0
br i1 %91, label %92, label %220
92: ; preds = %87
%93 = load i32, i32* %17
%94 = icmp eq i32 %93, 0
br i1 %94, label %95, label %157
95: ; preds = %92
%96 = load i32, i32* %19
store i32 %96, i32* %10
%97 = load i32, i32* %22
%98 = add nsw i32 %97, 1
store i32 %98, i32* %12
br label %99
99: ; preds = %153, %95
%100 = load i32, i32* %12
%101 = load i32, i32* %10
%102 = icmp sle i32 %100, %101
br i1 %102, label %103, label %156
103: ; preds = %99
%104 = load i32, i32* %22
%105 = add nsw i32 %104, 1
store i32 %105, i32* %11
%106 = load i32, i32* %12
store i32 %106, i32* %13
br label %107
107: ; preds = %148, %103
%108 = load i32, i32* %13
%109 = load i32, i32* %11
%110 = icmp sge i32 %108, %109
br i1 %110, label %111, label %151
111: ; preds = %107
%112 = load double*, double** %8
%113 = load i32, i32* %13
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds double, double* %112, i64 %114
%116 = load double, double* %115
%117 = load double*, double** %8
%118 = load i32, i32* %13
%119 = sub nsw i32 %118, 1
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds double, double* %117, i64 %120
%122 = load double, double* %121
%123 = fcmp ogt double %116, %122
br i1 %123, label %124, label %146
124: ; preds = %111
%125 = load double*, double** %8
%126 = load i32, i32* %13
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds double, double* %125, i64 %127
%129 = load double, double* %128
store double %129, double* %21
%130 = load double*, double** %8
%131 = load i32, i32* %13
%132 = sub nsw i32 %131, 1
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds double, double* %130, i64 %133
%135 = load double, double* %134
%136 = load double*, double** %8
%137 = load i32, i32* %13
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds double, double* %136, i64 %138
store double %135, double* %139
%140 = load double, double* %21
%141 = load double*, double** %8
%142 = load i32, i32* %13
%143 = sub nsw i32 %142, 1
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds double, double* %141, i64 %144
store double %140, double* %145
br label %147
146: ; preds = %111
br label %152
147: ; preds = %124
br label %148
148: ; preds = %147
%149 = load i32, i32* %13
%150 = add nsw i32 %149, -1
store i32 %150, i32* %13
br label %107
151: ; preds = %107
br label %152
152: ; preds = %151, %146
br label %153
153: ; preds = %152
%154 = load i32, i32* %12
%155 = add nsw i32 %154, 1
store i32 %155, i32* %12
br label %99
156: ; preds = %99
br label %219
157: ; preds = %92
%158 = load i32, i32* %19
store i32 %158, i32* %10
%159 = load i32, i32* %22
%160 = add nsw i32 %159, 1
store i32 %160, i32* %12
br label %161
161: ; preds = %215, %157
%162 = load i32, i32* %12
%163 = load i32, i32* %10
%164 = icmp sle i32 %162, %163
br i1 %164, label %165, label %218
165: ; preds = %161
%166 = load i32, i32* %22
%167 = add nsw i32 %166, 1
store i32 %167, i32* %11
%168 = load i32, i32* %12
store i32 %168, i32* %13
br label %169
169: ; preds = %210, %165
%170 = load i32, i32* %13
%171 = load i32, i32* %11
%172 = icmp sge i32 %170, %171
br i1 %172, label %173, label %213
173: ; preds = %169
%174 = load double*, double** %8
%175 = load i32, i32* %13
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds double, double* %174, i64 %176
%178 = load double, double* %177
%179 = load double*, double** %8
%180 = load i32, i32* %13
%181 = sub nsw i32 %180, 1
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds double, double* %179, i64 %182
%184 = load double, double* %183
%185 = fcmp olt double %178, %184
br i1 %185, label %186, label %208
186: ; preds = %173
%187 = load double*, double** %8
%188 = load i32, i32* %13
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds double, double* %187, i64 %189
%191 = load double, double* %190
store double %191, double* %21
%192 = load double*, double** %8
%193 = load i32, i32* %13
%194 = sub nsw i32 %193, 1
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds double, double* %192, i64 %195
%197 = load double, double* %196
%198 = load double*, double** %8
%199 = load i32, i32* %13
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds double, double* %198, i64 %200
store double %197, double* %201
%202 = load double, double* %21
%203 = load double*, double** %8
%204 = load i32, i32* %13
%205 = sub nsw i32 %204, 1
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds double, double* %203, i64 %206
store double %202, double* %207
br label %209
208: ; preds = %173
br label %214
209: ; preds = %186
br label %210
210: ; preds = %209
%211 = load i32, i32* %13
%212 = add nsw i32 %211, -1
store i32 %212, i32* %13
br label %169
213: ; preds = %169
br label %214
214: ; preds = %213, %208
br label %215
215: ; preds = %214
%216 = load i32, i32* %12
%217 = add nsw i32 %216, 1
store i32 %217, i32* %12
br label %161
218: ; preds = %161
br label %219
219: ; preds = %218, %156
br label %531
220: ; preds = %87, %68
%221 = load i32, i32* %19
%222 = load i32, i32* %22
%223 = sub nsw i32 %221, %222
%224 = icmp sgt i32 %223, 20
br i1 %224, label %225, label %530
225: ; preds = %220
%226 = load double*, double** %8
%227 = load i32, i32* %22
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds double, double* %226, i64 %228
%230 = load double, double* %229
store double %230, double* %14
%231 = load double*, double** %8
%232 = load i32, i32* %19
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds double, double* %231, i64 %233
%235 = load double, double* %234
store double %235, double* %15
%236 = load i32, i32* %22
%237 = load i32, i32* %19
%238 = add nsw i32 %236, %237
%239 = sdiv i32 %238, 2
store i32 %239, i32* %12
%240 = load double*, double** %8
%241 = load i32, i32* %12
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds double, double* %240, i64 %242
%244 = load double, double* %243
store double %244, double* %16
%245 = load double, double* %14
%246 = load double, double* %15
%247 = fcmp olt double %245, %246
br i1 %247, label %248, label %264
248: ; preds = %225
%249 = load double, double* %16
%250 = load double, double* %14
%251 = fcmp olt double %249, %250
br i1 %251, label %252, label %254
252: ; preds = %248
%253 = load double, double* %14
store double %253, double* %21
br label %263
254: ; preds = %248
%255 = load double, double* %16
%256 = load double, double* %15
%257 = fcmp olt double %255, %256
br i1 %257, label %258, label %260
258: ; preds = %254
%259 = load double, double* %16
store double %259, double* %21
br label %262
260: ; preds = %254
%261 = load double, double* %15
store double %261, double* %21
br label %262
262: ; preds = %260, %258
br label %263
263: ; preds = %262, %252
br label %280
264: ; preds = %225
%265 = load double, double* %16
%266 = load double, double* %15
%267 = fcmp olt double %265, %266
br i1 %267, label %268, label %270
268: ; preds = %264
%269 = load double, double* %15
store double %269, double* %21
br label %279
270: ; preds = %264
%271 = load double, double* %16
%272 = load double, double* %14
%273 = fcmp olt double %271, %272
br i1 %273, label %274, label %276
274: ; preds = %270
%275 = load double, double* %16
store double %275, double* %21
br label %278
276: ; preds = %270
%277 = load double, double* %14
store double %277, double* %21
br label %278
278: ; preds = %276, %274
br label %279
279: ; preds = %278, %268
br label %280
280: ; preds = %279, %263
%281 = load i32, i32* %17
%282 = icmp eq i32 %281, 0
br i1 %282, label %283, label %406
283: ; preds = %280
%284 = load i32, i32* %22
%285 = sub nsw i32 %284, 1
store i32 %285, i32* %12
%286 = load i32, i32* %19
%287 = add nsw i32 %286, 1
store i32 %287, i32* %13
br label %288
288: ; preds = %316, %283
br label %289
289: ; preds = %299, %288
%290 = load i32, i32* %13
%291 = add nsw i32 %290, -1
store i32 %291, i32* %13
%292 = load double*, double** %8
%293 = load i32, i32* %13
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds double, double* %292, i64 %294
%296 = load double, double* %295
%297 = load double, double* %21
%298 = fcmp olt double %296, %297
br i1 %298, label %299, label %300
299: ; preds = %289
br label %289
300: ; preds = %289
br label %301
301: ; preds = %311, %300
%302 = load i32, i32* %12
%303 = add nsw i32 %302, 1
store i32 %303, i32* %12
%304 = load double*, double** %8
%305 = load i32, i32* %12
%306 = sext i32 %305 to i64
%307 = getelementptr inbounds double, double* %304, i64 %306
%308 = load double, double* %307
%309 = load double, double* %21
%310 = fcmp ogt double %308, %309
br i1 %310, label %311, label %312
311: ; preds = %301
br label %301
312: ; preds = %301
%313 = load i32, i32* %12
%314 = load i32, i32* %13
%315 = icmp slt i32 %313, %314
br i1 %315, label %316, label %336
316: ; preds = %312
%317 = load double*, double** %8
%318 = load i32, i32* %12
%319 = sext i32 %318 to i64
%320 = getelementptr inbounds double, double* %317, i64 %319
%321 = load double, double* %320
store double %321, double* %18
%322 = load double*, double** %8
%323 = load i32, i32* %13
%324 = sext i32 %323 to i64
%325 = getelementptr inbounds double, double* %322, i64 %324
%326 = load double, double* %325
%327 = load double*, double** %8
%328 = load i32, i32* %12
%329 = sext i32 %328 to i64
%330 = getelementptr inbounds double, double* %327, i64 %329
store double %326, double* %330
%331 = load double, double* %18
%332 = load double*, double** %8
%333 = load i32, i32* %13
%334 = sext i32 %333 to i64
%335 = getelementptr inbounds double, double* %332, i64 %334
store double %331, double* %335
br label %288
336: ; preds = %312
%337 = load i32, i32* %13
%338 = load i32, i32* %22
%339 = sub nsw i32 %337, %338
%340 = load i32, i32* %19
%341 = load i32, i32* %13
%342 = sub nsw i32 %340, %341
%343 = sub nsw i32 %342, 1
%344 = icmp sgt i32 %339, %343
br i1 %344, label %345, label %375
345: ; preds = %336
%346 = load i32, i32* %23
%347 = add nsw i32 %346, 1
store i32 %347, i32* %23
%348 = load i32, i32* %22
%349 = load i32, i32* %23
%350 = shl i32 %349, 1
%351 = sub nsw i32 %350, 2
%352 = sext i32 %351 to i64
%353 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %352
store i32 %348, i32* %353
%354 = load i32, i32* %13
%355 = load i32, i32* %23
%356 = shl i32 %355, 1
%357 = sub nsw i32 %356, 1
%358 = sext i32 %357 to i64
%359 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %358
store i32 %354, i32* %359
%360 = load i32, i32* %23
%361 = add nsw i32 %360, 1
store i32 %361, i32* %23
%362 = load i32, i32* %13
%363 = add nsw i32 %362, 1
%364 = load i32, i32* %23
%365 = shl i32 %364, 1
%366 = sub nsw i32 %365, 2
%367 = sext i32 %366 to i64
%368 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %367
store i32 %363, i32* %368
%369 = load i32, i32* %19
%370 = load i32, i32* %23
%371 = shl i32 %370, 1
%372 = sub nsw i32 %371, 1
%373 = sext i32 %372 to i64
%374 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %373
store i32 %369, i32* %374
br label %405
375: ; preds = %336
%376 = load i32, i32* %23
%377 = add nsw i32 %376, 1
store i32 %377, i32* %23
%378 = load i32, i32* %13
%379 = add nsw i32 %378, 1
%380 = load i32, i32* %23
%381 = shl i32 %380, 1
%382 = sub nsw i32 %381, 2
%383 = sext i32 %382 to i64
%384 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %383
store i32 %379, i32* %384
%385 = load i32, i32* %19
%386 = load i32, i32* %23
%387 = shl i32 %386, 1
%388 = sub nsw i32 %387, 1
%389 = sext i32 %388 to i64
%390 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %389
store i32 %385, i32* %390
%391 = load i32, i32* %23
%392 = add nsw i32 %391, 1
store i32 %392, i32* %23
%393 = load i32, i32* %22
%394 = load i32, i32* %23
%395 = shl i32 %394, 1
%396 = sub nsw i32 %395, 2
%397 = sext i32 %396 to i64
%398 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %397
store i32 %393, i32* %398
%399 = load i32, i32* %13
%400 = load i32, i32* %23
%401 = shl i32 %400, 1
%402 = sub nsw i32 %401, 1
%403 = sext i32 %402 to i64
%404 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %403
store i32 %399, i32* %404
br label %405
405: ; preds = %375, %345
br label %529
406: ; preds = %280
%407 = load i32, i32* %22
%408 = sub nsw i32 %407, 1
store i32 %408, i32* %12
%409 = load i32, i32* %19
%410 = add nsw i32 %409, 1
store i32 %410, i32* %13
br label %411
411: ; preds = %439, %406
br label %412
412: ; preds = %422, %411
%413 = load i32, i32* %13
%414 = add nsw i32 %413, -1
store i32 %414, i32* %13
%415 = load double*, double** %8
%416 = load i32, i32* %13
%417 = sext i32 %416 to i64
%418 = getelementptr inbounds double, double* %415, i64 %417
%419 = load double, double* %418
%420 = load double, double* %21
%421 = fcmp ogt double %419, %420
br i1 %421, label %422, label %423
422: ; preds = %412
br label %412
423: ; preds = %412
br label %424
424: ; preds = %434, %423
%425 = load i32, i32* %12
%426 = add nsw i32 %425, 1
store i32 %426, i32* %12
%427 = load double*, double** %8
%428 = load i32, i32* %12
%429 = sext i32 %428 to i64
%430 = getelementptr inbounds double, double* %427, i64 %429
%431 = load double, double* %430
%432 = load double, double* %21
%433 = fcmp olt double %431, %432
br i1 %433, label %434, label %435
434: ; preds = %424
br label %424
435: ; preds = %424
%436 = load i32, i32* %12
%437 = load i32, i32* %13
%438 = icmp slt i32 %436, %437
br i1 %438, label %439, label %459
439: ; preds = %435
%440 = load double*, double** %8
%441 = load i32, i32* %12
%442 = sext i32 %441 to i64
%443 = getelementptr inbounds double, double* %440, i64 %442
%444 = load double, double* %443
store double %444, double* %18
%445 = load double*, double** %8
%446 = load i32, i32* %13
%447 = sext i32 %446 to i64
%448 = getelementptr inbounds double, double* %445, i64 %447
%449 = load double, double* %448
%450 = load double*, double** %8
%451 = load i32, i32* %12
%452 = sext i32 %451 to i64
%453 = getelementptr inbounds double, double* %450, i64 %452
store double %449, double* %453
%454 = load double, double* %18
%455 = load double*, double** %8
%456 = load i32, i32* %13
%457 = sext i32 %456 to i64
%458 = getelementptr inbounds double, double* %455, i64 %457
store double %454, double* %458
br label %411
459: ; preds = %435
%460 = load i32, i32* %13
%461 = load i32, i32* %22
%462 = sub nsw i32 %460, %461
%463 = load i32, i32* %19
%464 = load i32, i32* %13
%465 = sub nsw i32 %463, %464
%466 = sub nsw i32 %465, 1
%467 = icmp sgt i32 %462, %466
br i1 %467, label %468, label %498
468: ; preds = %459
%469 = load i32, i32* %23
%470 = add nsw i32 %469, 1
store i32 %470, i32* %23
%471 = load i32, i32* %22
%472 = load i32, i32* %23
%473 = shl i32 %472, 1
%474 = sub nsw i32 %473, 2
%475 = sext i32 %474 to i64
%476 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %475
store i32 %471, i32* %476
%477 = load i32, i32* %13
%478 = load i32, i32* %23
%479 = shl i32 %478, 1
%480 = sub nsw i32 %479, 1
%481 = sext i32 %480 to i64
%482 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %481
store i32 %477, i32* %482
%483 = load i32, i32* %23
%484 = add nsw i32 %483, 1
store i32 %484, i32* %23
%485 = load i32, i32* %13
%486 = add nsw i32 %485, 1
%487 = load i32, i32* %23
%488 = shl i32 %487, 1
%489 = sub nsw i32 %488, 2
%490 = sext i32 %489 to i64
%491 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %490
store i32 %486, i32* %491
%492 = load i32, i32* %19
%493 = load i32, i32* %23
%494 = shl i32 %493, 1
%495 = sub nsw i32 %494, 1
%496 = sext i32 %495 to i64
%497 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %496
store i32 %492, i32* %497
br label %528
498: ; preds = %459
%499 = load i32, i32* %23
%500 = add nsw i32 %499, 1
store i32 %500, i32* %23
%501 = load i32, i32* %13
%502 = add nsw i32 %501, 1
%503 = load i32, i32* %23
%504 = shl i32 %503, 1
%505 = sub nsw i32 %504, 2
%506 = sext i32 %505 to i64
%507 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %506
store i32 %502, i32* %507
%508 = load i32, i32* %19
%509 = load i32, i32* %23
%510 = shl i32 %509, 1
%511 = sub nsw i32 %510, 1
%512 = sext i32 %511 to i64
%513 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %512
store i32 %508, i32* %513
%514 = load i32, i32* %23
%515 = add nsw i32 %514, 1
store i32 %515, i32* %23
%516 = load i32, i32* %22
%517 = load i32, i32* %23
%518 = shl i32 %517, 1
%519 = sub nsw i32 %518, 2
%520 = sext i32 %519 to i64
%521 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %520
store i32 %516, i32* %521
%522 = load i32, i32* %13
%523 = load i32, i32* %23
%524 = shl i32 %523, 1
%525 = sub nsw i32 %524, 1
%526 = sext i32 %525 to i64
%527 = getelementptr inbounds [64 x i32], [64 x i32]* %20, i64 0, i64 %526
store i32 %522, i32* %527
br label %528
528: ; preds = %498, %468
br label %529
529: ; preds = %528, %405
br label %530
530: ; preds = %529, %220
br label %531
531: ; preds = %530, %219
%532 = load i32, i32* %23
%533 = icmp sgt i32 %532, 0
br i1 %533, label %534, label %535
534: ; preds = %531
br label %68
535: ; preds = %531
store i32 0, i32* %5
br label %536
536: ; preds = %535, %62, %53
%537 = load i32, i32* %5
ret i32 %537
}

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