#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ malloc(int);
double *init_rates(unsigned int n_rates) {
  double *subst_rates = (double *)malloc(3 * n_rates * sizeof(double));
  unsigned int k;
  unsigned int offset = 0;
  for (k = 0; k < n_rates; ++k)
    subst_rates[offset + k] = 1.0;
  offset += n_rates;
  for (k = 0; k < n_rates; ++k) {
    subst_rates[offset + k] = 1.0;
    const double skew = 5.;
    if (k % 2 == 0)
      subst_rates[offset + k] *= skew;
    else if (k != n_rates - 1)
      subst_rates[offset + k] /= skew;
  }
  offset += n_rates;
  for (k = 0; k < n_rates - 1; ++k)
    subst_rates[offset + k] = (k % 2 == 0) ? 1e-3 : 1e3;
  subst_rates[offset + n_rates - 1] = 1.0;
  return subst_rates;
}


x86 assembly (clang, -O0):
<init_rates>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
imul   $0x3,-0x4(%rbp),%eax
mov    %eax,%eax
shl    $0x3,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x4(%rbp),%eax
jae    1171 <init_rates+0x61>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    -0x14(%rbp),%ecx
mov    %ecx,%ecx
movsd  0xea2(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    113e <init_rates+0x2e>
mov    -0x4(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x4(%rbp),%eax
jae    1230 <init_rates+0x120>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    -0x14(%rbp),%ecx
mov    %ecx,%ecx
movsd  0xe5f(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xe6a(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x14(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    11e5 <init_rates+0xd5>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    -0x14(%rbp),%ecx
mov    %ecx,%ecx
movsd  0xe42(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    121d <init_rates+0x10d>
mov    -0x14(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     1218 <init_rates+0x108>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    -0x14(%rbp),%ecx
mov    %ecx,%ecx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xe09(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    121d <init_rates+0x10d>
jmp    1222 <init_rates+0x112>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1181 <init_rates+0x71>
mov    -0x4(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jae    12a8 <init_rates+0x198>
mov    -0x14(%rbp),%eax
and    $0x1,%eax
movsd  0xda9(%rip),%xmm0
movsd  0xda9(%rip),%xmm1
movsd  %xmm1,-0x30(%rbp)
cmp    $0x0,%eax
movsd  %xmm0,-0x28(%rbp)
je     1284 <init_rates+0x174>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    -0x14(%rbp),%ecx
mov    %ecx,%ecx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1240 <init_rates+0x130>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    -0x4(%rbp),%ecx
sub    $0x1,%ecx
mov    %ecx,%ecx
movsd  0xd41(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_rates>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
mov    %edi,%r14d
lea    0x0(,%r14,8),%eax
lea    (%rax,%rax,2),%edi
call   1030 <malloc@plt>
mov    $0xffffffff,%r8d
movabs $0x3ff0000000000000,%r9
test   %r14d,%r14d
je     1270 <init_rates+0x160>
mov    %r14d,%r15d
cmp    $0x4,%r14d
jae    1154 <init_rates+0x44>
xor    %edi,%edi
jmp    1250 <init_rates+0x140>
mov    %r15d,%edi
and    $0xfffffffc,%edi
lea    -0x4(%rdi),%rcx
mov    %rcx,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
mov    %edx,%ebx
and    $0x7,%ebx
cmp    $0x1c,%rcx
jae    117b <init_rates+0x6b>
xor    %ecx,%ecx
jmp    1215 <init_rates+0x105>
and    $0xfffffffffffffff8,%rdx
xor    %ecx,%ecx
movdqa 0xe77(%rip),%xmm0
nopl   0x0(%rax)
movdqu %xmm0,(%rax,%rcx,8)
movdqu %xmm0,0x10(%rax,%rcx,8)
movdqu %xmm0,0x20(%rax,%rcx,8)
movdqu %xmm0,0x30(%rax,%rcx,8)
movdqu %xmm0,0x40(%rax,%rcx,8)
movdqu %xmm0,0x50(%rax,%rcx,8)
movdqu %xmm0,0x60(%rax,%rcx,8)
movdqu %xmm0,0x70(%rax,%rcx,8)
movdqu %xmm0,0x80(%rax,%rcx,8)
movdqu %xmm0,0x90(%rax,%rcx,8)
movdqu %xmm0,0xa0(%rax,%rcx,8)
movdqu %xmm0,0xb0(%rax,%rcx,8)
movdqu %xmm0,0xc0(%rax,%rcx,8)
movdqu %xmm0,0xd0(%rax,%rcx,8)
movdqu %xmm0,0xe0(%rax,%rcx,8)
movdqu %xmm0,0xf0(%rax,%rcx,8)
add    $0x20,%rcx
add    $0xfffffffffffffff8,%rdx
jne    1190 <init_rates+0x80>
test   %rbx,%rbx
je     1244 <init_rates+0x134>
lea    (%rax,%rcx,8),%rcx
add    $0x10,%rcx
shl    $0x5,%rbx
xor    %edx,%edx
movdqa 0xdd0(%rip),%xmm0
movdqu %xmm0,-0x10(%rcx,%rdx,1)
movdqu %xmm0,(%rcx,%rdx,1)
add    $0x20,%rdx
cmp    %rdx,%rbx
jne    1230 <init_rates+0x120>
cmp    %r15,%rdi
je     125d <init_rates+0x14d>
nopl   0x0(%rax)
mov    %r9,(%rax,%rdi,8)
add    $0x1,%rdi
cmp    %rdi,%r15
jne    1250 <init_rates+0x140>
test   %r14d,%r14d
je     1270 <init_rates+0x160>
lea    -0x1(%r14),%r8d
cmp    $0x1,%r14d
jne    1277 <init_rates+0x167>
xor    %edx,%edx
jmp    12c9 <init_rates+0x1b9>
xor    %esi,%esi
jmp    1305 <init_rates+0x1f5>
mov    %r15d,%ecx
and    $0xfffffffe,%ecx
lea    -0x1(%r8),%r12
xor    %edx,%edx
movabs $0x4014000000000000,%r10
lea    0xd7c(%rip),%r11
mov    %r14d,%ebx
nopw   0x0(%rax,%rax,1)
mov    %ebx,%esi
mov    %r10,(%rax,%rsi,8)
lea    0x1(%rbx),%esi
xor    %edi,%edi
cmp    %rdx,%r12
sete   %dil
movq   (%r11,%rdi,8),%xmm0
movq   %xmm0,(%rax,%rsi,8)
add    $0x2,%rdx
add    $0x2,%ebx
cmp    %rdx,%rcx
jne    12a0 <init_rates+0x190>
test   $0x1,%r15b
je     12f8 <init_rates+0x1e8>
lea    (%rdx,%r14,1),%ecx
mov    %r9,(%rax,%rcx,8)
test   $0x1,%dl
jne    12e6 <init_rates+0x1d6>
movq   0xd7c(%rip),%xmm0
jmp    12f3 <init_rates+0x1e3>
cmp    %r8,%rdx
je     12f8 <init_rates+0x1e8>
movq   0xd75(%rip),%xmm0
movq   %xmm0,(%rax,%rcx,8)
test   %r8d,%r8d
je     1418 <init_rates+0x308>
lea    (%r14,%r14,1),%esi
mov    %r8d,%edi
cmp    $0x4,%r8d
jae    1316 <init_rates+0x206>
xor    %r8d,%r8d
jmp    13ae <init_rates+0x29e>
lea    -0x1(%rdi),%rcx
xor    %r8d,%r8d
mov    %esi,%ebx
add    %ecx,%ebx
jb     13ae <init_rates+0x29e>
shr    $0x20,%rcx
jne    13ae <init_rates+0x29e>
mov    %edi,%r8d
and    $0xfffffffc,%r8d
mov    %esi,%ebx
xor    %ecx,%ecx
movdqa 0xcdc(%rip),%xmm0
pxor   %xmm1,%xmm1
movdqa 0xce0(%rip),%xmm2
movdqa 0xce8(%rip),%xmm3
movaps 0xcf1(%rip),%xmm4
nop
lea    0x1(%rcx),%edx
movd   %ecx,%xmm5
movd   %edx,%xmm6
punpckldq %xmm6,%xmm5
pand   %xmm0,%xmm5
pcmpeqd %xmm1,%xmm5
pxor   %xmm6,%xmm6
pcmpgtd %xmm5,%xmm6
punpckldq %xmm6,%xmm5
movdqa %xmm5,%xmm6
pandn  %xmm2,%xmm6
pand   %xmm3,%xmm5
por    %xmm6,%xmm5
lea    (%rbx,%rcx,1),%edx
movdqu %xmm5,(%rax,%rdx,8)
movups %xmm4,0x10(%rax,%rdx,8)
add    $0x4,%rcx
cmp    %rcx,%r8
jne    1360 <init_rates+0x250>
cmp    %rdi,%r8
je     1418 <init_rates+0x308>
mov    %r8,%rcx
not    %rcx
test   $0x1,%dil
je     13d0 <init_rates+0x2c0>
lea    (%rsi,%r8,1),%edx
movabs $0x3f50624dd2f1a9fc,%rbx
62 50 3f
mov    %rbx,(%rax,%rdx,8)
or     $0x1,%r8
add    %rdi,%rcx
je     1418 <init_rates+0x308>
movq   0xc93(%rip),%xmm0
movq   0xc93(%rip),%xmm2
test   $0x1,%r8b
je     13f1 <init_rates+0x2e1>
movdqa %xmm2,%xmm1
jmp    13f9 <init_rates+0x2e9>
movdqa %xmm0,%xmm1
movdqa %xmm2,%xmm0
add    %r8d,%esi
sub    %r8,%rdi
nop
mov    %esi,%ecx
movq   %xmm1,(%rax,%rcx,8)
lea    0x1(%rsi),%ecx
movq   %xmm0,(%rax,%rcx,8)
add    $0x2,%esi
add    $0xfffffffffffffffe,%rdi
jne    1400 <init_rates+0x2f0>
lea    (%r14,%r14,2),%ecx
add    $0xffffffff,%ecx
mov    %r9,(%rax,%rcx,8)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define double* @init_rates(i32 %0) {
%2 = alloca i32
%3 = alloca double*
%4 = alloca i32
%5 = alloca i32
%6 = alloca double
store i32 %0, i32* %2
%7 = load i32, i32* %2
%8 = mul i32 3, %7
%9 = zext i32 %8 to i64
%10 = mul i64 %9, 8
%11 = trunc i64 %10 to i32
%12 = call i64 @malloc(i32 %11)
%13 = inttoptr i64 %12 to double*
store double* %13, double** %3
store i32 0, i32* %5
store i32 0, i32* %4
br label %14
14: ; preds = %25, %1
%15 = load i32, i32* %4
%16 = load i32, i32* %2
%17 = icmp ult i32 %15, %16
br i1 %17, label %18, label %28
18: ; preds = %14
%19 = load double*, double** %3
%20 = load i32, i32* %5
%21 = load i32, i32* %4
%22 = add i32 %20, %21
%23 = zext i32 %22 to i64
%24 = getelementptr inbounds double, double* %19, i64 %23
store double 1.000000e+00, double* %24
br label %25
25: ; preds = %18
%26 = load i32, i32* %4
%27 = add i32 %26, 1
store i32 %27, i32* %4
br label %14
28: ; preds = %14
%29 = load i32, i32* %2
%30 = load i32, i32* %5
%31 = add i32 %30, %29
store i32 %31, i32* %5
store i32 0, i32* %4
br label %32
32: ; preds = %71, %28
%33 = load i32, i32* %4
%34 = load i32, i32* %2
%35 = icmp ult i32 %33, %34
br i1 %35, label %36, label %74
36: ; preds = %32
%37 = load double*, double** %3
%38 = load i32, i32* %5
%39 = load i32, i32* %4
%40 = add i32 %38, %39
%41 = zext i32 %40 to i64
%42 = getelementptr inbounds double, double* %37, i64 %41
store double 1.000000e+00, double* %42
store double 5.000000e+00, double* %6
%43 = load i32, i32* %4
%44 = urem i32 %43, 2
%45 = icmp eq i32 %44, 0
br i1 %45, label %46, label %55
46: ; preds = %36
%47 = load double*, double** %3
%48 = load i32, i32* %5
%49 = load i32, i32* %4
%50 = add i32 %48, %49
%51 = zext i32 %50 to i64
%52 = getelementptr inbounds double, double* %47, i64 %51
%53 = load double, double* %52
%54 = fmul double %53, 5.000000e+00
store double %54, double* %52
br label %70
55: ; preds = %36
%56 = load i32, i32* %4
%57 = load i32, i32* %2
%58 = sub i32 %57, 1
%59 = icmp ne i32 %56, %58
br i1 %59, label %60, label %69
60: ; preds = %55
%61 = load double*, double** %3
%62 = load i32, i32* %5
%63 = load i32, i32* %4
%64 = add i32 %62, %63
%65 = zext i32 %64 to i64
%66 = getelementptr inbounds double, double* %61, i64 %65
%67 = load double, double* %66
%68 = fdiv double %67, 5.000000e+00
store double %68, double* %66
br label %69
69: ; preds = %60, %55
br label %70
70: ; preds = %69, %46
br label %71
71: ; preds = %70
%72 = load i32, i32* %4
%73 = add i32 %72, 1
store i32 %73, i32* %4
br label %32
74: ; preds = %32
%75 = load i32, i32* %2
%76 = load i32, i32* %5
%77 = add i32 %76, %75
store i32 %77, i32* %5
store i32 0, i32* %4
br label %78
78: ; preds = %95, %74
%79 = load i32, i32* %4
%80 = load i32, i32* %2
%81 = sub i32 %80, 1
%82 = icmp ult i32 %79, %81
br i1 %82, label %83, label %98
83: ; preds = %78
%84 = load i32, i32* %4
%85 = urem i32 %84, 2
%86 = icmp eq i32 %85, 0
%87 = zext i1 %86 to i64
%88 = select i1 %86, double 1.000000e-03, double 1.000000e+03
%89 = load double*, double** %3
%90 = load i32, i32* %5
%91 = load i32, i32* %4
%92 = add i32 %90, %91
%93 = zext i32 %92 to i64
%94 = getelementptr inbounds double, double* %89, i64 %93
store double %88, double* %94
br label %95
95: ; preds = %83
%96 = load i32, i32* %4
%97 = add i32 %96, 1
store i32 %97, i32* %4
br label %78
98: ; preds = %78
%99 = load double*, double** %3
%100 = load i32, i32* %5
%101 = load i32, i32* %2
%102 = add i32 %100, %101
%103 = sub i32 %102, 1
%104 = zext i32 %103 to i64
%105 = getelementptr inbounds double, double* %99, i64 %104
store double 1.000000e+00, double* %105
%106 = load double*, double** %3
ret double* %106
}

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