void applyHybridCellWiseKaczmarz_FP64_INT64(
    long long *rowptr, double *valA, long long *colA, long long *n,
    long long *nf, long long dim, double *x, double *b, float *D,
    long long numit, long long includePressure, long long numCores,
    unsigned int *ArrIdxs, long long numDomains, long long domainLength) {
  long long N, blockSize;
  if (dim == 2) {
    blockSize = includePressure ? 5 : 4;
    N = n[0] * n[1];
  } else {
    blockSize = includePressure ? 7 : 6;
    N = n[0] * n[1] * n[2];
  }
  omp_set_num_threads(numCores);
#pragma omp parallel shared(x, rowptr, valA, colA, n, nf, dim, b, D, numit)
  {
    long long k, i;
    long long cell, domain;
    long long *Idxs = (long long *)malloc(blockSize * sizeof(long long));
    long long *cell_vec = (long long *)malloc(dim * sizeof(long long));
    double *local_r = (double *)malloc(blockSize * sizeof(double));
    double *local_x = (double *)malloc(blockSize * sizeof(double));
    for (k = 0; k < numit; ++k) {
#pragma omp for
      for (domain = 0; domain < numDomains; ++domain) {
        for (i = 0; i < domainLength; ++i) {
          cell = (long long)ArrIdxs[domain * domainLength + i];
          if (cell > 0) {
            cs2loc(cell, n, dim, cell_vec);
            getVankaVariablesOfCell(cell_vec, n, nf, Idxs, includePressure,
                                    dim);
            computeResidualAtIdx_FP64_INT64(rowptr, valA, colA, b, x, Idxs,
                                            local_r, blockSize);
            updateSolutionLocal_FP64(D + (cell - 1) * blockSize * blockSize,
                                     local_x, local_r, blockSize);
            computeATvAndAddAtIdx_FP64_INT64(rowptr, valA, colA, local_x, x,
                                             Idxs, blockSize);
          }
        }
      }
    }
    free(Idxs);
    free(cell_vec);
    free(local_r);
    free(local_x);
  }
  return;
}


