void set_proc_record(struct module *mod, double st_array[],
                     unsigned long long pre_array[],
                     unsigned long long cur_array[], int inter) {
  if (cur_array[2] > pre_array[2]) {
    st_array[2] = cur_array[2] - pre_array[2];
  } else {
    st_array[2] = 0;
    return;
  }
  if (cur_array[0] >= pre_array[0]) {
    st_array[0] = (cur_array[0] - pre_array[0]) * 100.0 / st_array[2];
  } else {
    st_array[0] = 0;
  }
  if (cur_array[1] >= pre_array[1]) {
    st_array[1] = (cur_array[1] - pre_array[1]) * 100.0 / st_array[2];
  } else {
    st_array[1] = 0;
  }
  st_array[3] = cur_array[4] * 100.0 / cur_array[3];
  st_array[4] = cur_array[4];
  if (cur_array[5] >= pre_array[5]) {
    st_array[5] = (cur_array[5] - pre_array[5]) * 1.0 / inter;
  } else {
    st_array[5] = 0;
  }
  if (cur_array[6] >= pre_array[6]) {
    st_array[6] = (cur_array[6] - pre_array[6]) * 1.0 / inter;
  } else {
    st_array[5] = 0;
  }
}


x86 assembly (clang, -O0):
<set_proc_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)
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x10(%rcx),%rax
jbe    1176 <set_proc_record+0x76>
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x10(%rcx),%rcx
sub    %rcx,%rax
movq   %rax,%xmm0
movaps 0xeb3(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xeb7(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1187 <set_proc_record+0x87>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
jmp    13fe <set_proc_record+0x2fe>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%rax
jb     11f5 <set_proc_record+0xf5>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
movq   %rax,%xmm0
movaps 0xe48(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xe4c(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe45(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
divsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1200 <set_proc_record+0x100>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x8(%rcx),%rax
jb     1273 <set_proc_record+0x173>
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rcx),%rcx
sub    %rcx,%rax
movq   %rax,%xmm0
movaps 0xdcb(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xdcf(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xdc8(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
divsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
jmp    127f <set_proc_record+0x17f>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
movq   0x20(%rax),%xmm0
movaps 0xd71(%rip),%xmm2
punpckldq %xmm2,%xmm0
movapd 0xd75(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
movsd  0xd6e(%rip),%xmm3
mulsd  %xmm3,%xmm0
movq   0x18(%rax),%xmm3
punpckldq %xmm2,%xmm3
subpd  %xmm1,%xmm3
movaps %xmm3,%xmm4
unpckhpd %xmm3,%xmm3
addsd  %xmm4,%xmm3
divsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x20(%rbp),%rax
movq   0x20(%rax),%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x20(%rbp),%rax
mov    0x28(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x28(%rcx),%rax
jb     1373 <set_proc_record+0x273>
mov    -0x20(%rbp),%rax
mov    0x28(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x28(%rcx),%rcx
sub    %rcx,%rax
movq   %rax,%xmm0
movaps 0xccb(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xccf(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xcd0(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
jmp    137f <set_proc_record+0x27f>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x20(%rbp),%rax
mov    0x30(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x30(%rcx),%rax
jb     13f2 <set_proc_record+0x2f2>
mov    -0x20(%rbp),%rax
mov    0x30(%rax),%rax
mov    -0x18(%rbp),%rcx
mov    0x30(%rcx),%rcx
sub    %rcx,%rax
movq   %rax,%xmm0
movaps 0xc4c(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xc50(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xc51(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
jmp    13fe <set_proc_record+0x2fe>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<set_proc_record>:
mov    0x10(%rcx),%rax
sub    0x10(%rdx),%rax
jbe    125e <set_proc_record+0x15e>
movq   %rax,%xmm1
punpckldq 0xee5(%rip),%xmm1
subpd  0xeed(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rsi)
mov    (%rcx),%rax
xorpd  %xmm1,%xmm1
xorpd  %xmm2,%xmm2
sub    (%rdx),%rax
jb     1171 <set_proc_record+0x71>
movq   %rax,%xmm3
punpckldq 0xeaf(%rip),%xmm3
subpd  0xeb7(%rip),%xmm3
movapd %xmm3,%xmm2
unpckhpd %xmm3,%xmm2
addsd  %xmm3,%xmm2
mulsd  0xeb3(%rip),%xmm2
divsd  %xmm0,%xmm2
movsd  %xmm2,(%rsi)
mov    0x8(%rcx),%rax
sub    0x8(%rdx),%rax
jb     11ac <set_proc_record+0xac>
movq   %rax,%xmm2
punpckldq 0xe74(%rip),%xmm2
subpd  0xe7c(%rip),%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
addsd  %xmm2,%xmm1
mulsd  0xe78(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsi)
movsd  0x20(%rcx),%xmm0
movapd 0xe42(%rip),%xmm1
unpcklps %xmm1,%xmm0
movapd 0xe47(%rip),%xmm2
subpd  %xmm2,%xmm0
movapd %xmm0,%xmm3
unpckhpd %xmm0,%xmm3
addsd  %xmm0,%xmm3
movsd  0xe3f(%rip),%xmm0
mulsd  %xmm3,%xmm0
movsd  0x18(%rcx),%xmm4
unpcklps %xmm1,%xmm4
subpd  %xmm2,%xmm4
movapd %xmm4,%xmm1
unpckhpd %xmm4,%xmm1
addsd  %xmm4,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rsi)
movsd  %xmm3,0x20(%rsi)
mov    0x28(%rcx),%rax
xorpd  %xmm1,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %r8d,%xmm0
sub    0x28(%rdx),%rax
jb     1246 <set_proc_record+0x146>
movq   %rax,%xmm2
punpckldq 0xdd2(%rip),%xmm2
subpd  0xdda(%rip),%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x28(%rsi)
mov    0x30(%rcx),%rax
sub    0x30(%rdx),%rax
jae    1267 <set_proc_record+0x167>
movq   $0x0,0x28(%rsi)
ret
movq   $0x0,0x10(%rsi)
ret
movq   %rax,%xmm1
punpckldq 0xd8c(%rip),%xmm1
subpd  0xd94(%rip),%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
addsd  %xmm1,%xmm2
divsd  %xmm0,%xmm2
movsd  %xmm2,0x30(%rsi)
ret

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

LLVM IR (-O2):
%struct.module = type opaque
define void @set_proc_record(%struct.module* nocapture readnone %0, double* nocapture %1, i64* nocapture %2, i64* nocapture %3, i32 %4) {
%6 = getelementptr inbounds i64, i64* %3, i64 2
%7 = load i64, i64* %6
%8 = getelementptr inbounds i64, i64* %2, i64 2
%9 = load i64, i64* %8
%10 = icmp ugt i64 %7, %9
br i1 %10, label %11, label %18
11: ; preds = %5
%12 = sub i64 %7, %9
%13 = uitofp i64 %12 to double
%14 = getelementptr inbounds double, double* %1, i64 2
store double %13, double* %14
%15 = load i64, i64* %3
%16 = load i64, i64* %2
%17 = icmp ult i64 %15, %16
br i1 %17, label %25, label %20
18: ; preds = %5
%19 = getelementptr inbounds double, double* %1, i64 2
store double 0.000000e+00, double* %19
br label %75
20: ; preds = %11
%21 = sub i64 %15, %16
%22 = uitofp i64 %21 to double
%23 = fmul double %22, 1.000000e+02
%24 = fdiv double %23, %13
br label %25
25: ; preds = %11, %20
%26 = phi double [ %24, %20 ], [ 0.000000e+00, %11 ]
store double %26, double* %1
%27 = getelementptr inbounds i64, i64* %3, i64 1
%28 = load i64, i64* %27
%29 = getelementptr inbounds i64, i64* %2, i64 1
%30 = load i64, i64* %29
%31 = icmp ult i64 %28, %30
br i1 %31, label %37, label %32
32: ; preds = %25
%33 = sub i64 %28, %30
%34 = uitofp i64 %33 to double
%35 = fmul double %34, 1.000000e+02
%36 = fdiv double %35, %13
br label %37
37: ; preds = %25, %32
%38 = phi double [ %36, %32 ], [ 0.000000e+00, %25 ]
%39 = getelementptr inbounds double, double* %1, i64 1
store double %38, double* %39
%40 = getelementptr inbounds i64, i64* %3, i64 4
%41 = load i64, i64* %40
%42 = uitofp i64 %41 to double
%43 = fmul double %42, 1.000000e+02
%44 = getelementptr inbounds i64, i64* %3, i64 3
%45 = load i64, i64* %44
%46 = uitofp i64 %45 to double
%47 = fdiv double %43, %46
%48 = getelementptr inbounds double, double* %1, i64 3
store double %47, double* %48
%49 = getelementptr inbounds double, double* %1, i64 4
store double %42, double* %49
%50 = getelementptr inbounds i64, i64* %3, i64 5
%51 = load i64, i64* %50
%52 = getelementptr inbounds i64, i64* %2, i64 5
%53 = load i64, i64* %52
%54 = icmp ult i64 %51, %53
br i1 %54, label %60, label %55
55: ; preds = %37
%56 = sub i64 %51, %53
%57 = uitofp i64 %56 to double
%58 = sitofp i32 %4 to double
%59 = fdiv double %57, %58
br label %60
60: ; preds = %37, %55
%61 = phi double [ %59, %55 ], [ 0.000000e+00, %37 ]
%62 = getelementptr inbounds double, double* %1, i64 5
store double %61, double* %62
%63 = getelementptr inbounds i64, i64* %3, i64 6
%64 = load i64, i64* %63
%65 = getelementptr inbounds i64, i64* %2, i64 6
%66 = load i64, i64* %65
%67 = icmp ult i64 %64, %66
br i1 %67, label %74, label %68
68: ; preds = %60
%69 = sub i64 %64, %66
%70 = uitofp i64 %69 to double
%71 = sitofp i32 %4 to double
%72 = fdiv double %70, %71
%73 = getelementptr inbounds double, double* %1, i64 6
store double %72, double* %73
br label %75
74: ; preds = %60
store double 0.000000e+00, double* %62
br label %75
75: ; preds = %18, %74, %68
ret void
}