void dsyrk_codegen_0(double *A, double *C) {
  const int n = 4 + 0 * 40 + 0 * 4;
  const int lda = 4 + 0 * 40 + 0 * 4;
  double temp;
  int ii, jj, kk;
  for (jj = 0; jj < n; jj++) {
    for (kk = 0; kk < n; kk++) {
      temp = A[jj + lda * kk];
      for (ii = jj; ii < n; ii++) {
        C[ii + lda * jj] += temp * A[ii + lda * kk];
      }
    }
  }
}


x86 assembly (clang, -O0):
<dsyrk_codegen_0>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x4,-0x14(%rbp)
movl   $0x4,-0x18(%rbp)
movl   $0x0,-0x28(%rbp)
cmpl   $0x4,-0x28(%rbp)
jge    11dc <dsyrk_codegen_0+0xdc>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x4,-0x2c(%rbp)
jge    11c9 <dsyrk_codegen_0+0xc9>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    -0x2c(%rbp),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x4,-0x24(%rbp)
jge    11b6 <dsyrk_codegen_0+0xb6>
movsd  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x2c(%rbp),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    115e <dsyrk_codegen_0+0x5e>
jmp    11bb <dsyrk_codegen_0+0xbb>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1132 <dsyrk_codegen_0+0x32>
jmp    11ce <dsyrk_codegen_0+0xce>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1121 <dsyrk_codegen_0+0x21>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dsyrk_codegen_0>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
lea    0x20(%rdi),%r8
lea    0x8(%rsi),%rcx
lea    0x8(%rdi),%rdx
mov    $0xffffffffffffffff,%r9
xor    %ebx,%ebx
mov    %rsi,%rax
mov    %r8,-0x8(%rsp)
jmp    114a <dsyrk_codegen_0+0x4a>
nopl   0x0(%rax)
add    $0x28,%rcx
add    $0x8,%rdx
add    $0xffffffffffffffff,%r9
add    $0x20,%rax
cmp    $0x4,%rbx
je     149b <dsyrk_codegen_0+0x39b>
mov    %rbx,%r10
lea    (%rbx,%rbx,4),%r14
lea    0x0(,%rbx,4),%r11
lea    0x1(%rbx),%r13
movsd  (%rdi,%rbx,8),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%r14,8),%xmm1
movsd  %xmm1,(%rsi,%r14,8)
cmp    $0x4,%r13
je     1303 <dsyrk_codegen_0+0x203>
mov    $0x3,%r15d
sub    %r10,%r15
cmp    $0x4,%r15
jb     12a0 <dsyrk_codegen_0+0x1a0>
lea    (%rsi,%r14,8),%rbp
add    $0x8,%rbp
cmp    %r8,%rbp
jae    11bf <dsyrk_codegen_0+0xbf>
mov    %r10,%rbp
shl    $0x5,%rbp
add    %rsi,%rbp
add    $0x20,%rbp
lea    (%rdi,%r10,8),%rbx
add    $0x8,%rbx
cmp    %rbp,%rbx
jb     12a0 <dsyrk_codegen_0+0x1a0>
mov    %r9,%rbx
shr    $0x2,%rbx
add    $0x1,%rbx
and    $0xfffffffffffffffe,%rbx
mov    %r10,%r8
not    %r8
shr    $0x2,%r8
add    $0x1,%r8
mov    %r15,%r12
and    $0xfffffffffffffffc,%r12
add    %r12,%r13
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
xor    %ebp,%ebp
movupd (%rdx,%rbp,1),%xmm2
movupd 0x10(%rdx,%rbp,1),%xmm3
mulpd  %xmm1,%xmm2
movupd (%rcx,%rbp,1),%xmm4
addpd  %xmm2,%xmm4
movupd 0x10(%rcx,%rbp,1),%xmm2
movupd 0x20(%rcx,%rbp,1),%xmm5
movupd 0x30(%rcx,%rbp,1),%xmm6
mulpd  %xmm1,%xmm3
addpd  %xmm2,%xmm3
movupd %xmm4,(%rcx,%rbp,1)
movupd %xmm3,0x10(%rcx,%rbp,1)
movupd 0x20(%rdx,%rbp,1),%xmm2
movupd 0x30(%rdx,%rbp,1),%xmm3
mulpd  %xmm1,%xmm2
addpd  %xmm5,%xmm2
mulpd  %xmm1,%xmm3
addpd  %xmm6,%xmm3
movupd %xmm2,0x20(%rcx,%rbp,1)
movupd %xmm3,0x30(%rcx,%rbp,1)
add    $0x40,%rbp
add    $0xfffffffffffffffe,%rbx
jne    11f0 <dsyrk_codegen_0+0xf0>
test   $0x1,%r8b
je     1296 <dsyrk_codegen_0+0x196>
movupd (%rdx,%rbp,1),%xmm2
movupd 0x10(%rdx,%rbp,1),%xmm3
movupd (%rcx,%rbp,1),%xmm4
movupd 0x10(%rcx,%rbp,1),%xmm5
mulpd  %xmm1,%xmm2
addpd  %xmm4,%xmm2
mulpd  %xmm1,%xmm3
addpd  %xmm5,%xmm3
movupd %xmm2,(%rcx,%rbp,1)
movupd %xmm3,0x10(%rcx,%rbp,1)
cmp    %r12,%r15
mov    -0x8(%rsp),%r8
je     1303 <dsyrk_codegen_0+0x203>
mov    %r13,%rbp
test   $0x1,%r13b
je     12c5 <dsyrk_codegen_0+0x1c5>
lea    (%r11,%r13,1),%rbp
movsd  (%rdi,%r13,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%rbp,8),%xmm1
movsd  %xmm1,(%rsi,%rbp,8)
lea    0x1(%r13),%rbp
cmp    $0x3,%r13
je     1303 <dsyrk_codegen_0+0x203>
add    $0x1,%rbp
nop
movsd  -0x8(%rdi,%rbp,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  -0x8(%rax,%rbp,8),%xmm1
movsd  %xmm1,-0x8(%rax,%rbp,8)
movsd  (%rdi,%rbp,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rax,%rbp,8),%xmm1
movsd  %xmm1,(%rax,%rbp,8)
add    $0x2,%rbp
cmp    $0x5,%rbp
jne    12d0 <dsyrk_codegen_0+0x1d0>
movsd  0x20(%rdi,%r10,8),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%r14,8),%xmm1
movsd  %xmm1,(%rsi,%r14,8)
lea    0x1(%r10),%rbx
cmp    $0x4,%rbx
je     1390 <dsyrk_codegen_0+0x290>
lea    (%rbx,%r11,1),%rbp
movsd  0x28(%rdi,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%rbp,8),%xmm1
movsd  %xmm1,(%rsi,%rbp,8)
lea    0x2(%r10),%rbp
cmp    $0x4,%rbp
je     1390 <dsyrk_codegen_0+0x290>
add    %r11,%rbp
movsd  0x30(%rdi,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%rbp,8),%xmm1
movsd  %xmm1,(%rsi,%rbp,8)
lea    0x3(%r10),%rbp
cmp    $0x4,%rbp
je     1390 <dsyrk_codegen_0+0x290>
mulsd  0x38(%rdi,%r10,8),%xmm0
add    %r11,%rbp
addsd  (%rsi,%rbp,8),%xmm0
movsd  %xmm0,(%rsi,%rbp,8)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  0x40(%rdi,%r10,8),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%r14,8),%xmm1
movsd  %xmm1,(%rsi,%r14,8)
cmp    $0x4,%rbx
je     1410 <dsyrk_codegen_0+0x310>
lea    (%rbx,%r11,1),%rbp
movsd  0x48(%rdi,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%rbp,8),%xmm1
movsd  %xmm1,(%rsi,%rbp,8)
lea    0x2(%r10),%rbp
cmp    $0x4,%rbp
je     1410 <dsyrk_codegen_0+0x310>
add    %r11,%rbp
movsd  0x50(%rdi,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%rbp,8),%xmm1
movsd  %xmm1,(%rsi,%rbp,8)
lea    0x3(%r10),%rbp
cmp    $0x4,%rbp
je     1410 <dsyrk_codegen_0+0x310>
mulsd  0x58(%rdi,%r10,8),%xmm0
add    %r11,%rbp
addsd  (%rsi,%rbp,8),%xmm0
movsd  %xmm0,(%rsi,%rbp,8)
nopw   0x0(%rax,%rax,1)
movsd  0x60(%rdi,%r10,8),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%r14,8),%xmm1
movsd  %xmm1,(%rsi,%r14,8)
cmp    $0x4,%rbx
je     1130 <dsyrk_codegen_0+0x30>
lea    (%rbx,%r11,1),%rbp
movsd  0x68(%rdi,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%rbp,8),%xmm1
movsd  %xmm1,(%rsi,%rbp,8)
lea    0x2(%r10),%rbp
cmp    $0x4,%rbp
je     1130 <dsyrk_codegen_0+0x30>
add    %r11,%rbp
movsd  0x70(%rdi,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi,%rbp,8),%xmm1
movsd  %xmm1,(%rsi,%rbp,8)
lea    0x3(%r10),%rbp
cmp    $0x4,%rbp
je     1130 <dsyrk_codegen_0+0x30>
mulsd  0x78(%rdi,%r10,8),%xmm0
add    %r11,%rbp
addsd  (%rsi,%rbp,8),%xmm0
movsd  %xmm0,(%rsi,%rbp,8)
jmp    1130 <dsyrk_codegen_0+0x30>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @dsyrk_codegen_0(double* %0, double* %1) {
%3 = alloca double*
%4 = alloca double*
%5 = alloca i32
%6 = alloca i32
%7 = alloca double
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store double* %0, double** %3
store double* %1, double** %4
store i32 4, i32* %5
store i32 4, i32* %6
store i32 0, i32* %9
br label %11
11: ; preds = %58, %2
%12 = load i32, i32* %9
%13 = icmp slt i32 %12, 4
br i1 %13, label %14, label %61
14: ; preds = %11
store i32 0, i32* %10
br label %15
15: ; preds = %54, %14
%16 = load i32, i32* %10
%17 = icmp slt i32 %16, 4
br i1 %17, label %18, label %57
18: ; preds = %15
%19 = load double*, double** %3
%20 = load i32, i32* %9
%21 = load i32, i32* %10
%22 = mul nsw i32 4, %21
%23 = add nsw i32 %20, %22
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds double, double* %19, i64 %24
%26 = load double, double* %25
store double %26, double* %7
%27 = load i32, i32* %9
store i32 %27, i32* %8
br label %28
28: ; preds = %50, %18
%29 = load i32, i32* %8
%30 = icmp slt i32 %29, 4
br i1 %30, label %31, label %53
31: ; preds = %28
%32 = load double, double* %7
%33 = load double*, double** %3
%34 = load i32, i32* %8
%35 = load i32, i32* %10
%36 = mul nsw i32 4, %35
%37 = add nsw i32 %34, %36
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double, double* %33, i64 %38
%40 = load double, double* %39
%41 = load double*, double** %4
%42 = load i32, i32* %8
%43 = load i32, i32* %9
%44 = mul nsw i32 4, %43
%45 = add nsw i32 %42, %44
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds double, double* %41, i64 %46
%48 = load double, double* %47
%49 = call double @llvm.fmuladd.f64(double %32, double %40, double %48)
store double %49, double* %47
br label %50
50: ; preds = %31
%51 = load i32, i32* %8
%52 = add nsw i32 %51, 1
store i32 %52, i32* %8
br label %28
53: ; preds = %28
br label %54
54: ; preds = %53
%55 = load i32, i32* %10
%56 = add nsw i32 %55, 1
store i32 %56, i32* %10
br label %15
57: ; preds = %15
br label %58
58: ; preds = %57
%59 = load i32, i32* %9
%60 = add nsw i32 %59, 1
store i32 %60, i32* %9
br label %11
61: ; preds = %11
ret void
}

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