void mergeArrays(double *arr1, double *arr2, int *arr3, int *arr4, double *arr5,
                 int *n1, int *n2, int *n3) {
  int i = 0, j = 0, k = 0, l = 0, m = 0;
  while (i < *n1 && j < *n2) {
    if (arr1[i] <= arr2[j]) {
      arr5[l] = arr1[i];
      arr4[i++] = ++l;
    } else {
      if (k < *n3 && arr3[k] == m)
        arr3[k++] = l + 1;
      arr5[l++] = arr2[j++];
      m++;
    }
  }
  while (i < *n1) {
    arr5[l] = arr1[i];
    arr4[i++] = ++l;
  }
  while (j < *n2) {
    if (k < *n3 && arr3[k] == m)
      arr3[k++] = l + 1;
    arr5[l++] = arr2[j++];
    m++;
  }
}


x86 assembly (clang, -O0):
<mergeArrays>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x30(%rbp),%rdx
xor    %eax,%eax
cmp    (%rdx),%ecx
mov    %al,-0x45(%rbp)
jge    116a <mergeArrays+0x6a>
mov    -0x38(%rbp),%eax
mov    0x10(%rbp),%rcx
cmp    (%rcx),%eax
setl   %al
mov    %al,-0x45(%rbp)
mov    -0x45(%rbp),%al
test   $0x1,%al
jne    117a <mergeArrays+0x7a>
jmp    1255 <mergeArrays+0x155>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jb     11db <mergeArrays+0xdb>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x34(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1250 <mergeArrays+0x150>
mov    -0x3c(%rbp),%eax
mov    0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    1219 <mergeArrays+0x119>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x44(%rbp),%eax
jne    1219 <mergeArrays+0x119>
mov    -0x40(%rbp),%edx
add    $0x1,%edx
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x3c(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x38(%rbp)
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x40(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x40(%rbp)
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1147 <mergeArrays+0x47>
jmp    125a <mergeArrays+0x15a>
mov    -0x34(%rbp),%eax
mov    -0x30(%rbp),%rcx
cmp    (%rcx),%eax
jge    12a6 <mergeArrays+0x1a6>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x34(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    125a <mergeArrays+0x15a>
jmp    12ab <mergeArrays+0x1ab>
mov    -0x38(%rbp),%eax
mov    0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    1334 <mergeArrays+0x234>
mov    -0x3c(%rbp),%eax
mov    0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    12f8 <mergeArrays+0x1f8>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x44(%rbp),%eax
jne    12f8 <mergeArrays+0x1f8>
mov    -0x40(%rbp),%edx
add    $0x1,%edx
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x3c(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x38(%rbp)
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x40(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x40(%rbp)
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12ab <mergeArrays+0x1ab>
pop    %rbp
ret

x86 assembly (clang, -O2):
<mergeArrays>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x38(%rsp),%r10
mov    (%r9),%eax
xor    %r15d,%r15d
test   %eax,%eax
jle    11d2 <mergeArrays+0xd2>
cmpl   $0x0,(%r10)
mov    $0x0,%r14d
mov    $0x0,%r12d
mov    $0x0,%r11d
mov    $0x0,%r13d
jle    11de <mergeArrays+0xde>
xor    %r15d,%r15d
xor    %r14d,%r14d
xor    %r12d,%r12d
xor    %r11d,%r11d
xor    %r13d,%r13d
xchg   %ax,%ax
movslq %r15d,%rbx
movsd  (%rdi,%rbx,8),%xmm1
movslq %r14d,%rax
movsd  (%rsi,%rax,8),%xmm0
ucomisd %xmm1,%xmm0
movslq %r11d,%rax
jae    11b0 <mergeArrays+0xb0>
mov    0x40(%rsp),%rbx
cmp    (%rbx),%r12d
jge    118e <mergeArrays+0x8e>
movslq %r12d,%rbx
cmp    %r13d,(%rdx,%rbx,4)
jne    118e <mergeArrays+0x8e>
mov    %r10,%rbp
lea    0x1(%r11),%r10d
add    $0x1,%r12d
mov    %r10d,(%rdx,%rbx,4)
mov    %rbp,%r10
add    $0x1,%r14d
add    $0x1,%r11d
movsd  %xmm0,(%r8,%rax,8)
add    $0x1,%r13d
jmp    11c3 <mergeArrays+0xc3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  %xmm1,(%r8,%rax,8)
add    $0x1,%eax
lea    0x1(%rbx),%r15d
mov    %eax,(%rcx,%rbx,4)
mov    %eax,%r11d
mov    (%r9),%eax
cmp    %eax,%r15d
jge    11de <mergeArrays+0xde>
cmp    (%r10),%r14d
jl     1150 <mergeArrays+0x50>
jmp    11de <mergeArrays+0xde>
xor    %r14d,%r14d
xor    %r12d,%r12d
xor    %r11d,%r11d
xor    %r13d,%r13d
cmp    %eax,%r15d
jge    1211 <mergeArrays+0x111>
movslq %r11d,%rbx
movslq %r15d,%rax
lea    (%r8,%rbx,8),%rbx
nopl   (%rax)
movsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,(%rbx)
add    $0x1,%r11d
mov    %r11d,(%rcx,%rax,4)
add    $0x1,%rax
movslq (%r9),%rbp
add    $0x8,%rbx
cmp    %rbp,%rax
jl     11f0 <mergeArrays+0xf0>
mov    (%r10),%ecx
cmp    %ecx,%r14d
jge    1282 <mergeArrays+0x182>
movslq %r11d,%rax
movslq %r14d,%rdi
mov    0x40(%rsp),%rbp
mov    0x0(%rbp),%r9d
lea    0x1(%rax),%ebp
lea    (%r8,%rax,8),%rax
jmp    1260 <mergeArrays+0x160>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%rsi,%rdi,8),%xmm0
add    $0x1,%rdi
movsd  %xmm0,(%rax)
add    $0x1,%r13d
movslq %ecx,%rbx
add    $0x1,%ebp
add    $0x8,%rax
cmp    %rbx,%rdi
jge    1282 <mergeArrays+0x182>
cmp    %r9d,%r12d
jge    1240 <mergeArrays+0x140>
movslq %r12d,%rbx
cmp    (%rdx,%rbx,4),%r13d
jne    1240 <mergeArrays+0x140>
add    $0x1,%r12d
mov    %ebp,(%rdx,%rbx,4)
mov    0x40(%rsp),%rcx
mov    (%rcx),%r9d
mov    (%r10),%ecx
jmp    1240 <mergeArrays+0x140>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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