void init_alias55(double *prob, double *_g55_prob, int *_g55_else,
                  const int nalias) {
  int i, j;
  int maxi, mini;
  double maxprob, minprob;
  for (j = 0; j < nalias; j++) {
    _g55_else[j] = (-1);
    _g55_prob[j] = prob[j];
  }
  for (j = nalias; j; j--) {
    maxprob = -1.0;
    minprob = 2.0;
    for (i = 0; i < nalias; i++) {
      if (_g55_else[i] == (-1)) {
        if (_g55_prob[i] > maxprob) {
          maxprob = _g55_prob[i];
          maxi = i;
        }
        if (_g55_prob[i] < minprob) {
          minprob = _g55_prob[i];
          mini = i;
        }
      }
    }
    _g55_else[mini] = maxi;
    _g55_prob[maxi] += _g55_prob[mini] - 1.0 / nalias;
    _g55_prob[mini] *= nalias;
  }
}


x86 assembly (clang, -O0):
<init_alias55>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    115d <init_alias55+0x5d>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movl   $0xffffffff,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    111a <init_alias55+0x1a>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     128f <init_alias55+0x18f>
movsd  0xe93(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe7e(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1228 <init_alias55+0x128>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
cmpl   $0xffffffff,(%rax,%rcx,4)
jne    1215 <init_alias55+0x115>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    11dc <init_alias55+0xdc>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1210 <init_alias55+0x110>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1215 <init_alias55+0x115>
jmp    121a <init_alias55+0x11a>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    118e <init_alias55+0x8e>
mov    -0x28(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm2
movsd  0xdc0(%rip),%xmm1
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
cvtsi2sdl -0x1c(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1163 <init_alias55+0x63>
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_alias55>:
push   %rbx
mov    %ecx,%r8d
test   %ecx,%ecx
jle    127c <init_alias55+0x17c>
cmp    $0x4,%ecx
jb     112b <init_alias55+0x2b>
lea    (%rdi,%r8,8),%rax
cmp    %rsi,%rax
jbe    11cb <init_alias55+0xcb>
lea    (%rsi,%r8,8),%rax
cmp    %rdi,%rax
jbe    11cb <init_alias55+0xcb>
xor    %eax,%eax
mov    %rax,%r9
not    %r9
add    %r8,%r9
mov    %r8,%r10
and    $0x3,%r10
je     115b <init_alias55+0x5b>
nop
movl   $0xffffffff,(%rdx,%rax,4)
movq   (%rdi,%rax,8),%xmm0
movq   %xmm0,(%rsi,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%r10
jne    1140 <init_alias55+0x40>
cmp    $0x3,%r9
jb     127c <init_alias55+0x17c>
cs nopw 0x0(%rax,%rax,1)
nop
movl   $0xffffffff,(%rdx,%rax,4)
movsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movl   $0xffffffff,0x4(%rdx,%rax,4)
ff
movsd  0x8(%rdi,%rax,8),%xmm0
movsd  %xmm0,0x8(%rsi,%rax,8)
movl   $0xffffffff,0x8(%rdx,%rax,4)
ff
movsd  0x10(%rdi,%rax,8),%xmm0
movsd  %xmm0,0x10(%rsi,%rax,8)
movl   $0xffffffff,0xc(%rdx,%rax,4)
ff
movq   0x18(%rdi,%rax,8),%xmm0
movq   %xmm0,0x18(%rsi,%rax,8)
add    $0x4,%rax
cmp    %rax,%r8
jne    1170 <init_alias55+0x70>
jmp    127c <init_alias55+0x17c>
mov    %r8d,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rbx
mov    %rbx,%r9
shr    $0x2,%r9
add    $0x1,%r9
test   %rbx,%rbx
je     13ab <init_alias55+0x2ab>
mov    %r9,%r11
and    $0xfffffffffffffffe,%r11
xor    %r10d,%r10d
pcmpeqd %xmm0,%xmm0
nopw   0x0(%rax,%rax,1)
movdqu %xmm0,(%rdx,%r10,4)
movups (%rdi,%r10,8),%xmm1
movups 0x10(%rdi,%r10,8),%xmm2
movups %xmm1,(%rsi,%r10,8)
movups %xmm2,0x10(%rsi,%r10,8)
movdqu %xmm0,0x10(%rdx,%r10,4)
movupd 0x20(%rdi,%r10,8),%xmm1
movupd 0x30(%rdi,%r10,8),%xmm2
movupd %xmm1,0x20(%rsi,%r10,8)
movupd %xmm2,0x30(%rsi,%r10,8)
add    $0x8,%r10
add    $0xfffffffffffffffe,%r11
jne    1200 <init_alias55+0x100>
test   $0x1,%r9b
je     1273 <init_alias55+0x173>
pcmpeqd %xmm0,%xmm0
movdqu %xmm0,(%rdx,%r10,4)
movdqu (%rdi,%r10,8),%xmm0
movupd 0x10(%rdi,%r10,8),%xmm1
movdqu %xmm0,(%rsi,%r10,8)
movupd %xmm1,0x10(%rsi,%r10,8)
cmp    %r8,%rax
jne    112d <init_alias55+0x2d>
test   %ecx,%ecx
je     13a9 <init_alias55+0x2a9>
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
movsd  0xd6d(%rip),%xmm1
divsd  %xmm0,%xmm1
mov    %r8d,%r11d
and    $0xfffffffe,%r11d
movsd  0xd62(%rip),%xmm2
movsd  0xd62(%rip),%xmm3
mov    %ecx,%r9d
jmp    12f4 <init_alias55+0x1f4>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movslq %r10d,%rdi
mov    %eax,(%rdx,%rdi,4)
movsd  (%rsi,%rdi,8),%xmm4
subsd  %xmm1,%xmm4
movslq %eax,%rbx
addsd  (%rsi,%rbx,8),%xmm4
movsd  %xmm4,(%rsi,%rbx,8)
movsd  (%rsi,%rdi,8),%xmm4
mulsd  %xmm0,%xmm4
movsd  %xmm4,(%rsi,%rdi,8)
add    $0xffffffff,%r9d
je     13a9 <init_alias55+0x2a9>
test   %ecx,%ecx
jle    12c0 <init_alias55+0x1c0>
xor    %edi,%edi
movapd %xmm3,%xmm4
movapd %xmm2,%xmm5
cmp    $0x1,%ecx
jne    1351 <init_alias55+0x251>
test   $0x1,%r8b
je     12c0 <init_alias55+0x1c0>
cmpl   $0xffffffff,(%rdx,%rdi,4)
jne    12c0 <init_alias55+0x1c0>
movsd  (%rsi,%rdi,8),%xmm6
ucomisd %xmm5,%xmm6
cmova  %edi,%eax
ucomisd %xmm6,%xmm4
jbe    12c0 <init_alias55+0x1c0>
mov    %edi,%r10d
jmp    12c0 <init_alias55+0x1c0>
mov    %edi,%r10d
cmpl   $0xffffffff,0x4(%rdx,%rdi,4)
je     1385 <init_alias55+0x285>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movapd %xmm7,%xmm5
movapd %xmm6,%xmm4
add    $0x2,%rdi
cmp    %rdi,%r11
je     1307 <init_alias55+0x207>
cmpl   $0xffffffff,(%rdx,%rdi,4)
je     1360 <init_alias55+0x260>
movapd %xmm5,%xmm7
jmp    137a <init_alias55+0x27a>
nopl   (%rax)
movsd  (%rsi,%rdi,8),%xmm6
ucomisd %xmm5,%xmm6
cmova  %edi,%eax
movapd %xmm6,%xmm7
maxsd  %xmm5,%xmm7
ucomisd %xmm6,%xmm4
ja     132a <init_alias55+0x22a>
movapd %xmm4,%xmm6
cmpl   $0xffffffff,0x4(%rdx,%rdi,4)
jne    1340 <init_alias55+0x240>
movsd  0x8(%rsi,%rdi,8),%xmm4
ucomisd %xmm7,%xmm4
lea    0x1(%rdi),%rbx
cmova  %ebx,%eax
movapd %xmm4,%xmm5
maxsd  %xmm7,%xmm5
ucomisd %xmm4,%xmm6
jbe    1344 <init_alias55+0x244>
mov    %ebx,%r10d
jmp    1348 <init_alias55+0x248>
pop    %rbx
ret
xor    %r10d,%r10d
test   $0x1,%r9b
jne    124f <init_alias55+0x14f>
jmp    1273 <init_alias55+0x173>

LLVM IR (-O0):
define void @init_alias55(double* %0, double* %1, i32* %2, i32 %3) {
%5 = alloca double*
%6 = alloca double*
%7 = alloca i32*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca double
%14 = alloca double
store double* %0, double** %5
store double* %1, double** %6
store i32* %2, i32** %7
store i32 %3, i32* %8
store i32 0, i32* %10
br label %15
15: ; preds = %33, %4
%16 = load i32, i32* %10
%17 = load i32, i32* %8
%18 = icmp slt i32 %16, %17
br i1 %18, label %19, label %36
19: ; preds = %15
%20 = load i32*, i32** %7
%21 = load i32, i32* %10
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds i32, i32* %20, i64 %22
store i32 -1, i32* %23
%24 = load double*, double** %5
%25 = load i32, i32* %10
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds double, double* %24, i64 %26
%28 = load double, double* %27
%29 = load double*, double** %6
%30 = load i32, i32* %10
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds double, double* %29, i64 %31
store double %28, double* %32
br label %33
33: ; preds = %19
%34 = load i32, i32* %10
%35 = add nsw i32 %34, 1
store i32 %35, i32* %10
br label %15
36: ; preds = %15
%37 = load i32, i32* %8
store i32 %37, i32* %10
br label %38
38: ; preds = %117, %36
%39 = load i32, i32* %10
%40 = icmp ne i32 %39, 0
br i1 %40, label %41, label %120
41: ; preds = %38
store double -1.000000e+00, double* %13
store double 2.000000e+00, double* %14
store i32 0, i32* %9
br label %42
42: ; preds = %85, %41
%43 = load i32, i32* %9
%44 = load i32, i32* %8
%45 = icmp slt i32 %43, %44
br i1 %45, label %46, label %88
46: ; preds = %42
%47 = load i32*, i32** %7
%48 = load i32, i32* %9
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds i32, i32* %47, i64 %49
%51 = load i32, i32* %50
%52 = icmp eq i32 %51, -1
br i1 %52, label %53, label %84
53: ; preds = %46
%54 = load double*, double** %6
%55 = load i32, i32* %9
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds double, double* %54, i64 %56
%58 = load double, double* %57
%59 = load double, double* %13
%60 = fcmp ogt double %58, %59
br i1 %60, label %61, label %68
61: ; preds = %53
%62 = load double*, double** %6
%63 = load i32, i32* %9
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds double, double* %62, i64 %64
%66 = load double, double* %65
store double %66, double* %13
%67 = load i32, i32* %9
store i32 %67, i32* %11
br label %68
68: ; preds = %61, %53
%69 = load double*, double** %6
%70 = load i32, i32* %9
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds double, double* %69, i64 %71
%73 = load double, double* %72
%74 = load double, double* %14
%75 = fcmp olt double %73, %74
br i1 %75, label %76, label %83
76: ; preds = %68
%77 = load double*, double** %6
%78 = load i32, i32* %9
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds double, double* %77, i64 %79
%81 = load double, double* %80
store double %81, double* %14
%82 = load i32, i32* %9
store i32 %82, i32* %12
br label %83
83: ; preds = %76, %68
br label %84
84: ; preds = %83, %46
br label %85
85: ; preds = %84
%86 = load i32, i32* %9
%87 = add nsw i32 %86, 1
store i32 %87, i32* %9
br label %42
88: ; preds = %42
%89 = load i32, i32* %11
%90 = load i32*, i32** %7
%91 = load i32, i32* %12
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds i32, i32* %90, i64 %92
store i32 %89, i32* %93
%94 = load double*, double** %6
%95 = load i32, i32* %12
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds double, double* %94, i64 %96
%98 = load double, double* %97
%99 = load i32, i32* %8
%100 = sitofp i32 %99 to double
%101 = fdiv double 1.000000e+00, %100
%102 = fsub double %98, %101
%103 = load double*, double** %6
%104 = load i32, i32* %11
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double, double* %103, i64 %105
%107 = load double, double* %106
%108 = fadd double %107, %102
store double %108, double* %106
%109 = load i32, i32* %8
%110 = sitofp i32 %109 to double
%111 = load double*, double** %6
%112 = load i32, i32* %12
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds double, double* %111, i64 %113
%115 = load double, double* %114
%116 = fmul double %115, %110
store double %116, double* %114
br label %117
117: ; preds = %88
%118 = load i32, i32* %10
%119 = add nsw i32 %118, -1
store i32 %119, i32* %10
br label %38
120: ; preds = %38
ret void
}

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