void set_io_record(struct module *mod, double st_array[],
                   unsigned long long pre_array[],
                   unsigned long long cur_array[], int inter) {
  int i;
  for (i = 0; i < 11; i++) {
    if (cur_array[i] < pre_array[i]) {
      pre_array[i] = cur_array[i];
    }
  }
  unsigned long long rd_ios = cur_array[0] - pre_array[0];
  unsigned long long rd_merges = cur_array[1] - pre_array[1];
  unsigned long long rd_sectors = cur_array[2] - pre_array[2];
  unsigned long long rd_ticks = cur_array[3] - pre_array[3];
  ;
  unsigned long long wr_ios = cur_array[4] - pre_array[4];
  unsigned long long wr_merges = cur_array[5] - pre_array[5];
  unsigned long long wr_sectors = cur_array[6] - pre_array[6];
  unsigned long long wr_ticks = cur_array[7] - pre_array[7];
  unsigned long long ticks = cur_array[8] - pre_array[8];
  unsigned long long aveq = cur_array[9] - pre_array[9];
  double n_ios = rd_ios + wr_ios;
  double n_ticks = rd_ticks + wr_ticks;
  double n_kbytes = (rd_sectors + wr_sectors) / 2;
  st_array[0] = rd_merges / (inter * 1.0);
  st_array[1] = wr_merges / (inter * 1.0);
  st_array[2] = rd_ios / (inter * 1.0);
  st_array[3] = wr_ios / (inter * 1.0);
  st_array[4] = rd_sectors / (inter * 2.0);
  st_array[5] = wr_sectors / (inter * 2.0);
  st_array[6] = n_ios ? n_kbytes / n_ios : 0.0;
  st_array[7] = aveq / (inter * 1000);
  st_array[8] = n_ios ? n_ticks / n_ios : 0.0;
  st_array[9] = n_ios ? ticks / n_ios : 0.0;
  st_array[10] = ticks / (inter * 10.0);
  if (st_array[10] > 100.0)
    st_array[10] = 100.0;
}


