void linearADR_ConstantCoefficientsEvaluate(const int nPoints, const int nSpace,
                                            const double M, const double *A,
                                            const double *B, const double C,
                                            const double t, const double *x,
                                            const double *u, double *m,
                                            double *dm, double *f, double *df,
                                            double *a, double *r, double *dr) {
  int k, I, J;
  const int nSpace2 = nSpace * nSpace;
  for (k = 0; k < nPoints; k++) {
    m[k] = M * u[k];
    dm[k] = M;
    for (I = 0; I < nSpace; I++) {
      f[k * nSpace + I] = B[I] * u[k];
      df[k * nSpace + I] = B[I];
      for (J = 0; J < nSpace; J++) {
        a[k * nSpace2 + I * nSpace + J] = A[I * nSpace + J];
      }
    }
    r[k] = C * u[k];
    dr[k] = C;
  }
}


x86 assembly (clang, -O0):
<linearADR_ConstantCoefficientsEvaluate>:
push   %rbp
mov    %rsp,%rbp
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    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm2,-0x30(%rbp)
mov    %r8,-0x38(%rbp)
mov    %r9,-0x40(%rbp)
mov    -0x8(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    %eax,-0x50(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    12a1 <linearADR_ConstantCoefficientsEvaluate+0x1a1>
movsd  -0x10(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
mov    0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1262 <linearADR_ConstantCoefficientsEvaluate+0x162>
mov    -0x20(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    124f <linearADR_ConstantCoefficientsEvaluate+0x14f>
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x50(%rbp),%ecx
mov    -0x48(%rbp),%edx
imul   -0x8(%rbp),%edx
add    %edx,%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1200 <linearADR_ConstantCoefficientsEvaluate+0x100>
jmp    1254 <linearADR_ConstantCoefficientsEvaluate+0x154>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    119a <linearADR_ConstantCoefficientsEvaluate+0x9a>
movsd  -0x28(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x38(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x28(%rbp),%xmm0
mov    0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1156 <linearADR_ConstantCoefficientsEvaluate+0x56>
pop    %rbp
ret

x86 assembly (clang, -O2):
<linearADR_ConstantCoefficientsEvaluate>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x30,%rsp
mov    %rcx,0x18(%rsp)
mov    %rdx,-0x80(%rsp)
test   %edi,%edi
jle    14b1 <linearADR_ConstantCoefficientsEvaluate+0x3b1>
mov    0x88(%rsp),%rax
movslq %esi,%rdx
mov    %edi,%ecx
mov    %rcx,-0x30(%rsp)
mov    %edx,%ecx
mov    %edx,%edi
imul   %edi,%edi
mov    %rdi,-0x58(%rsp)
mov    %ecx,%edi
and    $0xfffffffc,%edi
mov    %rdi,-0x10(%rsp)
add    $0xfffffffffffffffc,%rdi
mov    %rdi,-0x18(%rsp)
mov    %rdi,%rbp
shr    $0x2,%rbp
add    $0x1,%rbp
mov    %rbp,%rdi
mov    %rbp,-0x20(%rsp)
and    $0xfffffffffffffffe,%rbp
mov    %rbp,-0x28(%rsp)
mov    %rcx,%rdi
neg    %rdi
mov    %rdi,-0x40(%rsp)
lea    -0x1(%rcx),%rdi
mov    %rdi,(%rsp)
mov    %rcx,-0x78(%rsp)
lea    (%rax,%rcx,8),%rcx
mov    %rcx,-0x8(%rsp)
mov    -0x80(%rsp),%rcx
add    $0x30,%rcx
mov    %rcx,-0x38(%rsp)
mov    %rdx,-0x48(%rsp)
lea    0x0(,%rdx,8),%rcx
mov    %rcx,0x8(%rsp)
movl   $0x4,-0x68(%rsp)
xor    %ecx,%ecx
mov    %rcx,-0x60(%rsp)
movl   $0x1,-0x6c(%rsp)
xor    %edi,%edi
mov    %r9,0x10(%rsp)
jmp    121c <linearADR_ConstantCoefficientsEvaluate+0x11c>
xchg   %ax,%ax
movsd  (%r9,%rdi,8),%xmm2
mulsd  %xmm1,%xmm2
mov    0x90(%rsp),%rcx
movsd  %xmm2,(%rcx,%rdi,8)
mov    0x98(%rsp),%rcx
movsd  %xmm1,(%rcx,%rdi,8)
add    $0x1,%rdi
mov    -0x58(%rsp),%rcx
add    %ecx,-0x68(%rsp)
mov    -0x60(%rsp),%rdx
add    %ecx,%edx
mov    %rdx,-0x60(%rsp)
add    %ecx,-0x6c(%rsp)
cmp    -0x30(%rsp),%rdi
je     14b1 <linearADR_ConstantCoefficientsEvaluate+0x3b1>
movsd  (%r9,%rdi,8),%xmm2
mulsd  %xmm0,%xmm2
mov    0x68(%rsp),%rcx
movsd  %xmm2,(%rcx,%rdi,8)
mov    0x70(%rsp),%rcx
movsd  %xmm0,(%rcx,%rdi,8)
test   %esi,%esi
jle    11d0 <linearADR_ConstantCoefficientsEvaluate+0xd0>
mov    %rdi,%rcx
imul   -0x58(%rsp),%rcx
mov    %rcx,-0x50(%rsp)
mov    %rdi,%rcx
imul   -0x48(%rsp),%rcx
mov    %rcx,0x20(%rsp)
mov    %edi,%ecx
imul   %esi,%ecx
imul   %esi,%ecx
mov    %ecx,-0x64(%rsp)
mov    -0x6c(%rsp),%r15d
mov    -0x60(%rsp),%r11
mov    -0x80(%rsp),%r8
mov    -0x38(%rsp),%r14
mov    -0x68(%rsp),%r13d
xor    %r12d,%r12d
mov    %rdi,0x28(%rsp)
jmp    12bd <linearADR_ConstantCoefficientsEvaluate+0x1bd>
nopl   0x0(%rax)
add    $0x1,%r12
add    %esi,%r13d
mov    0x8(%rsp),%rcx
add    %rcx,%r14
add    %rcx,%r8
add    %esi,%r11d
add    %esi,%r15d
cmp    -0x78(%rsp),%r12
mov    0x10(%rsp),%r9
mov    0x28(%rsp),%rdi
je     11d0 <linearADR_ConstantCoefficientsEvaluate+0xd0>
mov    %r12,%rbp
imul   -0x48(%rsp),%rbp
mov    0x20(%rsp),%rcx
add    %r12,%rcx
mov    0x18(%rsp),%rdx
movsd  (%rdx,%r12,8),%xmm2
mulsd  (%r9,%rdi,8),%xmm2
mov    0x78(%rsp),%rdi
movsd  %xmm2,(%rdi,%rcx,8)
movsd  (%rdx,%r12,8),%xmm2
mov    0x80(%rsp),%rdx
movsd  %xmm2,(%rdx,%rcx,8)
cmp    $0x4,%esi
jb     1370 <linearADR_ConstantCoefficientsEvaluate+0x270>
mov    %r12d,%ecx
imul   -0x78(%rsp),%ecx
mov    -0x50(%rsp),%rdx
add    %ecx,%edx
mov    (%rsp),%rbx
lea    (%rdx,%rbx,1),%edi
cmp    %edx,%edi
jl     1370 <linearADR_ConstantCoefficientsEvaluate+0x270>
mov    %rbx,%rdx
shr    $0x20,%rdx
mov    $0x0,%edi
mov    -0x80(%rsp),%r9
jne    1377 <linearADR_ConstantCoefficientsEvaluate+0x277>
add    -0x50(%rsp),%ecx
lea    (%r9,%rbp,8),%rdx
movslq %ecx,%rcx
mov    -0x8(%rsp),%rdi
lea    (%rdi,%rcx,8),%rdi
cmp    %rdi,%rdx
jae    140a <linearADR_ConstantCoefficientsEvaluate+0x30a>
mov    -0x78(%rsp),%rdx
add    %rbp,%rdx
lea    (%r9,%rdx,8),%rdx
lea    (%rax,%rcx,8),%rcx
cmp    %rdx,%rcx
jae    140a <linearADR_ConstantCoefficientsEvaluate+0x30a>
xor    %edi,%edi
jmp    1377 <linearADR_ConstantCoefficientsEvaluate+0x277>
nopl   0x0(%rax,%rax,1)
xor    %edi,%edi
mov    -0x80(%rsp),%r9
mov    %rdi,%r10
testb  $0x1,-0x78(%rsp)
je     13a3 <linearADR_ConstantCoefficientsEvaluate+0x2a3>
mov    %rbp,%rcx
add    %rdi,%rcx
movsd  (%r9,%rcx,8),%xmm2
lea    (%rdi,%rbp,1),%ecx
add    -0x64(%rsp),%ecx
movslq %ecx,%rcx
movsd  %xmm2,(%rax,%rcx,8)
mov    %rdi,%r10
or     $0x1,%r10
not    %rdi
cmp    -0x40(%rsp),%rdi
je     1290 <linearADR_ConstantCoefficientsEvaluate+0x190>
mov    -0x40(%rsp),%rcx
lea    (%rcx,%r10,1),%rdi
lea    (%r8,%r10,8),%rbx
lea    (%r11,%r10,1),%ecx
add    %r15d,%r10d
mov    $0x1,%edx
nopw   0x0(%rax,%rax,1)
movsd  -0x8(%rbx,%rdx,8),%xmm2
movslq %ecx,%rcx
movsd  %xmm2,(%rax,%rcx,8)
movsd  (%rbx,%rdx,8),%xmm2
movslq %r10d,%r10
movsd  %xmm2,(%rax,%r10,8)
lea    (%rdi,%rdx,1),%rbp
add    $0x2,%rbp
add    $0x2,%rdx
add    $0x2,%ecx
add    $0x2,%r10d
cmp    $0x1,%rbp
jne    13d0 <linearADR_ConstantCoefficientsEvaluate+0x2d0>
jmp    1290 <linearADR_ConstantCoefficientsEvaluate+0x190>
cmpq   $0x0,-0x18(%rsp)
je     14a6 <linearADR_ConstantCoefficientsEvaluate+0x3a6>
mov    -0x28(%rsp),%rcx
mov    %r13d,%ebx
xor    %edi,%edi
movups -0x30(%r14,%rdi,8),%xmm2
movups -0x20(%r14,%rdi,8),%xmm3
lea    -0x4(%rbx),%edx
movslq %edx,%rdx
movups %xmm2,(%rax,%rdx,8)
movups %xmm3,0x10(%rax,%rdx,8)
movupd -0x10(%r14,%rdi,8),%xmm2
movups (%r14,%rdi,8),%xmm3
movslq %ebx,%rbx
movupd %xmm2,(%rax,%rbx,8)
movups %xmm3,0x10(%rax,%rbx,8)
add    $0x8,%rdi
add    $0x8,%ebx
add    $0xfffffffffffffffe,%rcx
jne    1420 <linearADR_ConstantCoefficientsEvaluate+0x320>
testb  $0x1,-0x20(%rsp)
je     148e <linearADR_ConstantCoefficientsEvaluate+0x38e>
mov    %rdi,%rcx
add    %rbp,%rcx
movupd (%r9,%rcx,8),%xmm2
movups 0x10(%r9,%rcx,8),%xmm3
lea    (%rdi,%rbp,1),%ecx
add    -0x64(%rsp),%ecx
movslq %ecx,%rcx
movupd %xmm2,(%rax,%rcx,8)
movups %xmm3,0x10(%rax,%rcx,8)
mov    -0x10(%rsp),%rcx
mov    %rcx,%rdi
cmp    -0x78(%rsp),%rcx
je     1290 <linearADR_ConstantCoefficientsEvaluate+0x190>
jmp    1377 <linearADR_ConstantCoefficientsEvaluate+0x277>
xor    %edi,%edi
testb  $0x1,-0x20(%rsp)
jne    1468 <linearADR_ConstantCoefficientsEvaluate+0x368>
jmp    148e <linearADR_ConstantCoefficientsEvaluate+0x38e>
add    $0x30,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @linearADR_ConstantCoefficientsEvaluate(i32 %0, i32 %1, double %2, double* nocapture %3, double* nocapture %4, double %5, double %6, double* nocapture readnone %7, double* nocapture %8, double* nocapture writeonly %9, double* nocapture writeonly %10, double* nocapture writeonly %11, double* nocapture writeonly %12, double* nocapture writeonly %13, double* nocapture writeonly %14, double* nocapture writeonly %15) {
%17 = icmp sgt i32 %0, 0
br i1 %17, label %18, label %195
18: ; preds = %16
%19 = icmp sgt i32 %1, 0
%20 = sext i32 %1 to i64
%21 = zext i32 %0 to i64
%22 = zext i32 %1 to i64
%23 = add nsw i64 %22, -1
%24 = mul i32 %1, %1
%25 = zext i32 %24 to i64
%26 = zext i32 %24 to i64
%27 = getelementptr double, double* %13, i64 %22
%28 = and i64 %22, 4294967292
%29 = add nsw i64 %28, -4
%30 = lshr exact i64 %29, 2
%31 = add nuw nsw i64 %30, 1
%32 = icmp ult i32 %1, 4
%33 = trunc i64 %23 to i32
%34 = icmp ugt i64 %23, 4294967295
%35 = and i64 %22, 4294967292
%36 = and i64 %31, 1
%37 = icmp eq i64 %29, 0
%38 = and i64 %31, 9223372036854775806
%39 = icmp eq i64 %36, 0
%40 = icmp eq i64 %35, %22
%41 = and i64 %22, 1
%42 = icmp eq i64 %41, 0
%43 = sub nsw i64 0, %22
br label %44
44: ; preds = %18, %188
%45 = phi i64 [ 0, %18 ], [ %193, %188 ]
%46 = mul i64 %45, %26
%47 = mul i64 %45, %25
%48 = getelementptr inbounds double, double* %8, i64 %45
%49 = load double, double* %48
%50 = fmul double %49, %2
%51 = getelementptr inbounds double, double* %9, i64 %45
store double %50, double* %51
%52 = getelementptr inbounds double, double* %10, i64 %45
store double %2, double* %52
br i1 %19, label %53, label %188
53: ; preds = %44
%54 = mul nsw i64 %45, %20
%55 = trunc i64 %45 to i32
%56 = mul i32 %55, %1
%57 = mul i32 %56, %1
br label %58
58: ; preds = %185, %53
%59 = phi i64 [ 0, %53 ], [ %186, %185 ]
%60 = mul i64 %59, %20
%61 = getelementptr double, double* %3, i64 %60
%62 = add i64 %60, %22
%63 = getelementptr double, double* %3, i64 %62
%64 = mul i64 %59, %22
%65 = add i64 %46, %64
%66 = shl i64 %65, 32
%67 = ashr exact i64 %66, 32
%68 = getelementptr double, double* %13, i64 %67
%69 = getelementptr double, double* %27, i64 %67
%70 = mul i64 %59, %22
%71 = add i64 %47, %70
%72 = trunc i64 %71 to i32
%73 = getelementptr inbounds double, double* %4, i64 %59
%74 = load double, double* %73
%75 = load double, double* %48
%76 = fmul double %74, %75
%77 = add nsw i64 %59, %54
%78 = getelementptr inbounds double, double* %11, i64 %77
store double %76, double* %78
%79 = load double, double* %73
%80 = getelementptr inbounds double, double* %12, i64 %77
store double %79, double* %80
%81 = mul nsw i64 %59, %20
%82 = trunc i64 %81 to i32
br i1 %32, label %148, label %83
83: ; preds = %58
%84 = add i32 %72, %33
%85 = icmp slt i32 %84, %72
%86 = or i1 %85, %34
br i1 %86, label %148, label %87
87: ; preds = %83
%88 = icmp ult double* %61, %69
%89 = icmp ult double* %68, %63
%90 = and i1 %88, %89
br i1 %90, label %148, label %91
91: ; preds = %87
br i1 %37, label %129, label %92
92: ; preds = %91, %92
%93 = phi i64 [ %126, %92 ], [ 0, %91 ]
%94 = phi i64 [ %127, %92 ], [ 0, %91 ]
%95 = trunc i64 %93 to i32
%96 = add nsw i64 %93, %81
%97 = getelementptr inbounds double, double* %3, i64 %96
%98 = bitcast double* %97 to <2 x double>*
%99 = load <2 x double>, <2 x double>* %98
%100 = getelementptr inbounds double, double* %97, i64 2
%101 = bitcast double* %100 to <2 x double>*
%102 = load <2 x double>, <2 x double>* %101
%103 = add i32 %95, %82
%104 = add i32 %103, %57
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double, double* %13, i64 %105
%107 = bitcast double* %106 to <2 x double>*
store <2 x double> %99, <2 x double>* %107
%108 = getelementptr inbounds double, double* %106, i64 2
%109 = bitcast double* %108 to <2 x double>*
store <2 x double> %102, <2 x double>* %109
%110 = or i64 %93, 4
%111 = trunc i64 %110 to i32
%112 = add nsw i64 %110, %81
%113 = getelementptr inbounds double, double* %3, i64 %112
%114 = bitcast double* %113 to <2 x double>*
%115 = load <2 x double>, <2 x double>* %114
%116 = getelementptr inbounds double, double* %113, i64 2
%117 = bitcast double* %116 to <2 x double>*
%118 = load <2 x double>, <2 x double>* %117
%119 = add i32 %111, %82
%120 = add i32 %119, %57
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds double, double* %13, i64 %121
%123 = bitcast double* %122 to <2 x double>*
store <2 x double> %115, <2 x double>* %123
%124 = getelementptr inbounds double, double* %122, i64 2
%125 = bitcast double* %124 to <2 x double>*
store <2 x double> %118, <2 x double>* %125
%126 = add nuw i64 %93, 8
%127 = add i64 %94, 2
%128 = icmp eq i64 %127, %38
br i1 %128, label %129, label %92
129: ; preds = %92, %91
%130 = phi i64 [ 0, %91 ], [ %126, %92 ]
br i1 %39, label %147, label %131
131: ; preds = %129
%132 = trunc i64 %130 to i32
%133 = add nsw i64 %130, %81
%134 = getelementptr inbounds double, double* %3, i64 %133
%135 = bitcast double* %134 to <2 x double>*
%136 = load <2 x double>, <2 x double>* %135
%137 = getelementptr inbounds double, double* %134, i64 2
%138 = bitcast double* %137 to <2 x double>*
%139 = load <2 x double>, <2 x double>* %138
%140 = add i32 %132, %82
%141 = add i32 %140, %57
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds double, double* %13, i64 %142
%144 = bitcast double* %143 to <2 x double>*
store <2 x double> %136, <2 x double>* %144
%145 = getelementptr inbounds double, double* %143, i64 2
%146 = bitcast double* %145 to <2 x double>*
store <2 x double> %139, <2 x double>* %146
br label %147
147: ; preds = %129, %131
br i1 %40, label %185, label %148
148: ; preds = %87, %83, %58, %147
%149 = phi i64 [ 0, %87 ], [ 0, %83 ], [ 0, %58 ], [ %35, %147 ]
%150 = xor i64 %149, -1
br i1 %42, label %161, label %151
151: ; preds = %148
%152 = add nsw i64 %149, %81
%153 = getelementptr inbounds double, double* %3, i64 %152
%154 = load double, double* %153
%155 = trunc i64 %149 to i32
%156 = add i32 %155, %82
%157 = add i32 %156, %57
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds double, double* %13, i64 %158
store double %154, double* %159
%160 = or i64 %149, 1
br label %161
161: ; preds = %151, %148
%162 = phi i64 [ %149, %148 ], [ %160, %151 ]
%163 = icmp eq i64 %150, %43
br i1 %163, label %185, label %164
164: ; preds = %161, %164
%165 = phi i64 [ %183, %164 ], [ %162, %161 ]
%166 = add nsw i64 %165, %81
%167 = getelementptr inbounds double, double* %3, i64 %166
%168 = load double, double* %167
%169 = trunc i64 %165 to i32
%170 = add i32 %169, %82
%171 = add i32 %170, %57
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds double, double* %13, i64 %172
store double %168, double* %173
%174 = add nuw nsw i64 %165, 1
%175 = add nsw i64 %174, %81
%176 = getelementptr inbounds double, double* %3, i64 %175
%177 = load double, double* %176
%178 = trunc i64 %174 to i32
%179 = add i32 %178, %82
%180 = add i32 %179, %57
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds double, double* %13, i64 %181
store double %177, double* %182
%183 = add nuw nsw i64 %165, 2
%184 = icmp eq i64 %183, %22
br i1 %184, label %185, label %164
185: ; preds = %161, %164, %147
%186 = add nuw nsw i64 %59, 1
%187 = icmp eq i64 %186, %22
br i1 %187, label %188, label %58
188: ; preds = %185, %44
%189 = load double, double* %48
%190 = fmul double %189, %5
%191 = getelementptr inbounds double, double* %14, i64 %45
store double %190, double* %191
%192 = getelementptr inbounds double, double* %15, i64 %45
store double %5, double* %192
%193 = add nuw nsw i64 %45, 1
%194 = icmp eq i64 %193, %21
br i1 %194, label %195, label %44
195: ; preds = %188, %16
ret void
}