x86 assembly (clang, -O0):
<applyHybridCellWiseKaczmarz_FP64_INT64>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
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)
cmpq   $0x2,-0x30(%rbp)
jne    1206 <applyHybridCellWiseKaczmarz_FP64_INT64+0x86>
mov    0x30(%rbp),%rdx
mov    $0x4,%eax
mov    $0x5,%ecx
cmp    $0x0,%rdx
cmovne %ecx,%eax
cltq
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
imul   0x8(%rcx),%rax
mov    %rax,-0x38(%rbp)
jmp    123e <applyHybridCellWiseKaczmarz_FP64_INT64+0xbe>
mov    0x30(%rbp),%rdx
mov    $0x6,%eax
mov    $0x7,%ecx
cmp    $0x0,%rdx
cmovne %ecx,%eax
cltq
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
imul   0x8(%rcx),%rax
mov    -0x20(%rbp),%rcx
imul   0x10(%rcx),%rax
mov    %rax,-0x38(%rbp)
mov    0x38(%rbp),%rdi
mov    $0x0,%al
call   1070 <omp_set_num_threads@plt>
mov    -0x40(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x70(%rbp)
mov    -0x40(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x78(%rbp)
mov    -0x40(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x80(%rbp)
movq   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    0x28(%rbp),%rax
jge    13f1 <applyHybridCellWiseKaczmarz_FP64_INT64+0x271>
movq   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%rax
cmp    0x48(%rbp),%rax
jge    13db <applyHybridCellWiseKaczmarz_FP64_INT64+0x25b>
movq   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%rax
cmp    0x50(%rbp),%rax
jge    13c5 <applyHybridCellWiseKaczmarz_FP64_INT64+0x245>
mov    0x40(%rbp),%rax
mov    -0x60(%rbp),%rcx
imul   0x50(%rbp),%rcx
add    -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %rax,-0x58(%rbp)
cmpq   $0x0,-0x58(%rbp)
jle    13af <applyHybridCellWiseKaczmarz_FP64_INT64+0x22f>
mov    -0x58(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    -0x30(%rbp),%rdx
mov    -0x70(%rbp),%rcx
mov    $0x0,%al
call   1050 <cs2loc@plt>
mov    -0x70(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    -0x28(%rbp),%rdx
mov    -0x68(%rbp),%rcx
mov    0x30(%rbp),%r8
mov    -0x30(%rbp),%r9
mov    $0x0,%al
call   1090 <getVankaVariablesOfCell@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    0x18(%rbp),%rcx
mov    0x10(%rbp),%r8
mov    -0x68(%rbp),%r9
mov    -0x78(%rbp),%r10
mov    -0x40(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
mov    $0x0,%al
call   1080 <computeResidualAtIdx_FP64_INT64@plt>
mov    0x20(%rbp),%rdi
mov    -0x58(%rbp),%rax
sub    $0x1,%rax
imul   -0x40(%rbp),%rax
imul   -0x40(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x80(%rbp),%rsi
mov    -0x78(%rbp),%rdx
mov    -0x40(%rbp),%rcx
mov    $0x0,%al
call   1030 <updateSolutionLocal_FP64@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    -0x80(%rbp),%rcx
mov    0x10(%rbp),%r8
mov    -0x68(%rbp),%r9
mov    -0x40(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x0,%al
call   10a0 <computeATvAndAddAtIdx_FP64_INT64@plt>
jmp    13b4 <applyHybridCellWiseKaczmarz_FP64_INT64+0x234>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    12c1 <applyHybridCellWiseKaczmarz_FP64_INT64+0x141>
jmp    13ca <applyHybridCellWiseKaczmarz_FP64_INT64+0x24a>
mov    -0x60(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x60(%rbp)
jmp    12ab <applyHybridCellWiseKaczmarz_FP64_INT64+0x12b>
jmp    13e0 <applyHybridCellWiseKaczmarz_FP64_INT64+0x260>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1295 <applyHybridCellWiseKaczmarz_FP64_INT64+0x115>
mov    -0x68(%rbp),%rdi
call   1040 <free@plt>
mov    -0x70(%rbp),%rdi
call   1040 <free@plt>
mov    -0x78(%rbp),%rdi
call   1040 <free@plt>
mov    -0x80(%rbp),%rdi
call   1040 <free@plt>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<applyHybridCellWiseKaczmarz_FP64_INT64>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc8,%rsp
mov    %r9,%rbx
mov    %r8,0xb8(%rsp)
mov    %rcx,0xb0(%rsp)
mov    %rdx,0x58(%rsp)
mov    %rsi,0x50(%rsp)
mov    %rdi,0x48(%rsp)
mov    0x140(%rsp),%rax
mov    %rax,0x8(%rsp)
mov    0x138(%rsp),%rax
mov    %rax,0x18(%rsp)
mov    0x130(%rsp),%rax
mov    %rax,0x60(%rsp)
mov    0x120(%rsp),%rax
mov    0x118(%rsp),%r14
mov    0x110(%rsp),%rcx
mov    %rcx,0xa0(%rsp)
mov    0x108(%rsp),%rcx
mov    %rcx,0x98(%rsp)
mov    0x100(%rsp),%rcx
mov    %rcx,0x40(%rsp)
xor    %ebp,%ebp
cmp    $0x2,%r9
setne  %bpl
add    %rbp,%rbp
mov    %rax,0xa8(%rsp)
cmp    $0x1,%rax
sbb    $0x0,%rbp
mov    0x128(%rsp),%rdi
xor    %eax,%eax
call   1070 <omp_set_num_threads@plt>
mov    %rbp,%r15
lea    0x28(,%rbp,8),%rbp
mov    %rbp,%rdi
call   1060 <malloc@plt>
mov    %rax,0x38(%rsp)
mov    %rbx,0xc0(%rsp)
lea    0x0(,%rbx,8),%rdi
call   1060 <malloc@plt>
mov    %rax,0x30(%rsp)
mov    %rbp,%rdi
call   1060 <malloc@plt>
mov    %rax,0x28(%rsp)
mov    %rbp,%rdi
call   1060 <malloc@plt>
mov    %rax,0x20(%rsp)
mov    %r14,0x68(%rsp)
test   %r14,%r14
jle    143d <applyHybridCellWiseKaczmarz_FP64_INT64+0x2bd>
add    $0x5,%r15
mov    %r15,0x90(%rsp)
imul   %r15,%r15
mov    %r15,0x88(%rsp)
mov    0x8(%rsp),%rax
lea    0x0(,%rax,4),%rax
mov    %rax,0x78(%rsp)
xor    %eax,%eax
mov    0x38(%rsp),%r12
jmp    12e4 <applyHybridCellWiseKaczmarz_FP64_INT64+0x164>
mov    0x70(%rsp),%rax
add    $0x1,%rax
cmp    0x68(%rsp),%rax
je     143d <applyHybridCellWiseKaczmarz_FP64_INT64+0x2bd>
mov    %rax,0x70(%rsp)
cmpq   $0x0,0x18(%rsp)
jle    12d0 <applyHybridCellWiseKaczmarz_FP64_INT64+0x150>
mov    0x60(%rsp),%rax
mov    %rax,0x10(%rsp)
xor    %ecx,%ecx
jmp    1322 <applyHybridCellWiseKaczmarz_FP64_INT64+0x1a2>
nop
mov    0x80(%rsp),%rcx
add    $0x1,%rcx
mov    0x10(%rsp),%rax
add    0x78(%rsp),%rax
mov    %rax,0x10(%rsp)
cmp    0x18(%rsp),%rcx
je     12d0 <applyHybridCellWiseKaczmarz_FP64_INT64+0x150>
mov    %rcx,0x80(%rsp)
cmpq   $0x0,0x8(%rsp)
jle    1300 <applyHybridCellWiseKaczmarz_FP64_INT64+0x180>
xor    %ebx,%ebx
jmp    134b <applyHybridCellWiseKaczmarz_FP64_INT64+0x1cb>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%rbx
cmp    %rbx,0x8(%rsp)
je     1300 <applyHybridCellWiseKaczmarz_FP64_INT64+0x180>
mov    0x10(%rsp),%rax
mov    (%rax,%rbx,4),%r14d
test   %r14,%r14
je     1340 <applyHybridCellWiseKaczmarz_FP64_INT64+0x1c0>
mov    %r14,%rdi
mov    0xb0(%rsp),%r15
mov    %r15,%rsi
mov    0xc0(%rsp),%r13
mov    %r13,%rdx
mov    0x30(%rsp),%rbp
mov    %rbp,%rcx
xor    %eax,%eax
call   1050 <cs2loc@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
mov    0xb8(%rsp),%rdx
mov    %r12,%rcx
mov    0xa8(%rsp),%r8
mov    %r13,%r9
xor    %eax,%eax
call   1090 <getVankaVariablesOfCell@plt>
mov    0x48(%rsp),%rdi
mov    0x50(%rsp),%rsi
mov    0x58(%rsp),%rdx
mov    0x98(%rsp),%rcx
mov    0x40(%rsp),%r8
mov    %r12,%r9
xor    %eax,%eax
mov    0x90(%rsp),%r15
push   %r15
mov    0x30(%rsp),%r13
push   %r13
call   1080 <computeResidualAtIdx_FP64_INT64@plt>
add    $0x10,%rsp
add    $0xffffffffffffffff,%r14
imul   0x88(%rsp),%r14
mov    0xa0(%rsp),%rax
lea    (%rax,%r14,4),%rdi
mov    0x20(%rsp),%rbp
mov    %rbp,%rsi
mov    %r13,%rdx
mov    %r15,%rcx
xor    %eax,%eax
call   1030 <updateSolutionLocal_FP64@plt>
sub    $0x8,%rsp
mov    0x50(%rsp),%rdi
mov    0x58(%rsp),%rsi
mov    0x60(%rsp),%rdx
mov    %rbp,%rcx
mov    0x48(%rsp),%r8
mov    %r12,%r9
xor    %eax,%eax
push   %r15
call   10a0 <computeATvAndAddAtIdx_FP64_INT64@plt>
add    $0x10,%rsp
jmp    1340 <applyHybridCellWiseKaczmarz_FP64_INT64+0x1c0>
mov    0x38(%rsp),%rdi
call   1040 <free@plt>
mov    0x30(%rsp),%rdi
call   1040 <free@plt>
mov    0x28(%rsp),%rdi
call   1040 <free@plt>
mov    0x20(%rsp),%rdi
add    $0xc8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <free@plt>

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

LLVM IR (-O2):
define void @applyHybridCellWiseKaczmarz_FP64_INT64(i64* %0, double* %1, i64* %2, i64* %3, i64* %4, i64 %5, double* %6, double* %7, float* %8, i64 %9, i64 %10, i64 %11, i32* nocapture %12, i64 %13, i64 %14) {
%16 = icmp eq i64 %5, 2
%17 = icmp eq i64 %10, 0
%18 = select i1 %17, i64 4, i64 5
%19 = select i1 %17, i64 6, i64 7
%20 = select i1 %16, i64 %18, i64 %19
%21 = tail call i32 (i64, ...) bitcast (i32 (...)* @omp_set_num_threads to i32 (i64, ...)*)(i64 %11)
%22 = shl nuw nsw i64 %20, 3
%23 = tail call i8* @malloc(i64 %22)
%24 = bitcast i8* %23 to i64*
%25 = shl i64 %5, 3
%26 = tail call i8* @malloc(i64 %25)
%27 = bitcast i8* %26 to i64*
%28 = tail call i8* @malloc(i64 %22)
%29 = bitcast i8* %28 to double*
%30 = tail call i8* @malloc(i64 %22)
%31 = bitcast i8* %30 to double*
%32 = icmp sgt i64 %9, 0
br i1 %32, label %33, label %68
33: ; preds = %15
%34 = icmp sgt i64 %13, 0
%35 = icmp sgt i64 %14, 0
%36 = mul nuw nsw i64 %20, %20
br label %37
37: ; preds = %33, %65
%38 = phi i64 [ 0, %33 ], [ %66, %65 ]
br i1 %34, label %39, label %65
39: ; preds = %37, %62
%40 = phi i64 [ %63, %62 ], [ 0, %37 ]
br i1 %35, label %41, label %62
41: ; preds = %39
%42 = mul nsw i64 %40, %14
br label %43
43: ; preds = %41, %59
%44 = phi i64 [ 0, %41 ], [ %60, %59 ]
%45 = add nsw i64 %44, %42
%46 = getelementptr inbounds i32, i32* %12, i64 %45
%47 = load i32, i32* %46
%48 = zext i32 %47 to i64
%49 = icmp eq i32 %47, 0
br i1 %49, label %59, label %50
50: ; preds = %43
%51 = tail call i32 (i64, i64*, i64, i64*, ...) bitcast (i32 (...)* @cs2loc to i32 (i64, i64*, i64, i64*, ...)*)(i64 %48, i64* %3, i64 %5, i64* %27)
%52 = tail call i32 (i64*, i64*, i64*, i64*, i64, i64, ...) bitcast (i32 (...)* @getVankaVariablesOfCell to i32 (i64*, i64*, i64*, i64*, i64, i64, ...)*)(i64* %27, i64* %3, i64* %4, i64* %24, i64 %10, i64 %5)
%53 = tail call i32 (i64*, double*, i64*, double*, double*, i64*, double*, i64, ...) bitcast (i32 (...)* @computeResidualAtIdx_FP64_INT64 to i32 (i64*, double*, i64*, double*, double*, i64*, double*, i64, ...)*)(i64* %0, double* %1, i64* %2, double* %7, double* %6, i64* %24, double* %29, i64 %20)
%54 = add nsw i64 %48, -1
%55 = mul nsw i64 %36, %54
%56 = getelementptr inbounds float, float* %8, i64 %55
%57 = tail call i32 (float*, double*, double*, i64, ...) bitcast (i32 (...)* @updateSolutionLocal_FP64 to i32 (float*, double*, double*, i64, ...)*)(float* %56, double* %31, double* %29, i64 %20)
%58 = tail call i32 (i64*, double*, i64*, double*, double*, i64*, i64, ...) bitcast (i32 (...)* @computeATvAndAddAtIdx_FP64_INT64 to i32 (i64*, double*, i64*, double*, double*, i64*, i64, ...)*)(i64* %0, double* %1, i64* %2, double* %31, double* %6, i64* %24, i64 %20)
br label %59
59: ; preds = %43, %50
%60 = add nuw nsw i64 %44, 1
%61 = icmp eq i64 %60, %14
br i1 %61, label %62, label %43
62: ; preds = %59, %39
%63 = add nuw nsw i64 %40, 1
%64 = icmp eq i64 %63, %13
br i1 %64, label %65, label %39
65: ; preds = %62, %37
%66 = add nuw nsw i64 %38, 1
%67 = icmp eq i64 %66, %9
br i1 %67, label %68, label %37
68: ; preds = %65, %15
tail call void @free(i8* %23)
tail call void @free(i8* %26)
tail call void @free(i8* %28)
tail call void @free(i8* %30)
ret void
}