void indexx(int n, double arrin[], int indx[]) {
  int l, j, ir, indxt, i;
  float q;
  for (j = 1; j <= n; j++)
    indx[j] = j;
  if (n == 1)
    return;
  l = (n >> 1) + 1;
  ir = n;
  for (;;) {
    if (l > 1)
      q = arrin[(indxt = indx[--l])];
    else {
      q = arrin[(indxt = indx[ir])];
      indx[ir] = indx[1];
      if (--ir == 1) {
        indx[1] = indxt;
        return;
      }
    }
    i = l;
    j = l << 1;
    while (j <= ir) {
      if (j < ir && arrin[indx[j]] < arrin[indx[j + 1]])
        j++;
      if (q < arrin[indx[j]]) {
        indx[i] = indx[j];
        j += (i = j);
      } else
        j = ir + 1;
    }
    indx[i] = indxt;
  }
}


x86 assembly (clang, -O0):
<indexx>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x1,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     113e <indexx+0x3e>
mov    -0x20(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1116 <indexx+0x16>
cmpl   $0x1,-0x4(%rbp)
jne    114d <indexx+0x4d>
jmp    12cd <indexx+0x1cd>
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x1,-0x1c(%rbp)
jle    1199 <indexx+0x99>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0xffffffff,%edx
mov    %edx,-0x1c(%rbp)
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    11f4 <indexx+0xf4>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x24(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    0x4(%rax),%edx
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
cmp    $0x1,%eax
jne    11ef <indexx+0xef>
mov    -0x28(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
jmp    12cd <indexx+0x1cd>
jmp    11f4 <indexx+0xf4>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
jg     12ba <indexx+0x1ba>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    125d <indexx+0x15d>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x20(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    125d <indexx+0x15d>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x20(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    12ac <indexx+0x1ac>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    12b5 <indexx+0x1b5>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1203 <indexx+0x103>
mov    -0x28(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    115f <indexx+0x5f>
pop    %rbp
ret

x86 assembly (clang, -O2):
<indexx>:
push   %rbp
push   %r14
push   %rbx
test   %edi,%edi
jle    1285 <indexx+0x185>
mov    %edi,%r8d
mov    $0x1,%ecx
cmp    $0x8,%edi
jb     1266 <indexx+0x166>
mov    %r8d,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rax
mov    %rax,%r10
shr    $0x3,%r10
add    $0x1,%r10
mov    %r10d,%r9d
and    $0x3,%r9d
cmp    $0x18,%rax
jae    114e <indexx+0x4e>
movdqa 0xeb9(%rip),%xmm0
xor    %eax,%eax
jmp    1219 <indexx+0x119>
and    $0xfffffffffffffffc,%r10
movdqa 0xea6(%rip),%xmm0
xor    %eax,%eax
movdqa 0xeab(%rip),%xmm8
movdqa 0xeb2(%rip),%xmm9
movdqa 0xeb9(%rip),%xmm10
movdqa 0xec1(%rip),%xmm4
movdqa 0xec9(%rip),%xmm5
movdqa 0xed1(%rip),%xmm6
movdqa 0xed9(%rip),%xmm7
movdqa 0xee1(%rip),%xmm1
nop
movdqa %xmm0,%xmm2
paddd  %xmm8,%xmm2
movdqu %xmm0,0x4(%rdx,%rax,4)
movdqu %xmm2,0x14(%rdx,%rax,4)
movdqa %xmm0,%xmm2
paddd  %xmm9,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm10,%xmm3
movdqu %xmm2,0x24(%rdx,%rax,4)
movdqu %xmm3,0x34(%rdx,%rax,4)
movdqa %xmm0,%xmm2
paddd  %xmm4,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm5,%xmm3
movdqu %xmm2,0x44(%rdx,%rax,4)
movdqu %xmm3,0x54(%rdx,%rax,4)
movdqa %xmm0,%xmm2
paddd  %xmm6,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm7,%xmm3
movdqu %xmm2,0x64(%rdx,%rax,4)
movdqu %xmm3,0x74(%rdx,%rax,4)
add    $0x20,%rax
paddd  %xmm1,%xmm0
add    $0xfffffffffffffffc,%r10
jne    11a0 <indexx+0xa0>
test   %r9,%r9
je     125d <indexx+0x15d>
movdqa 0xdea(%rip),%xmm1
movdqa 0xdf2(%rip),%xmm2
xchg   %ax,%ax
lea    0x0(,%rax,4),%rbx
movdqa %xmm0,%xmm3
paddd  %xmm1,%xmm3
or     $0x4,%rbx
movdqu %xmm0,(%rdx,%rbx,1)
movdqu %xmm3,0x10(%rdx,%rbx,1)
add    $0x8,%rax
paddd  %xmm2,%xmm0
add    $0xffffffffffffffff,%r9
jne    1230 <indexx+0x130>
cmp    %rcx,%r8
je     127c <indexx+0x17c>
or     $0x1,%rcx
add    $0x1,%r8
nopw   0x0(%rax,%rax,1)
mov    %ecx,(%rdx,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%r8
jne    1270 <indexx+0x170>
cmp    $0x1,%edi
je     1360 <indexx+0x260>
mov    %edi,%r9d
sar    %r9d
add    $0x1,%r9d
jmp    12aa <indexx+0x1aa>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r10d,%r11d
movslq %r11d,%rax
mov    %r8d,(%rdx,%rax,4)
cmp    $0x2,%r9d
jl     12c0 <indexx+0x1c0>
add    $0xffffffff,%r9d
movslq (%rdx,%r9,4),%r8
movq   (%rsi,%r8,8),%xmm0
jmp    12df <indexx+0x1df>
movslq %edi,%rdi
movslq (%rdx,%rdi,4),%r8
movq   (%rsi,%r8,8),%xmm0
mov    0x4(%rdx),%eax
mov    %eax,(%rdx,%rdi,4)
add    $0xffffffff,%edi
cmp    $0x1,%edi
je     135c <indexx+0x25c>
lea    (%r9,%r9,1),%eax
mov    %r9d,%r11d
cmp    %edi,%eax
jg     12a3 <indexx+0x1a3>
cvtsd2ss %xmm0,%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r9d,%r10d
cs nopw 0x0(%rax,%rax,1)
nop
movslq %eax,%rcx
cmp    %edi,%eax
jge    1330 <indexx+0x230>
movslq (%rdx,%rcx,4),%r11
mov    %ecx,%ebp
or     $0x1,%ebp
movslq %ebp,%r14
movslq (%rdx,%r14,4),%rbx
movsd  (%rsi,%rbx,8),%xmm1
ucomisd (%rsi,%r11,8),%xmm1
mov    %eax,%r11d
jbe    1333 <indexx+0x233>
mov    %r14,%rcx
mov    %ebp,%r11d
jmp    1333 <indexx+0x233>
nop
mov    %eax,%r11d
movslq (%rdx,%rcx,4),%rax
movsd  (%rsi,%rax,8),%xmm1
ucomisd %xmm0,%xmm1
jbe    12a0 <indexx+0x1a0>
movslq %r10d,%rcx
mov    %eax,(%rdx,%rcx,4)
lea    (%r11,%r11,1),%eax
mov    %r11d,%r10d
cmp    %edi,%eax
jle    1300 <indexx+0x200>
jmp    12a3 <indexx+0x1a3>
mov    %r8d,0x4(%rdx)
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
define void @indexx(i32 %0, double* %1, i32* %2) {
%4 = alloca i32
%5 = alloca double*
%6 = alloca i32*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca float
store i32 %0, i32* %4
store double* %1, double** %5
store i32* %2, i32** %6
store i32 1, i32* %8
br label %13
13: ; preds = %23, %3
%14 = load i32, i32* %8
%15 = load i32, i32* %4
%16 = icmp sle i32 %14, %15
br i1 %16, label %17, label %26
17: ; preds = %13
%18 = load i32, i32* %8
%19 = load i32*, i32** %6
%20 = load i32, i32* %8
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i32, i32* %19, i64 %21
store i32 %18, i32* %22
br label %23
23: ; preds = %17
%24 = load i32, i32* %8
%25 = add nsw i32 %24, 1
store i32 %25, i32* %8
br label %13
26: ; preds = %13
%27 = load i32, i32* %4
%28 = icmp eq i32 %27, 1
br i1 %28, label %29, label %30
29: ; preds = %26
br label %148
30: ; preds = %26
%31 = load i32, i32* %4
%32 = ashr i32 %31, 1
%33 = add nsw i32 %32, 1
store i32 %33, i32* %7
%34 = load i32, i32* %4
store i32 %34, i32* %9
br label %35
35: ; preds = %142, %30
%36 = load i32, i32* %7
%37 = icmp sgt i32 %36, 1
br i1 %37, label %38, label %50
38: ; preds = %35
%39 = load double*, double** %5
%40 = load i32*, i32** %6
%41 = load i32, i32* %7
%42 = add nsw i32 %41, -1
store i32 %42, i32* %7
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i32, i32* %40, i64 %43
%45 = load i32, i32* %44
store i32 %45, i32* %10
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds double, double* %39, i64 %46
%48 = load double, double* %47
%49 = fptrunc double %48 to float
store float %49, float* %12
br label %76
50: ; preds = %35
%51 = load double*, double** %5
%52 = load i32*, i32** %6
%53 = load i32, i32* %9
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i32, i32* %52, i64 %54
%56 = load i32, i32* %55
store i32 %56, i32* %10
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds double, double* %51, i64 %57
%59 = load double, double* %58
%60 = fptrunc double %59 to float
store float %60, float* %12
%61 = load i32*, i32** %6
%62 = getelementptr inbounds i32, i32* %61, i64 1
%63 = load i32, i32* %62
%64 = load i32*, i32** %6
%65 = load i32, i32* %9
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i32, i32* %64, i64 %66
store i32 %63, i32* %67
%68 = load i32, i32* %9
%69 = add nsw i32 %68, -1
store i32 %69, i32* %9
%70 = icmp eq i32 %69, 1
br i1 %70, label %71, label %75
71: ; preds = %50
%72 = load i32, i32* %10
%73 = load i32*, i32** %6
%74 = getelementptr inbounds i32, i32* %73, i64 1
store i32 %72, i32* %74
br label %148
75: ; preds = %50
br label %76
76: ; preds = %75, %38
%77 = load i32, i32* %7
store i32 %77, i32* %11
%78 = load i32, i32* %7
%79 = shl i32 %78, 1
store i32 %79, i32* %8
br label %80
80: ; preds = %141, %76
%81 = load i32, i32* %8
%82 = load i32, i32* %9
%83 = icmp sle i32 %81, %82
br i1 %83, label %84, label %142
84: ; preds = %80
%85 = load i32, i32* %8
%86 = load i32, i32* %9
%87 = icmp slt i32 %85, %86
br i1 %87, label %88, label %112
88: ; preds = %84
%89 = load double*, double** %5
%90 = load i32*, i32** %6
%91 = load i32, i32* %8
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds i32, i32* %90, i64 %92
%94 = load i32, i32* %93
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds double, double* %89, i64 %95
%97 = load double, double* %96
%98 = load double*, double** %5
%99 = load i32*, i32** %6
%100 = load i32, i32* %8
%101 = add nsw i32 %100, 1
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds i32, i32* %99, i64 %102
%104 = load i32, i32* %103
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double, double* %98, i64 %105
%107 = load double, double* %106
%108 = fcmp olt double %97, %107
br i1 %108, label %109, label %112
109: ; preds = %88
%110 = load i32, i32* %8
%111 = add nsw i32 %110, 1
store i32 %111, i32* %8
br label %112
112: ; preds = %109, %88, %84
%113 = load float, float* %12
%114 = fpext float %113 to double
%115 = load double*, double** %5
%116 = load i32*, i32** %6
%117 = load i32, i32* %8
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i32, i32* %116, i64 %118
%120 = load i32, i32* %119
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds double, double* %115, i64 %121
%123 = load double, double* %122
%124 = fcmp olt double %114, %123
br i1 %124, label %125, label %138
125: ; preds = %112
%126 = load i32*, i32** %6
%127 = load i32, i32* %8
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds i32, i32* %126, i64 %128
%130 = load i32, i32* %129
%131 = load i32*, i32** %6
%132 = load i32, i32* %11
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i32, i32* %131, i64 %133
store i32 %130, i32* %134
%135 = load i32, i32* %8
store i32 %135, i32* %11
%136 = load i32, i32* %8
%137 = add nsw i32 %136, %135
store i32 %137, i32* %8
br label %141
138: ; preds = %112
%139 = load i32, i32* %9
%140 = add nsw i32 %139, 1
store i32 %140, i32* %8
br label %141
141: ; preds = %138, %125
br label %80
142: ; preds = %80
%143 = load i32, i32* %10
%144 = load i32*, i32** %6
%145 = load i32, i32* %11
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds i32, i32* %144, i64 %146
store i32 %143, i32* %147
br label %35
148: ; preds = %71, %29
ret void
}

LLVM IR (-O2):
define void @indexx(i32 %0, double* nocapture %1, i32* nocapture %2) {
%4 = icmp slt i32 %0, 1
br i1 %4, label %85, label %5
5: ; preds = %3
%6 = add nuw i32 %0, 1
%7 = zext i32 %6 to i64
%8 = add nsw i64 %7, -1
%9 = icmp ult i64 %8, 8
br i1 %9, label %75, label %10
10: ; preds = %5
%11 = and i64 %8, -8
%12 = or i64 %11, 1
%13 = add nsw i64 %11, -8
%14 = lshr exact i64 %13, 3
%15 = add nuw nsw i64 %14, 1
%16 = and i64 %15, 3
%17 = icmp ult i64 %13, 24
br i1 %17, label %55, label %18
18: ; preds = %10
%19 = and i64 %15, 4611686018427387900
br label %20
20: ; preds = %20, %18
%21 = phi i64 [ 0, %18 ], [ %51, %20 ]
%22 = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %18 ], [ %52, %20 ]
%23 = phi i64 [ 0, %18 ], [ %53, %20 ]
%24 = or i64 %21, 1
%25 = add <4 x i32> %22, <i32 4, i32 4, i32 4, i32 4>
%26 = getelementptr inbounds i32, i32* %2, i64 %24
%27 = bitcast i32* %26 to <4 x i32>*
store <4 x i32> %22, <4 x i32>* %27
%28 = getelementptr inbounds i32, i32* %26, i64 4
%29 = bitcast i32* %28 to <4 x i32>*
store <4 x i32> %25, <4 x i32>* %29
%30 = add <4 x i32> %22, <i32 8, i32 8, i32 8, i32 8>
%31 = or i64 %21, 9
%32 = add <4 x i32> %22, <i32 12, i32 12, i32 12, i32 12>
%33 = getelementptr inbounds i32, i32* %2, i64 %31
%34 = bitcast i32* %33 to <4 x i32>*
store <4 x i32> %30, <4 x i32>* %34
%35 = getelementptr inbounds i32, i32* %33, i64 4
%36 = bitcast i32* %35 to <4 x i32>*
store <4 x i32> %32, <4 x i32>* %36
%37 = add <4 x i32> %22, <i32 16, i32 16, i32 16, i32 16>
%38 = or i64 %21, 17
%39 = add <4 x i32> %22, <i32 20, i32 20, i32 20, i32 20>
%40 = getelementptr inbounds i32, i32* %2, i64 %38
%41 = bitcast i32* %40 to <4 x i32>*
store <4 x i32> %37, <4 x i32>* %41
%42 = getelementptr inbounds i32, i32* %40, i64 4
%43 = bitcast i32* %42 to <4 x i32>*
store <4 x i32> %39, <4 x i32>* %43
%44 = add <4 x i32> %22, <i32 24, i32 24, i32 24, i32 24>
%45 = or i64 %21, 25
%46 = add <4 x i32> %22, <i32 28, i32 28, i32 28, i32 28>
%47 = getelementptr inbounds i32, i32* %2, i64 %45
%48 = bitcast i32* %47 to <4 x i32>*
store <4 x i32> %44, <4 x i32>* %48
%49 = getelementptr inbounds i32, i32* %47, i64 4
%50 = bitcast i32* %49 to <4 x i32>*
store <4 x i32> %46, <4 x i32>* %50
%51 = add nuw i64 %21, 32
%52 = add <4 x i32> %22, <i32 32, i32 32, i32 32, i32 32>
%53 = add i64 %23, 4
%54 = icmp eq i64 %53, %19
br i1 %54, label %55, label %20
55: ; preds = %20, %10
%56 = phi i64 [ 0, %10 ], [ %51, %20 ]
%57 = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %10 ], [ %52, %20 ]
%58 = icmp eq i64 %16, 0
br i1 %58, label %73, label %59
59: ; preds = %55, %59
%60 = phi i64 [ %69, %59 ], [ %56, %55 ]
%61 = phi <4 x i32> [ %70, %59 ], [ %57, %55 ]
%62 = phi i64 [ %71, %59 ], [ 0, %55 ]
%63 = or i64 %60, 1
%64 = add <4 x i32> %61, <i32 4, i32 4, i32 4, i32 4>
%65 = getelementptr inbounds i32, i32* %2, i64 %63
%66 = bitcast i32* %65 to <4 x i32>*
store <4 x i32> %61, <4 x i32>* %66
%67 = getelementptr inbounds i32, i32* %65, i64 4
%68 = bitcast i32* %67 to <4 x i32>*
store <4 x i32> %64, <4 x i32>* %68
%69 = add nuw i64 %60, 8
%70 = add <4 x i32> %61, <i32 8, i32 8, i32 8, i32 8>
%71 = add i64 %62, 1
%72 = icmp eq i64 %71, %16
br i1 %72, label %73, label %59
73: ; preds = %59, %55
%74 = icmp eq i64 %8, %11
br i1 %74, label %83, label %75
75: ; preds = %5, %73
%76 = phi i64 [ 1, %5 ], [ %12, %73 ]
br label %77
77: ; preds = %75, %77
%78 = phi i64 [ %81, %77 ], [ %76, %75 ]
%79 = getelementptr inbounds i32, i32* %2, i64 %78
%80 = trunc i64 %78 to i32
store i32 %80, i32* %79
%81 = add nuw nsw i64 %78, 1
%82 = icmp eq i64 %81, %7
br i1 %82, label %83, label %77
83: ; preds = %77, %73
%84 = icmp eq i32 %0, 1
br i1 %84, label %160, label %85
85: ; preds = %3, %83
%86 = ashr i32 %0, 1
%87 = add nsw i32 %86, 1
%88 = getelementptr inbounds i32, i32* %2, i64 1
br label %89
89: ; preds = %156, %85
%90 = phi i32 [ %87, %85 ], [ %113, %156 ]
%91 = phi i32 [ %0, %85 ], [ %114, %156 ]
%92 = icmp sgt i32 %90, 1
br i1 %92, label %93, label %101
93: ; preds = %89
%94 = add nsw i32 %90, -1
%95 = zext i32 %94 to i64
%96 = getelementptr inbounds i32, i32* %2, i64 %95
%97 = load i32, i32* %96
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds double, double* %1, i64 %98
%100 = load double, double* %99
br label %112
101: ; preds = %89
%102 = sext i32 %91 to i64
%103 = getelementptr inbounds i32, i32* %2, i64 %102
%104 = load i32, i32* %103
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double, double* %1, i64 %105
%107 = load double, double* %106
%108 = load i32, i32* %88
store i32 %108, i32* %103
%109 = add nsw i32 %91, -1
%110 = icmp eq i32 %109, 1
br i1 %110, label %111, label %112
111: ; preds = %101
store i32 %104, i32* %88
br label %160
112: ; preds = %101, %93
%113 = phi i32 [ %94, %93 ], [ %90, %101 ]
%114 = phi i32 [ %91, %93 ], [ %109, %101 ]
%115 = phi i32 [ %97, %93 ], [ %104, %101 ]
%116 = phi double [ %100, %93 ], [ %107, %101 ]
%117 = shl i32 %113, 1
%118 = icmp sgt i32 %117, %114
br i1 %118, label %156, label %119
119: ; preds = %112
%120 = fptrunc double %116 to float
%121 = fpext float %120 to double
br label %122
122: ; preds = %119, %151
%123 = phi i32 [ %113, %119 ], [ %144, %151 ]
%124 = phi i32 [ %117, %119 ], [ %154, %151 ]
%125 = icmp slt i32 %124, %114
%126 = sext i32 %124 to i64
br i1 %125, label %127, label %142
127: ; preds = %122
%128 = getelementptr inbounds i32, i32* %2, i64 %126
%129 = load i32, i32* %128
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds double, double* %1, i64 %130
%132 = load double, double* %131
%133 = or i32 %124, 1
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds i32, i32* %2, i64 %134
%136 = load i32, i32* %135
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds double, double* %1, i64 %137
%139 = load double, double* %138
%140 = fcmp olt double %132, %139
br i1 %140, label %141, label %142
141: ; preds = %127
br label %142
142: ; preds = %122, %141, %127
%143 = phi i64 [ %134, %141 ], [ %126, %127 ], [ %126, %122 ]
%144 = phi i32 [ %133, %141 ], [ %124, %127 ], [ %124, %122 ]
%145 = getelementptr inbounds i32, i32* %2, i64 %143
%146 = load i32, i32* %145
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds double, double* %1, i64 %147
%149 = load double, double* %148
%150 = fcmp ogt double %149, %121
br i1 %150, label %151, label %156
151: ; preds = %142
%152 = sext i32 %123 to i64
%153 = getelementptr inbounds i32, i32* %2, i64 %152
store i32 %146, i32* %153
%154 = shl nsw i32 %144, 1
%155 = icmp sgt i32 %154, %114
br i1 %155, label %156, label %122
156: ; preds = %142, %151, %112
%157 = phi i32 [ %113, %112 ], [ %123, %142 ], [ %144, %151 ]
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds i32, i32* %2, i64 %158
store i32 %115, i32* %159
br label %89
160: ; preds = %83, %111
ret void
}