x86 assembly (clang, -O0):
<set_io_record>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
cmpl   $0xb,-0x28(%rbp)
jge    1176 <set_io_record+0x76>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x18(%rbp),%rcx
movslq -0x28(%rbp),%rdx
cmp    (%rcx,%rdx,8),%rax
jae    1163 <set_io_record+0x63>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rdx
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
jmp    1168 <set_io_record+0x68>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1123 <set_io_record+0x23>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x10(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    0x18(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x18(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x20(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x20(%rbp),%rax
mov    0x28(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x28(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x58(%rbp)
mov    -0x20(%rbp),%rax
mov    0x30(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x30(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x60(%rbp)
mov    -0x20(%rbp),%rax
mov    0x38(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x38(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x68(%rbp)
mov    -0x20(%rbp),%rax
mov    0x40(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x40(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x70(%rbp)
mov    -0x20(%rbp),%rax
mov    0x48(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x48(%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x78(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x50(%rbp),%rcx
add    %rcx,%rax
movq   %rax,%xmm0
movaps 0xdaf(%rip),%xmm2
movaps %xmm2,-0xb0(%rbp)
punpckldq %xmm2,%xmm0
movapd 0xdac(%rip),%xmm1
movaps %xmm1,-0xa0(%rbp)
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x68(%rbp),%rcx
add    %rcx,%rax
movq   %rax,%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x40(%rbp),%rax
mov    -0x60(%rbp),%rcx
add    %rcx,%rax
shr    %rax
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movq   -0x38(%rbp),%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm3
divsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movq   -0x58(%rbp),%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm3
divsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movq   -0x30(%rbp),%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm3
divsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movq   -0x50(%rbp),%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm3
divsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movq   -0x40(%rbp),%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm3
addsd  %xmm3,%xmm3
divsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movq   -0x60(%rbp),%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
movsd  0xc21(%rip),%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x80(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    140d <set_io_record+0x30d>
jp     140d <set_io_record+0x30d>
jmp    1427 <set_io_record+0x327>
movsd  -0x90(%rbp),%xmm0
ff
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    1437 <set_io_record+0x337>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    1437 <set_io_record+0x337>
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x78(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   $0x3e8,%ecx,%ecx
movslq %ecx,%rcx
xor    %edx,%edx
div    %rcx
movq   %rax,%xmm0
movaps 0xbb7(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xbbb(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x80(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    14aa <set_io_record+0x3aa>
jp     14aa <set_io_record+0x3aa>
jmp    14c4 <set_io_record+0x3c4>
movsd  -0x88(%rbp),%xmm0
ff
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    14d4 <set_io_record+0x3d4>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    14d4 <set_io_record+0x3d4>
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x80(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1502 <set_io_record+0x402>
jp     1502 <set_io_record+0x402>
jmp    153b <set_io_record+0x43b>
movaps 0xb17(%rip),%xmm1
movq   -0x70(%rbp),%xmm0
punpckldq %xmm1,%xmm0
movapd 0xb16(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    154b <set_io_record+0x44b>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    154b <set_io_record+0x44b>
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movaps 0xabd(%rip),%xmm1
movq   -0x70(%rbp),%xmm0
punpckldq %xmm1,%xmm0
movapd 0xabc(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
movsd  0xa80(%rip),%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  0xa56(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    15cd <set_io_record+0x4cd>
mov    -0x10(%rbp),%rax
movsd  0xa40(%rip),%xmm0
movsd  %xmm0,0x50(%rax)
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<set_io_record>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    (%rcx),%rax
mov    (%rdx),%r15
cmp    %r15,%rax
jae    111b <set_io_record+0x1b>
mov    %rax,(%rdx)
mov    %rax,%r15
mov    0x8(%rcx),%rax
mov    0x8(%rdx),%r12
cmp    %r12,%rax
jae    112f <set_io_record+0x2f>
mov    %rax,0x8(%rdx)
mov    %rax,%r12
mov    0x10(%rcx),%rax
mov    0x10(%rdx),%r13
cmp    %r13,%rax
jae    1143 <set_io_record+0x43>
mov    %rax,0x10(%rdx)
mov    %rax,%r13
mov    0x18(%rcx),%rax
mov    0x18(%rdx),%r11
cmp    %r11,%rax
jae    1157 <set_io_record+0x57>
mov    %rax,0x18(%rdx)
mov    %rax,%r11
mov    0x20(%rcx),%rdi
mov    0x20(%rdx),%rax
cmp    %rax,%rdi
jae    116b <set_io_record+0x6b>
mov    %rdi,0x20(%rdx)
mov    %rdi,%rax
mov    0x28(%rcx),%rdi
mov    0x28(%rdx),%r14
cmp    %r14,%rdi
jae    117f <set_io_record+0x7f>
mov    %rdi,0x28(%rdx)
mov    %rdi,%r14
mov    0x30(%rcx),%rdi
mov    0x30(%rdx),%rbx
cmp    %rbx,%rdi
jae    1193 <set_io_record+0x93>
mov    %rdi,0x30(%rdx)
mov    %rdi,%rbx
mov    0x38(%rcx),%rdi
mov    0x38(%rdx),%r10
cmp    %r10,%rdi
jae    11a7 <set_io_record+0xa7>
mov    %rdi,0x38(%rdx)
mov    %rdi,%r10
mov    0x40(%rcx),%rdi
mov    0x40(%rdx),%rbp
cmp    %rbp,%rdi
jae    11bb <set_io_record+0xbb>
mov    %rdi,0x40(%rdx)
mov    %rdi,%rbp
mov    0x48(%rcx),%rdi
mov    0x48(%rdx),%r9
cmp    %r9,%rdi
jae    11cf <set_io_record+0xcf>
mov    %rdi,0x48(%rdx)
mov    %rdi,%r9
mov    0x50(%rcx),%rdi
cmp    0x50(%rdx),%rdi
jae    11dd <set_io_record+0xdd>
mov    %rdi,0x50(%rdx)
mov    0x18(%rcx),%rdx
mov    0x38(%rcx),%rdi
mov    %rdi,-0x8(%rsp)
movq   0x20(%rcx),%xmm0
movq   (%rcx),%xmm2
punpcklqdq %xmm0,%xmm2
movq   %rax,%xmm0
movq   %r15,%xmm1
punpcklqdq %xmm0,%xmm1
psubq  %xmm1,%xmm2
movq   0x28(%rcx),%xmm0
movq   0x8(%rcx),%xmm5
punpcklqdq %xmm0,%xmm5
movq   %r14,%xmm0
movq   %r12,%xmm1
punpcklqdq %xmm0,%xmm1
psubq  %xmm1,%xmm5
movq   0x30(%rcx),%xmm0
movq   0x10(%rcx),%xmm1
punpcklqdq %xmm0,%xmm1
movq   %rbx,%xmm0
movq   %r13,%xmm3
punpcklqdq %xmm0,%xmm3
psubq  %xmm3,%xmm1
mov    0x40(%rcx),%rdi
sub    %rbp,%rdi
mov    0x48(%rcx),%rax
pshufd $0xee,%xmm2,%xmm3
paddq  %xmm2,%xmm3
movq   %xmm3,%rcx
cvtsi2sd %r8d,%xmm8
movdqa 0xdb1(%rip),%xmm4
movdqa %xmm5,%xmm6
pand   %xmm4,%xmm6
movdqa 0xdb0(%rip),%xmm9
por    %xmm9,%xmm6
psrlq  $0x20,%xmm5
movdqa 0xdae(%rip),%xmm7
por    %xmm7,%xmm5
movapd 0xdb2(%rip),%xmm0
subpd  %xmm0,%xmm5
addpd  %xmm6,%xmm5
movapd %xmm8,%xmm6
unpcklpd %xmm8,%xmm6
divpd  %xmm6,%xmm5
movupd %xmm5,(%rsi)
movdqa %xmm2,%xmm5
pand   %xmm4,%xmm5
por    %xmm9,%xmm5
psrlq  $0x20,%xmm2
por    %xmm7,%xmm2
subpd  %xmm0,%xmm2
addpd  %xmm5,%xmm2
divpd  %xmm6,%xmm2
movupd %xmm2,0x10(%rsi)
movapd %xmm8,%xmm2
addsd  %xmm8,%xmm2
pand   %xmm1,%xmm4
por    %xmm9,%xmm4
movdqa %xmm1,%xmm5
psrlq  $0x20,%xmm5
por    %xmm7,%xmm5
subpd  %xmm0,%xmm5
addpd  %xmm4,%xmm5
unpcklpd %xmm2,%xmm2
divpd  %xmm2,%xmm5
movupd %xmm5,0x20(%rsi)
test   %rcx,%rcx
je     13ae <set_io_record+0x2ae>
punpckldq 0xcdb(%rip),%xmm3
subpd  0xce3(%rip),%xmm3
movapd %xmm3,%xmm4
unpckhpd %xmm3,%xmm4
addsd  %xmm3,%xmm4
add    -0x8(%rsp),%rdx
add    %r10,%r11
sub    %r11,%rdx
pshufd $0xee,%xmm1,%xmm0
paddq  %xmm1,%xmm0
movq   %xmm0,%rcx
shr    %rcx
xorps  %xmm2,%xmm2
cvtsi2sd %rcx,%xmm2
divsd  %xmm4,%xmm2
movq   %rdx,%xmm1
movq   %rdi,%xmm0
punpcklqdq %xmm0,%xmm1
movdqa 0xca9(%rip),%xmm0
pand   %xmm1,%xmm0
por    0xcad(%rip),%xmm0
psrlq  $0x20,%xmm1
por    0xcb0(%rip),%xmm1
subpd  0xcb8(%rip),%xmm1
addpd  %xmm0,%xmm1
unpcklpd %xmm4,%xmm4
movapd %xmm1,%xmm3
divpd  %xmm4,%xmm3
unpckhpd %xmm1,%xmm1
jmp    13d7 <set_io_record+0x2d7>
movq   %rdi,%xmm0
punpckldq 0xc45(%rip),%xmm0
subpd  0xc4d(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
pxor   %xmm3,%xmm3
xorpd  %xmm2,%xmm2
sub    %r9,%rax
imul   $0x3e8,%r8d,%ecx
movslq %ecx,%rdi
mov    %rax,%rdx
or     %rdi,%rdx
shr    $0x20,%rdx
je     13f7 <set_io_record+0x2f7>
xor    %edx,%edx
div    %rdi
jmp    13fb <set_io_record+0x2fb>
xor    %edx,%edx
div    %ecx
movq   %rax,%xmm0
punpckldq 0xbf8(%rip),%xmm0
subpd  0xc00(%rip),%xmm0
movapd %xmm0,%xmm4
unpckhpd %xmm0,%xmm4
addsd  %xmm0,%xmm4
movsd  %xmm2,0x30(%rsi)
movsd  %xmm4,0x38(%rsi)
movupd %xmm3,0x40(%rsi)
mulsd  0xc2c(%rip),%xmm8
divsd  %xmm8,%xmm1
movsd  0xc27(%rip),%xmm0
minsd  %xmm1,%xmm0
movsd  %xmm0,0x50(%rsi)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
%struct.module = type opaque
define void @set_io_record(%struct.module* nocapture readnone %0, double* nocapture writeonly %1, i64* nocapture %2, i64* nocapture %3, i32 %4) {
%6 = load i64, i64* %3
%7 = load i64, i64* %2
%8 = icmp ult i64 %6, %7
br i1 %8, label %9, label %10
9: ; preds = %5
store i64 %6, i64* %2
br label %10
10: ; preds = %5, %9
%11 = phi i64 [ %7, %5 ], [ %6, %9 ]
%12 = getelementptr inbounds i64, i64* %3, i64 1
%13 = load i64, i64* %12
%14 = getelementptr inbounds i64, i64* %2, i64 1
%15 = load i64, i64* %14
%16 = icmp ult i64 %13, %15
br i1 %16, label %17, label %18
17: ; preds = %10
store i64 %13, i64* %14
br label %18
18: ; preds = %17, %10
%19 = phi i64 [ %13, %17 ], [ %15, %10 ]
%20 = getelementptr inbounds i64, i64* %3, i64 2
%21 = load i64, i64* %20
%22 = getelementptr inbounds i64, i64* %2, i64 2
%23 = load i64, i64* %22
%24 = icmp ult i64 %21, %23
br i1 %24, label %25, label %26
25: ; preds = %18
store i64 %21, i64* %22
br label %26
26: ; preds = %25, %18
%27 = phi i64 [ %21, %25 ], [ %23, %18 ]
%28 = getelementptr inbounds i64, i64* %3, i64 3
%29 = load i64, i64* %28
%30 = getelementptr inbounds i64, i64* %2, i64 3
%31 = load i64, i64* %30
%32 = icmp ult i64 %29, %31
br i1 %32, label %33, label %34
33: ; preds = %26
store i64 %29, i64* %30
br label %34
34: ; preds = %33, %26
%35 = phi i64 [ %29, %33 ], [ %31, %26 ]
%36 = getelementptr inbounds i64, i64* %3, i64 4
%37 = load i64, i64* %36
%38 = getelementptr inbounds i64, i64* %2, i64 4
%39 = load i64, i64* %38
%40 = icmp ult i64 %37, %39
br i1 %40, label %41, label %42
41: ; preds = %34
store i64 %37, i64* %38
br label %42
42: ; preds = %41, %34
%43 = phi i64 [ %37, %41 ], [ %39, %34 ]
%44 = getelementptr inbounds i64, i64* %3, i64 5
%45 = load i64, i64* %44
%46 = getelementptr inbounds i64, i64* %2, i64 5
%47 = load i64, i64* %46
%48 = icmp ult i64 %45, %47
br i1 %48, label %49, label %50
49: ; preds = %42
store i64 %45, i64* %46
br label %50
50: ; preds = %49, %42
%51 = phi i64 [ %45, %49 ], [ %47, %42 ]
%52 = getelementptr inbounds i64, i64* %3, i64 6
%53 = load i64, i64* %52
%54 = getelementptr inbounds i64, i64* %2, i64 6
%55 = load i64, i64* %54
%56 = icmp ult i64 %53, %55
br i1 %56, label %57, label %58
57: ; preds = %50
store i64 %53, i64* %54
br label %58
58: ; preds = %57, %50
%59 = phi i64 [ %53, %57 ], [ %55, %50 ]
%60 = getelementptr inbounds i64, i64* %3, i64 7
%61 = load i64, i64* %60
%62 = getelementptr inbounds i64, i64* %2, i64 7
%63 = load i64, i64* %62
%64 = icmp ult i64 %61, %63
br i1 %64, label %65, label %66
65: ; preds = %58
store i64 %61, i64* %62
br label %66
66: ; preds = %65, %58
%67 = phi i64 [ %61, %65 ], [ %63, %58 ]
%68 = getelementptr inbounds i64, i64* %3, i64 8
%69 = load i64, i64* %68
%70 = getelementptr inbounds i64, i64* %2, i64 8
%71 = load i64, i64* %70
%72 = icmp ult i64 %69, %71
br i1 %72, label %73, label %74
73: ; preds = %66
store i64 %69, i64* %70
br label %74
74: ; preds = %73, %66
%75 = phi i64 [ %69, %73 ], [ %71, %66 ]
%76 = getelementptr inbounds i64, i64* %3, i64 9
%77 = load i64, i64* %76
%78 = getelementptr inbounds i64, i64* %2, i64 9
%79 = load i64, i64* %78
%80 = icmp ult i64 %77, %79
br i1 %80, label %81, label %82
81: ; preds = %74
store i64 %77, i64* %78
br label %82
82: ; preds = %81, %74
%83 = phi i64 [ %77, %81 ], [ %79, %74 ]
%84 = getelementptr inbounds i64, i64* %3, i64 10
%85 = load i64, i64* %84
%86 = getelementptr inbounds i64, i64* %2, i64 10
%87 = load i64, i64* %86
%88 = icmp ult i64 %85, %87
br i1 %88, label %89, label %90
89: ; preds = %82
store i64 %85, i64* %86
br label %90
90: ; preds = %89, %82
%91 = load i64, i64* %3
%92 = load i64, i64* %12
%93 = load i64, i64* %20
%94 = load i64, i64* %28
%95 = load i64, i64* %36
%96 = insertelement <2 x i64> poison, i64 %91, i64 0
%97 = insertelement <2 x i64> %96, i64 %95, i64 1
%98 = insertelement <2 x i64> poison, i64 %11, i64 0
%99 = insertelement <2 x i64> %98, i64 %43, i64 1
%100 = sub <2 x i64> %97, %99
%101 = load i64, i64* %44
%102 = insertelement <2 x i64> poison, i64 %92, i64 0
%103 = insertelement <2 x i64> %102, i64 %101, i64 1
%104 = insertelement <2 x i64> poison, i64 %19, i64 0
%105 = insertelement <2 x i64> %104, i64 %51, i64 1
%106 = sub <2 x i64> %103, %105
%107 = load i64, i64* %52
%108 = insertelement <2 x i64> poison, i64 %93, i64 0
%109 = insertelement <2 x i64> %108, i64 %107, i64 1
%110 = insertelement <2 x i64> poison, i64 %27, i64 0
%111 = insertelement <2 x i64> %110, i64 %59, i64 1
%112 = sub <2 x i64> %109, %111
%113 = load i64, i64* %60
%114 = load i64, i64* %68
%115 = sub i64 %114, %75
%116 = load i64, i64* %76
%117 = shufflevector <2 x i64> %100, <2 x i64> poison, <2 x i32> <i32 1, i32 undef>
%118 = add <2 x i64> %117, %100
%119 = extractelement <2 x i64> %118, i64 0
%120 = uitofp i64 %119 to double
%121 = sitofp i32 %4 to double
%122 = uitofp <2 x i64> %106 to <2 x double>
%123 = insertelement <2 x double> poison, double %121, i64 0
%124 = shufflevector <2 x double> %123, <2 x double> poison, <2 x i32> zeroinitializer
%125 = fdiv <2 x double> %122, %124
%126 = bitcast double* %1 to <2 x double>*
store <2 x double> %125, <2 x double>* %126
%127 = getelementptr inbounds double, double* %1, i64 2
%128 = uitofp <2 x i64> %100 to <2 x double>
%129 = fdiv <2 x double> %128, %124
%130 = bitcast double* %127 to <2 x double>*
store <2 x double> %129, <2 x double>* %130
%131 = fmul double %121, 2.000000e+00
%132 = getelementptr inbounds double, double* %1, i64 4
%133 = uitofp <2 x i64> %112 to <2 x double>
%134 = insertelement <2 x double> poison, double %131, i64 0
%135 = shufflevector <2 x double> %134, <2 x double> poison, <2 x i32> zeroinitializer
%136 = fdiv <2 x double> %133, %135
%137 = bitcast double* %132 to <2 x double>*
store <2 x double> %136, <2 x double>* %137
%138 = icmp eq i64 %119, 0
br i1 %138, label %139, label %141
139: ; preds = %90
%140 = uitofp i64 %115 to double
br label %158
141: ; preds = %90
%142 = add i64 %94, %113
%143 = add i64 %35, %67
%144 = sub i64 %142, %143
%145 = shufflevector <2 x i64> %112, <2 x i64> poison, <2 x i32> <i32 1, i32 undef>
%146 = add <2 x i64> %145, %112
%147 = extractelement <2 x i64> %146, i64 0
%148 = lshr i64 %147, 1
%149 = uitofp i64 %148 to double
%150 = fdiv double %149, %120
%151 = insertelement <2 x i64> poison, i64 %144, i64 0
%152 = insertelement <2 x i64> %151, i64 %115, i64 1
%153 = uitofp <2 x i64> %152 to <2 x double>
%154 = insertelement <2 x double> poison, double %120, i64 0
%155 = shufflevector <2 x double> %154, <2 x double> poison, <2 x i32> zeroinitializer
%156 = fdiv <2 x double> %153, %155
%157 = extractelement <2 x double> %153, i64 1
br label %158
158: ; preds = %139, %141
%159 = phi double [ %140, %139 ], [ %157, %141 ]
%160 = phi double [ 0.000000e+00, %139 ], [ %150, %141 ]
%161 = phi <2 x double> [ zeroinitializer, %139 ], [ %156, %141 ]
%162 = sub i64 %116, %83
%163 = mul nsw i32 %4, 1000
%164 = sext i32 %163 to i64
%165 = udiv i64 %162, %164
%166 = uitofp i64 %165 to double
%167 = getelementptr inbounds double, double* %1, i64 6
store double %160, double* %167
%168 = getelementptr inbounds double, double* %1, i64 7
store double %166, double* %168
%169 = getelementptr inbounds double, double* %1, i64 8
%170 = bitcast double* %169 to <2 x double>*
store <2 x double> %161, <2 x double>* %170
%171 = fmul double %121, 1.000000e+01
%172 = fdiv double %159, %171
%173 = fcmp ogt double %172, 1.000000e+02
%174 = select i1 %173, double 1.000000e+02, double %172
%175 = getelementptr inbounds double, double* %1, i64 10
store double %174, double* %175
ret void
}