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


x86 assembly (clang, -O0):
<set_ts_cache_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
movq   (%rax),%xmm0
movaps 0xee9(%rip),%xmm2
punpckldq %xmm2,%xmm0
movapd 0xeed(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
movsd  0xeb6(%rip),%xmm3
divsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movq   0x10(%rax),%xmm0
punpckldq %xmm2,%xmm0
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe86(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x20(%rbp),%rax
cmpq   $0x0,0x28(%rax)
jne    11ea <set_ts_cache_record+0xea>
mov    -0x20(%rbp),%rax
cmpq   $0x0,0x8(%rax)
je     11ea <set_ts_cache_record+0xea>
mov    -0x20(%rbp),%rax
movq   0x8(%rax),%xmm0
movaps 0xe5b(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xe5f(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe28(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
jmp    12da <set_ts_cache_record+0x1da>
mov    -0x20(%rbp),%rax
mov    0x18(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x18(%rcx),%rax
jbe    12d5 <set_ts_cache_record+0x1d5>
mov    -0x20(%rbp),%rcx
mov    0x18(%rcx),%rax
mov    0x20(%rcx),%rdx
mov    -0x18(%rbp),%rsi
mov    0x18(%rsi),%rcx
mov    0x20(%rsi),%rsi
sub    %rsi,%rdx
movq   %rdx,%xmm0
movaps 0xde9(%rip),%xmm3
punpckldq %xmm3,%xmm0
movapd 0xded(%rip),%xmm2
subpd  %xmm2,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xdbe(%rip),%xmm1
mulsd  %xmm1,%xmm0
sub    %rcx,%rax
movq   %rax,%xmm4
punpckldq %xmm3,%xmm4
subpd  %xmm2,%xmm4
movaps %xmm4,%xmm5
unpckhpd %xmm4,%xmm4
addsd  %xmm5,%xmm4
divsd  %xmm4,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rcx
mov    0x18(%rcx),%rax
mov    0x28(%rcx),%rdx
mov    -0x18(%rbp),%rsi
mov    0x18(%rsi),%rcx
mov    0x28(%rsi),%rsi
sub    %rsi,%rdx
movq   %rdx,%xmm0
punpckldq %xmm3,%xmm0
subpd  %xmm2,%xmm0
movaps %xmm0,%xmm4
unpckhpd %xmm0,%xmm0
addsd  %xmm4,%xmm0
mulsd  %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,0x30(%rax)
jmp    12da <set_ts_cache_record+0x1da>
pop    %rbp
ret

x86 assembly (clang, -O2):
<set_ts_cache_record>:
movsd  (%rcx),%xmm2
movapd 0xef4(%rip),%xmm0
unpcklps %xmm0,%xmm2
movapd 0xef9(%rip),%xmm1
subpd  %xmm1,%xmm2
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
addsd  %xmm2,%xmm3
movsd  0xef1(%rip),%xmm2
divsd  %xmm2,%xmm3
movsd  %xmm3,(%rsi)
movsd  0x10(%rcx),%xmm3
unpcklps %xmm0,%xmm3
subpd  %xmm1,%xmm3
movapd %xmm3,%xmm4
unpckhpd %xmm3,%xmm4
addsd  %xmm3,%xmm4
divsd  %xmm2,%xmm4
movsd  %xmm4,0x10(%rsi)
mov    0x28(%rcx),%rax
test   %rax,%rax
je     11ee <set_ts_cache_record+0xee>
mov    0x18(%rcx),%rdi
sub    0x18(%rdx),%rdi
jbe    122e <set_ts_cache_record+0x12e>
mov    0x20(%rcx),%rcx
sub    0x20(%rdx),%rcx
movq   %rcx,%xmm2
punpckldq %xmm0,%xmm2
subpd  %xmm1,%xmm2
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
addsd  %xmm2,%xmm3
movsd  0xe8c(%rip),%xmm2
mulsd  %xmm2,%xmm3
movq   %rdi,%xmm4
punpckldq %xmm0,%xmm4
subpd  %xmm1,%xmm4
movapd %xmm4,%xmm5
unpckhpd %xmm4,%xmm5
addsd  %xmm4,%xmm5
divsd  %xmm5,%xmm3
movsd  %xmm3,0x8(%rsi)
sub    0x28(%rdx),%rax
movq   %rax,%xmm3
punpckldq %xmm0,%xmm3
subpd  %xmm1,%xmm3
movapd %xmm3,%xmm0
unpckhpd %xmm3,%xmm0
addsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm5,%xmm0
mov    $0x6,%eax
jmp    1229 <set_ts_cache_record+0x129>
mov    0x8(%rcx),%rdi
test   %rdi,%rdi
je     1165 <set_ts_cache_record+0x65>
movq   %rdi,%xmm1
punpckldq 0xdf8(%rip),%xmm1
subpd  0xe00(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addsd  %xmm1,%xmm0
divsd  0xdfc(%rip),%xmm0
mov    $0x1,%eax
movsd  %xmm0,(%rsi,%rax,8)
ret

LLVM IR (-O0):
%struct.module = type opaque
define void @set_ts_cache_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 0
%13 = load i64, i64* %12
%14 = uitofp i64 %13 to double
%15 = fdiv double %14, 1.000000e+01
%16 = load double*, double** %7
%17 = getelementptr inbounds double, double* %16, i64 0
store double %15, double* %17
%18 = load i64*, i64** %9
%19 = getelementptr inbounds i64, i64* %18, i64 2
%20 = load i64, i64* %19
%21 = uitofp i64 %20 to double
%22 = fdiv double %21, 1.000000e+01
%23 = load double*, double** %7
%24 = getelementptr inbounds double, double* %23, i64 2
store double %22, double* %24
%25 = load i64*, i64** %9
%26 = getelementptr inbounds i64, i64* %25, i64 5
%27 = load i64, i64* %26
%28 = icmp eq i64 %27, 0
br i1 %28, label %29, label %42
29: ; preds = %5
%30 = load i64*, i64** %9
%31 = getelementptr inbounds i64, i64* %30, i64 1
%32 = load i64, i64* %31
%33 = icmp ne i64 %32, 0
br i1 %33, label %34, label %42
34: ; preds = %29
%35 = load i64*, i64** %9
%36 = getelementptr inbounds i64, i64* %35, i64 1
%37 = load i64, i64* %36
%38 = uitofp i64 %37 to double
%39 = fdiv double %38, 1.000000e+01
%40 = load double*, double** %7
%41 = getelementptr inbounds double, double* %40, i64 1
store double %39, double* %41
br label %92
42: ; preds = %29, %5
%43 = load i64*, i64** %9
%44 = getelementptr inbounds i64, i64* %43, i64 3
%45 = load i64, i64* %44
%46 = load i64*, i64** %8
%47 = getelementptr inbounds i64, i64* %46, i64 3
%48 = load i64, i64* %47
%49 = icmp ugt i64 %45, %48
br i1 %49, label %50, label %91
50: ; preds = %42
%51 = load i64*, i64** %9
%52 = getelementptr inbounds i64, i64* %51, i64 4
%53 = load i64, i64* %52
%54 = load i64*, i64** %8
%55 = getelementptr inbounds i64, i64* %54, i64 4
%56 = load i64, i64* %55
%57 = sub i64 %53, %56
%58 = uitofp i64 %57 to double
%59 = fmul double %58, 1.000000e+02
%60 = load i64*, i64** %9
%61 = getelementptr inbounds i64, i64* %60, i64 3
%62 = load i64, i64* %61
%63 = load i64*, i64** %8
%64 = getelementptr inbounds i64, i64* %63, i64 3
%65 = load i64, i64* %64
%66 = sub i64 %62, %65
%67 = uitofp i64 %66 to double
%68 = fdiv double %59, %67
%69 = load double*, double** %7
%70 = getelementptr inbounds double, double* %69, i64 1
store double %68, double* %70
%71 = load i64*, i64** %9
%72 = getelementptr inbounds i64, i64* %71, i64 5
%73 = load i64, i64* %72
%74 = load i64*, i64** %8
%75 = getelementptr inbounds i64, i64* %74, i64 5
%76 = load i64, i64* %75
%77 = sub i64 %73, %76
%78 = uitofp i64 %77 to double
%79 = fmul double %78, 1.000000e+02
%80 = load i64*, i64** %9
%81 = getelementptr inbounds i64, i64* %80, i64 3
%82 = load i64, i64* %81
%83 = load i64*, i64** %8
%84 = getelementptr inbounds i64, i64* %83, i64 3
%85 = load i64, i64* %84
%86 = sub i64 %82, %85
%87 = uitofp i64 %86 to double
%88 = fdiv double %79, %87
%89 = load double*, double** %7
%90 = getelementptr inbounds double, double* %89, i64 6
store double %88, double* %90
br label %91
91: ; preds = %50, %42
br label %92
92: ; preds = %91, %34
ret void
}

LLVM IR (-O2):
%struct.module = type opaque
define void @set_ts_cache_record(%struct.module* nocapture readnone %0, double* nocapture writeonly %1, i64* nocapture %2, i64* nocapture %3, i32 %4) {
%6 = load i64, i64* %3
%7 = uitofp i64 %6 to double
%8 = fdiv double %7, 1.000000e+01
store double %8, double* %1
%9 = getelementptr inbounds i64, i64* %3, i64 2
%10 = load i64, i64* %9
%11 = uitofp i64 %10 to double
%12 = fdiv double %11, 1.000000e+01
%13 = getelementptr inbounds double, double* %1, i64 2
store double %12, double* %13
%14 = getelementptr inbounds i64, i64* %3, i64 5
%15 = load i64, i64* %14
%16 = icmp eq i64 %15, 0
br i1 %16, label %17, label %24
17: ; preds = %5
%18 = getelementptr inbounds i64, i64* %3, i64 1
%19 = load i64, i64* %18
%20 = icmp eq i64 %19, 0
br i1 %20, label %24, label %21
21: ; preds = %17
%22 = uitofp i64 %19 to double
%23 = fdiv double %22, 1.000000e+01
br label %48
24: ; preds = %17, %5
%25 = getelementptr inbounds i64, i64* %3, i64 3
%26 = load i64, i64* %25
%27 = getelementptr inbounds i64, i64* %2, i64 3
%28 = load i64, i64* %27
%29 = icmp ugt i64 %26, %28
br i1 %29, label %30, label %52
30: ; preds = %24
%31 = getelementptr inbounds i64, i64* %3, i64 4
%32 = load i64, i64* %31
%33 = getelementptr inbounds i64, i64* %2, i64 4
%34 = load i64, i64* %33
%35 = sub i64 %32, %34
%36 = uitofp i64 %35 to double
%37 = fmul double %36, 1.000000e+02
%38 = sub i64 %26, %28
%39 = uitofp i64 %38 to double
%40 = fdiv double %37, %39
%41 = getelementptr inbounds double, double* %1, i64 1
store double %40, double* %41
%42 = getelementptr inbounds i64, i64* %2, i64 5
%43 = load i64, i64* %42
%44 = sub i64 %15, %43
%45 = uitofp i64 %44 to double
%46 = fmul double %45, 1.000000e+02
%47 = fdiv double %46, %39
br label %48
48: ; preds = %21, %30
%49 = phi i64 [ 6, %30 ], [ 1, %21 ]
%50 = phi double [ %47, %30 ], [ %23, %21 ]
%51 = getelementptr inbounds double, double* %1, i64 %49
store double %50, double* %51
br label %52
52: ; preds = %48, %24
ret void
}