void set_nginx_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 < 3; i++) {
    if (cur_array[i] >= pre_array[i]) {
      st_array[i] = cur_array[i] - pre_array[i];
    }
  }
  for (i = 3; i < 7; i++) {
    st_array[i] = cur_array[i];
  }
  if (cur_array[2] >= pre_array[2]) {
    st_array[7] = (cur_array[2] - pre_array[2]) * 1.0 / inter;
  }
  if (cur_array[8] >= pre_array[8]) {
    if (cur_array[2] > pre_array[2]) {
      st_array[8] =
          (cur_array[8] - pre_array[8]) * 1.0 / (cur_array[2] - pre_array[2]);
    }
  }
}


x86 assembly (clang, -O0):
<set_nginx_record>:
push   %rbp
mov    %rsp,%rbp
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   $0x3,-0x28(%rbp)
jge    11a5 <set_nginx_record+0xa5>
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
jb     1192 <set_nginx_record+0x92>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    -0x18(%rbp),%rcx
mov    (%rcx,%rdx,8),%rcx
sub    %rcx,%rax
movq   %rax,%xmm0
movaps 0xea6(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xeaa(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1197 <set_nginx_record+0x97>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    111f <set_nginx_record+0x1f>
movl   $0x3,-0x28(%rbp)
cmpl   $0x7,-0x28(%rbp)
jge    1200 <set_nginx_record+0x100>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
movq   (%rax,%rcx,8),%xmm0
movaps 0xe46(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xe4a(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11ac <set_nginx_record+0xac>
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x10(%rcx),%rax
jb     126e <set_nginx_record+0x16e>
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x10(%rcx),%rcx
sub    %rcx,%rax
movq   %rax,%xmm0
movaps 0xddb(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xddf(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xda8(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x20(%rbp),%rax
mov    0x40(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x40(%rcx),%rax
jb     1309 <set_nginx_record+0x209>
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x10(%rcx),%rax
jbe    1304 <set_nginx_record+0x204>
mov    -0x20(%rbp),%rcx
mov    0x10(%rcx),%rax
mov    0x40(%rcx),%rdx
mov    -0x18(%rbp),%rsi
mov    0x10(%rsi),%rcx
mov    0x40(%rsi),%rsi
sub    %rsi,%rdx
movq   %rdx,%xmm0
movaps 0xd4f(%rip),%xmm3
punpckldq %xmm3,%xmm0
movapd 0xd53(%rip),%xmm2
subpd  %xmm2,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
sub    %rcx,%rax
movq   %rax,%xmm1
punpckldq %xmm3,%xmm1
subpd  %xmm2,%xmm1
movaps %xmm1,%xmm2
unpckhpd %xmm1,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
jmp    1309 <set_nginx_record+0x209>
pop    %rbp
ret

x86 assembly (clang, -O2):
<set_nginx_record>:
mov    (%rcx),%rax
sub    (%rdx),%rax
jb     112d <set_nginx_record+0x2d>
movq   %rax,%xmm0
punpckldq 0xeeb(%rip),%xmm0
subpd  0xef3(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi)
mov    0x8(%rcx),%rax
sub    0x8(%rdx),%rax
jb     115d <set_nginx_record+0x5d>
movq   %rax,%xmm0
punpckldq 0xebc(%rip),%xmm0
subpd  0xec4(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsi)
mov    0x10(%rcx),%rdi
mov    0x10(%rdx),%r9
mov    %rdi,%rax
sub    %r9,%rax
jb     1193 <set_nginx_record+0x93>
movq   %rax,%xmm0
punpckldq 0xe86(%rip),%xmm0
subpd  0xe8e(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsi)
mov    %rdi,%rax
movdqu 0x18(%rcx),%xmm0
movdqa 0xe7d(%rip),%xmm1
movdqa %xmm0,%xmm2
pand   %xmm1,%xmm2
movdqa 0xe7d(%rip),%xmm3
por    %xmm3,%xmm2
psrlq  $0x20,%xmm0
movdqa 0xe7c(%rip),%xmm4
por    %xmm4,%xmm0
movapd 0xe80(%rip),%xmm5
subpd  %xmm5,%xmm0
addpd  %xmm2,%xmm0
movupd %xmm0,0x18(%rsi)
movdqu 0x28(%rcx),%xmm0
pand   %xmm0,%xmm1
por    %xmm3,%xmm1
psrlq  $0x20,%xmm0
por    %xmm4,%xmm0
subpd  %xmm5,%xmm0
addpd  %xmm1,%xmm0
movupd %xmm0,0x28(%rsi)
sub    %r9,%rax
jb     1237 <set_nginx_record+0x137>
movq   %rax,%xmm0
punpckldq 0xdee(%rip),%xmm0
subpd  0xdf6(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %r8d,%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,0x38(%rsi)
mov    0x40(%rcx),%rax
sub    0x40(%rdx),%rax
jb     1291 <set_nginx_record+0x191>
sub    %r9,%rdi
jbe    1291 <set_nginx_record+0x191>
movq   %rax,%xmm0
movdqa 0xdad(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xdb1(%rip),%xmm2
subpd  %xmm2,%xmm0
movapd %xmm0,%xmm3
unpckhpd %xmm0,%xmm3
addsd  %xmm0,%xmm3
movq   %rdi,%xmm0
punpckldq %xmm1,%xmm0
subpd  %xmm2,%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
divsd  %xmm1,%xmm3
movsd  %xmm3,0x40(%rsi)
ret

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

LLVM IR (-O2):
%struct.module = type opaque
define void @set_nginx_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 %12, label %9
9: ; preds = %5
%10 = sub i64 %6, %7
%11 = uitofp i64 %10 to double
store double %11, double* %1
br label %12
12: ; preds = %5, %9
%13 = getelementptr inbounds i64, i64* %3, i64 1
%14 = load i64, i64* %13
%15 = getelementptr inbounds i64, i64* %2, i64 1
%16 = load i64, i64* %15
%17 = icmp ult i64 %14, %16
br i1 %17, label %22, label %18
18: ; preds = %12
%19 = sub i64 %14, %16
%20 = uitofp i64 %19 to double
%21 = getelementptr inbounds double, double* %1, i64 1
store double %20, double* %21
br label %22
22: ; preds = %18, %12
%23 = getelementptr inbounds i64, i64* %3, i64 2
%24 = load i64, i64* %23
%25 = getelementptr inbounds i64, i64* %2, i64 2
%26 = load i64, i64* %25
%27 = icmp ult i64 %24, %26
br i1 %27, label %32, label %28
28: ; preds = %22
%29 = sub i64 %24, %26
%30 = uitofp i64 %29 to double
%31 = getelementptr inbounds double, double* %1, i64 2
store double %30, double* %31
br label %32
32: ; preds = %28, %22
%33 = getelementptr inbounds i64, i64* %3, i64 3
%34 = getelementptr inbounds double, double* %1, i64 3
%35 = bitcast i64* %33 to <2 x i64>*
%36 = load <2 x i64>, <2 x i64>* %35
%37 = uitofp <2 x i64> %36 to <2 x double>
%38 = bitcast double* %34 to <2 x double>*
store <2 x double> %37, <2 x double>* %38
%39 = getelementptr inbounds i64, i64* %3, i64 5
%40 = getelementptr inbounds double, double* %1, i64 5
%41 = bitcast i64* %39 to <2 x i64>*
%42 = load <2 x i64>, <2 x i64>* %41
%43 = uitofp <2 x i64> %42 to <2 x double>
%44 = bitcast double* %40 to <2 x double>*
store <2 x double> %43, <2 x double>* %44
br i1 %27, label %51, label %45
45: ; preds = %32
%46 = sub i64 %24, %26
%47 = uitofp i64 %46 to double
%48 = sitofp i32 %4 to double
%49 = fdiv double %47, %48
%50 = getelementptr inbounds double, double* %1, i64 7
store double %49, double* %50
br label %51
51: ; preds = %45, %32
%52 = getelementptr inbounds i64, i64* %3, i64 8
%53 = load i64, i64* %52
%54 = getelementptr inbounds i64, i64* %2, i64 8
%55 = load i64, i64* %54
%56 = icmp uge i64 %53, %55
%57 = icmp ugt i64 %24, %26
%58 = select i1 %56, i1 %57, i1 false
br i1 %58, label %59, label %66
59: ; preds = %51
%60 = sub i64 %53, %55
%61 = uitofp i64 %60 to double
%62 = sub i64 %24, %26
%63 = uitofp i64 %62 to double
%64 = fdiv double %61, %63
%65 = getelementptr inbounds double, double* %1, i64 8
store double %64, double* %65
br label %66
66: ; preds = %59, %51
ret void
}