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


x86 assembly (clang, -O0):
<set_swift_esi_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    (%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%rax
jb     1186 <set_swift_esi_record+0x86>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
movq   %rax,%xmm0
movaps 0xec7(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xecb(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe94(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1191 <set_swift_esi_record+0x91>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    -0x18(%rbp),%rcx
sub    0x10(%rcx),%rax
mov    -0x20(%rbp),%rcx
mov    0x20(%rcx),%rcx
mov    -0x18(%rbp),%rdx
sub    0x20(%rdx),%rcx
cmp    %rcx,%rax
ja     11ef <set_swift_esi_record+0xef>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rax)
jmp    14ff <set_swift_esi_record+0x3ff>
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x8(%rcx),%rax
jb     12ae <set_swift_esi_record+0x1ae>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%rax
jbe    12ae <set_swift_esi_record+0x1ae>
mov    -0x20(%rbp),%rsi
mov    (%rsi),%rax
mov    0x8(%rsi),%rdx
mov    -0x18(%rbp),%rdi
mov    (%rdi),%rcx
mov    0x8(%rdi),%r8
sub    %r8,%rdx
mov    0x20(%rsi),%rsi
mov    0x20(%rdi),%rdi
sub    %rdi,%rsi
add    %rsi,%rdx
movq   %rdx,%xmm0
movaps 0xdc4(%rip),%xmm3
punpckldq %xmm3,%xmm0
movapd 0xdc8(%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,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0xd6d(%rip),%xmm0
mulsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
jmp    12ba <set_swift_esi_record+0x1ba>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%rax
jbe    1379 <set_swift_esi_record+0x279>
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x10(%rcx),%rax
jb     1379 <set_swift_esi_record+0x279>
mov    -0x20(%rbp),%rdi
mov    (%rdi),%rax
mov    0x10(%rdi),%rdx
mov    -0x18(%rbp),%rsi
mov    (%rsi),%rcx
mov    0x10(%rsi),%r8
sub    %r8,%rdx
mov    0x20(%rdi),%rdi
mov    0x20(%rsi),%rsi
sub    %rdi,%rsi
add    %rsi,%rdx
movq   %rdx,%xmm0
movaps 0xcf9(%rip),%xmm3
punpckldq %xmm3,%xmm0
movapd 0xcfd(%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,0x10(%rax)
mov    -0x10(%rbp),%rax
movsd  0xca2(%rip),%xmm0
mulsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1385 <set_swift_esi_record+0x285>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%rax
jbe    1436 <set_swift_esi_record+0x336>
mov    -0x20(%rbp),%rax
mov    0x18(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x18(%rcx),%rax
jb     1436 <set_swift_esi_record+0x336>
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rax
mov    0x18(%rcx),%rdx
mov    -0x18(%rbp),%rsi
mov    (%rsi),%rcx
mov    0x18(%rsi),%rsi
sub    %rsi,%rdx
movq   %rdx,%xmm0
movaps 0xc3c(%rip),%xmm3
punpckldq %xmm3,%xmm0
movapd 0xc40(%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,0x18(%rax)
mov    -0x10(%rbp),%rax
movsd  0xbe5(%rip),%xmm0
mulsd  0x18(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
jmp    1442 <set_swift_esi_record+0x342>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%rax
jbe    14f3 <set_swift_esi_record+0x3f3>
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rax
mov    -0x18(%rbp),%rcx
cmp    0x20(%rcx),%rax
jb     14f3 <set_swift_esi_record+0x3f3>
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rax
mov    0x20(%rcx),%rdx
mov    -0x18(%rbp),%rsi
mov    (%rsi),%rcx
mov    0x20(%rsi),%rsi
sub    %rsi,%rdx
movq   %rdx,%xmm0
movaps 0xb7f(%rip),%xmm3
punpckldq %xmm3,%xmm0
movapd 0xb83(%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,0x20(%rax)
mov    -0x10(%rbp),%rax
movsd  0xb28(%rip),%xmm0
mulsd  0x20(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
jmp    14ff <set_swift_esi_record+0x3ff>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<set_swift_esi_record>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    (%rcx),%r10
mov    (%rdx),%r11
xorpd  %xmm0,%xmm0
mov    %r10,%rax
sub    %r11,%rax
jb     1148 <set_swift_esi_record+0x48>
movq   %rax,%xmm1
punpckldq 0xed8(%rip),%xmm1
subpd  0xee0(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r8d,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rsi)
mov    0x10(%rcx),%r14
mov    0x20(%rcx),%r8
mov    0x10(%rdx),%r15
mov    0x20(%rdx),%r9
mov    %r14,%rax
sub    %r15,%rax
mov    %r8,%r12
sub    %r9,%r12
cmp    %r12,%rax
jbe    1309 <set_swift_esi_record+0x209>
mov    0x8(%rcx),%rdi
mov    0x8(%rdx),%rbx
xorpd  %xmm0,%xmm0
cmp    %rbx,%rdi
jb     11de <set_swift_esi_record+0xde>
mov    %r10,%r13
sub    %r11,%r13
jbe    11de <set_swift_esi_record+0xde>
add    %r12,%rdi
sub    %rbx,%rdi
movq   %rdi,%xmm1
movdqa 0xe63(%rip),%xmm2
punpckldq %xmm2,%xmm1
movapd 0xe67(%rip),%xmm3
subpd  %xmm3,%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addsd  %xmm1,%xmm0
movq   %r13,%xmm1
punpckldq %xmm2,%xmm1
subpd  %xmm3,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
addsd  %xmm1,%xmm2
divsd  %xmm2,%xmm0
mulsd  0xe42(%rip),%xmm0
movsd  %xmm0,0x8(%rsi)
sub    %r11,%r10
jbe    1319 <set_swift_esi_record+0x219>
xorpd  %xmm0,%xmm0
xorpd  %xmm1,%xmm1
cmp    %r15,%r14
jb     124d <set_swift_esi_record+0x14d>
sub    %r8,%rax
add    %r9,%rax
movq   %rax,%xmm2
movdqa 0xdf4(%rip),%xmm3
punpckldq %xmm3,%xmm2
movapd 0xdf8(%rip),%xmm4
subpd  %xmm4,%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
addsd  %xmm2,%xmm1
movq   %r10,%xmm2
punpckldq %xmm3,%xmm2
subpd  %xmm4,%xmm2
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
addsd  %xmm2,%xmm3
divsd  %xmm3,%xmm1
mulsd  0xdd3(%rip),%xmm1
movsd  %xmm1,0x10(%rsi)
mov    0x18(%rcx),%rax
sub    0x18(%rdx),%rax
jb     12aa <set_swift_esi_record+0x1aa>
movq   %rax,%xmm1
movdqa 0xd97(%rip),%xmm2
punpckldq %xmm2,%xmm1
movapd 0xd9b(%rip),%xmm3
subpd  %xmm3,%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addsd  %xmm1,%xmm0
movq   %r10,%xmm1
punpckldq %xmm2,%xmm1
subpd  %xmm3,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
addsd  %xmm1,%xmm2
divsd  %xmm2,%xmm0
mulsd  0xd76(%rip),%xmm0
movsd  %xmm0,0x18(%rsi)
cmp    %r9,%r8
jb     1322 <set_swift_esi_record+0x222>
movq   %r12,%xmm0
movdqa 0xd3f(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xd43(%rip),%xmm2
subpd  %xmm2,%xmm0
movapd %xmm0,%xmm3
unpckhpd %xmm0,%xmm3
addsd  %xmm0,%xmm3
movq   %r10,%xmm0
punpckldq %xmm1,%xmm0
subpd  %xmm2,%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
divsd  %xmm1,%xmm3
mulsd  0xd1e(%rip),%xmm3
movsd  %xmm3,0x20(%rsi)
jmp    132a <set_swift_esi_record+0x22a>
xorpd  %xmm0,%xmm0
movupd %xmm0,0x18(%rsi)
movupd %xmm0,0x8(%rsi)
jmp    132a <set_swift_esi_record+0x22a>
xorpd  %xmm0,%xmm0
movupd %xmm0,0x10(%rsi)
movq   $0x0,0x20(%rsi)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

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

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