#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ dmat_mul_a2(double **, double **, double **, double **,
                               double **, double **, int, double **, double **);
int /*<<< orphan*/ dmat_mul_a3(double **, double **, double **, double **,
                               double **, double **, int, double **, double **,
                               int, int /*<<< orphan*/);
int /*<<< orphan*/ dmat_scale_add_1x2(double **, double **, double **,
                                      double **, double **, double **, double,
                                      int);
int /*<<< orphan*/ dmat_sym(double **, int, int);
int /*<<< orphan*/ dsym_add(double **, double **, double **, int, int);
void add_u_v_term_l_2(
    int n_quad, int n_stokes, double **ax11, double **ax12, double **bx11,
    double **bx12, double **bx21, double **bx22, double **ay11, double **ay12,
    double **by11, double **by12, double **by21, double **by22, double **cy11,
    double **cy12, double **uy11, double **uy12, double **vy11, double **vy12,
    double **wy11, double **wy12, double **xy11, double **xy12, double **w111,
    double **w112, double **w121, double **w122, double **w211, double **w212,
    double **w221, double **w222, double c0, double c1, double c2, double c3,
    int symmetric) {
  int n_quad_v;
  n_quad_v = n_quad * n_stokes;
  if (!symmetric) {
    dmat_mul_a2(ay11, ay12, bx11, bx12, bx21, bx22, n_quad_v, w111, w112);
    dmat_mul_a2(ax11, ax12, by11, by12, by21, by22, n_quad_v, w211, w212);
    dmat_scale_add_1x2(w111, w112, w211, w212, cy11, cy12, 1., n_quad_v);
  } else {
    dmat_mul_a3(ay11, ay12, bx11, bx12, bx21, bx22, n_quad_v, w111, w112, -1.,
                0);
    dmat_mul_a3(ax11, ax12, by11, by12, by21, by22, n_quad_v, w211, w212, -1.,
                0);
    dsym_add(w111, w211, cy11, n_quad_v, 1);
    dsym_add(w112, w212, cy12, n_quad_v, 0);
    dmat_sym(cy12, n_quad_v, -1.);
  }
  if (c0 != 0.)
    dmat_scale_add_1x2(uy11, uy12, cy11, cy12, uy11, uy12, c0, n_quad_v);
  if (c1 != 0.)
    dmat_scale_add_1x2(vy11, vy12, cy11, cy12, vy11, vy12, c1, n_quad_v);
  if (c2 != 0.)
    dmat_scale_add_1x2(wy11, wy12, cy11, cy12, wy11, wy12, c2, n_quad_v);
  if (c3 != 0.)
    dmat_scale_add_1x2(xy11, xy12, cy11, cy12, xy11, xy12, c3, n_quad_v);
}


x86 assembly (clang, -O0):
<add_u_v_term_l_2>:
push   %rbp
mov    %rsp,%rbp
push   %rbx
sub    $0x78,%rsp
mov    0xe0(%rbp),%eax
mov    0xd8(%rbp),%rax
mov    0xd0(%rbp),%rax
mov    0xc8(%rbp),%rax
mov    0xc0(%rbp),%rax
mov    0xb8(%rbp),%rax
mov    0xb0(%rbp),%rax
mov    0xa8(%rbp),%rax
mov    0xa0(%rbp),%rax
mov    0x98(%rbp),%rax
mov    0x90(%rbp),%rax
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%rax
mov    0x78(%rbp),%rax
mov    0x70(%rbp),%rax
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
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    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movsd  %xmm0,-0x38(%rbp)
movsd  %xmm1,-0x40(%rbp)
movsd  %xmm2,-0x48(%rbp)
movsd  %xmm3,-0x50(%rbp)
mov    -0xc(%rbp),%eax
imul   -0x10(%rbp),%eax
mov    %eax,-0x54(%rbp)
cmpl   $0x0,0xe0(%rbp)
jne    12e2 <add_u_v_term_l_2+0x192>
mov    0x20(%rbp),%rdi
mov    0x28(%rbp),%rsi
mov    -0x28(%rbp),%rdx
mov    -0x30(%rbp),%rcx
mov    0x10(%rbp),%r8
mov    0x18(%rbp),%r9
mov    -0x54(%rbp),%r11d
mov    0xa0(%rbp),%r10
mov    0xa8(%rbp),%rax
mov    %r11d,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1040 <dmat_mul_a2@plt>
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    0x30(%rbp),%rdx
mov    0x38(%rbp),%rcx
mov    0x40(%rbp),%r8
mov    0x48(%rbp),%r9
mov    -0x54(%rbp),%r11d
mov    0xc0(%rbp),%r10
mov    0xc8(%rbp),%rax
mov    %r11d,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1040 <dmat_mul_a2@plt>
mov    0xa0(%rbp),%rdi
mov    0xa8(%rbp),%rsi
mov    0xc0(%rbp),%rdx
mov    0xc8(%rbp),%rcx
mov    0x50(%rbp),%r8
mov    0x58(%rbp),%r9
mov    -0x54(%rbp),%eax
movsd  0xd2b(%rip),%xmm0
mov    %eax,(%rsp)
call   1050 <dmat_scale_add_1x2@plt>
jmp    13ce <add_u_v_term_l_2+0x27e>
mov    0x20(%rbp),%rdi
mov    0x28(%rbp),%rsi
mov    -0x28(%rbp),%rdx
mov    -0x30(%rbp),%rcx
mov    0x10(%rbp),%r8
mov    0x18(%rbp),%r9
mov    -0x54(%rbp),%r11d
mov    0xa0(%rbp),%r10
mov    0xa8(%rbp),%rax
xor    %ebx,%ebx
mov    %r11d,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
movl   $0xffffffff,0x18(%rsp)
ff
movl   $0x0,0x20(%rsp)
call   1070 <dmat_mul_a3@plt>
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    0x30(%rbp),%rdx
mov    0x38(%rbp),%rcx
mov    0x40(%rbp),%r8
mov    0x48(%rbp),%r9
mov    -0x54(%rbp),%r11d
mov    0xc0(%rbp),%r10
mov    0xc8(%rbp),%rax
xor    %ebx,%ebx
mov    %r11d,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
movl   $0xffffffff,0x18(%rsp)
ff
movl   $0x0,0x20(%rsp)
call   1070 <dmat_mul_a3@plt>
mov    0xa0(%rbp),%rdi
mov    0xc0(%rbp),%rsi
mov    0x50(%rbp),%rdx
mov    -0x54(%rbp),%ecx
mov    $0x1,%r8d
call   1060 <dsym_add@plt>
mov    0xa8(%rbp),%rdi
mov    0xc8(%rbp),%rsi
mov    0x58(%rbp),%rdx
mov    -0x54(%rbp),%ecx
xor    %r8d,%r8d
call   1060 <dsym_add@plt>
mov    0x58(%rbp),%rdi
mov    -0x54(%rbp),%esi
mov    $0xffffffff,%edx
call   1030 <dmat_sym@plt>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13eb <add_u_v_term_l_2+0x29b>
jp     13eb <add_u_v_term_l_2+0x29b>
jmp    1413 <add_u_v_term_l_2+0x2c3>
mov    0x60(%rbp),%rdi
mov    0x68(%rbp),%rsi
mov    0x50(%rbp),%rdx
mov    0x58(%rbp),%rcx
mov    0x60(%rbp),%r8
mov    0x68(%rbp),%r9
movsd  -0x38(%rbp),%xmm0
mov    -0x54(%rbp),%eax
mov    %eax,(%rsp)
call   1050 <dmat_scale_add_1x2@plt>
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1430 <add_u_v_term_l_2+0x2e0>
jp     1430 <add_u_v_term_l_2+0x2e0>
jmp    1458 <add_u_v_term_l_2+0x308>
mov    0x70(%rbp),%rdi
mov    0x78(%rbp),%rsi
mov    0x50(%rbp),%rdx
mov    0x58(%rbp),%rcx
mov    0x70(%rbp),%r8
mov    0x78(%rbp),%r9
movsd  -0x40(%rbp),%xmm0
mov    -0x54(%rbp),%eax
mov    %eax,(%rsp)
call   1050 <dmat_scale_add_1x2@plt>
movsd  -0x48(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1475 <add_u_v_term_l_2+0x325>
jp     1475 <add_u_v_term_l_2+0x325>
jmp    14a9 <add_u_v_term_l_2+0x359>
mov    0x80(%rbp),%rdi
mov    0x88(%rbp),%rsi
mov    0x50(%rbp),%rdx
mov    0x58(%rbp),%rcx
mov    0x80(%rbp),%r8
mov    0x88(%rbp),%r9
movsd  -0x48(%rbp),%xmm0
mov    -0x54(%rbp),%eax
mov    %eax,(%rsp)
call   1050 <dmat_scale_add_1x2@plt>
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    14c6 <add_u_v_term_l_2+0x376>
jp     14c6 <add_u_v_term_l_2+0x376>
jmp    14fa <add_u_v_term_l_2+0x3aa>
mov    0x90(%rbp),%rdi
mov    0x98(%rbp),%rsi
mov    0x50(%rbp),%rdx
mov    0x58(%rbp),%rcx
mov    0x90(%rbp),%r8
mov    0x98(%rbp),%r9
movsd  -0x50(%rbp),%xmm0
mov    -0x54(%rbp),%eax
mov    %eax,(%rsp)
call   1050 <dmat_scale_add_1x2@plt>
add    $0x78,%rsp
pop    %rbx
pop    %rbp
ret

x86 assembly (clang, -O2):
<add_u_v_term_l_2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
movsd  %xmm3,0x20(%rsp)
movsd  %xmm2,0x18(%rsp)
movsd  %xmm1,0x10(%rsp)
movsd  %xmm0,0x8(%rsp)
mov    %r9,%rax
mov    %r8,%rbp
mov    %rcx,%r14
mov    %rdx,%r12
mov    %edi,%ebx
mov    0xf8(%rsp),%r10
mov    0xf0(%rsp),%r15
imul   %esi,%ebx
mov    0x80(%rsp),%r13
cmpl   $0x0,0x130(%rsp)
mov    0x78(%rsp),%rsi
mov    0x70(%rsp),%rdi
mov    0x68(%rsp),%r9
mov    0x60(%rsp),%r8
je     1271 <add_u_v_term_l_2+0x121>
sub    $0x8,%rsp
mov    %rbp,%rdx
mov    %rax,%rcx
push   $0x0
push   $0xffffffffffffffff
push   %r10
push   %r15
push   %rbx
call   1070 <dmat_mul_a3@plt>
add    $0x28,%rsp
mov    %r12,%rdi
mov    %r14,%rsi
mov    %r13,%rdx
mov    0x90(%rsp),%rcx
mov    0x98(%rsp),%r8
mov    0xa0(%rsp),%r9
push   $0x0
push   $0xffffffffffffffff
mov    0x130(%rsp),%r14
push   %r14
mov    0x130(%rsp),%rbp
push   %rbp
push   %rbx
call   1070 <dmat_mul_a3@plt>
add    $0x30,%rsp
mov    %r15,%rdi
mov    %rbp,%rsi
mov    0xa0(%rsp),%rbp
mov    %rbp,%rdx
mov    %ebx,%ecx
mov    $0x1,%r8d
call   1060 <dsym_add@plt>
mov    0xf8(%rsp),%rdi
mov    %r14,%rsi
mov    0xa8(%rsp),%r14
mov    %r14,%rdx
mov    %ebx,%ecx
xor    %r8d,%r8d
call   1060 <dsym_add@plt>
mov    %r14,%rdi
mov    %ebx,%esi
mov    $0xffffffff,%edx
call   1030 <dmat_sym@plt>
jmp    1300 <add_u_v_term_l_2+0x1b0>
sub    $0x8,%rsp
mov    %rbp,%rdx
mov    %rax,%rcx
push   %r10
push   %r15
push   %rbx
call   1040 <dmat_mul_a2@plt>
add    $0x18,%rsp
mov    %r12,%rdi
mov    %r14,%rsi
mov    %r13,%rdx
mov    0x90(%rsp),%rcx
mov    0x98(%rsp),%r8
mov    0xa0(%rsp),%r9
mov    0x120(%rsp),%r14
push   %r14
mov    0x120(%rsp),%rbp
push   %rbp
push   %rbx
call   1040 <dmat_mul_a2@plt>
add    $0x18,%rsp
movsd  0xd31(%rip),%xmm0
mov    %r15,%rdi
mov    0x100(%rsp),%rsi
mov    %rbp,%rdx
mov    %r14,%rcx
mov    0xa8(%rsp),%rbp
mov    %rbp,%r8
mov    0xb0(%rsp),%r14
mov    %r14,%r9
push   %rbx
call   1050 <dmat_scale_add_1x2@plt>
add    $0x10,%rsp
xorpd  %xmm1,%xmm1
movsd  0x8(%rsp),%xmm0
ucomisd %xmm1,%xmm0
jne    1312 <add_u_v_term_l_2+0x1c2>
jnp    1340 <add_u_v_term_l_2+0x1f0>
mov    0xb8(%rsp),%rsi
mov    0xb0(%rsp),%rdi
sub    $0x8,%rsp
mov    %rbp,%rdx
mov    %r14,%rcx
mov    %rdi,%r8
mov    %rsi,%r9
push   %rbx
call   1050 <dmat_scale_add_1x2@plt>
xorpd  %xmm1,%xmm1
add    $0x10,%rsp
movsd  0x10(%rsp),%xmm0
ucomisd %xmm1,%xmm0
jne    134e <add_u_v_term_l_2+0x1fe>
jnp    1378 <add_u_v_term_l_2+0x228>
mov    0xc8(%rsp),%rsi
mov    0xc0(%rsp),%rdi
sub    $0x8,%rsp
mov    %rbp,%rdx
mov    %r14,%rcx
mov    %rdi,%r8
mov    %rsi,%r9
push   %rbx
call   1050 <dmat_scale_add_1x2@plt>
add    $0x10,%rsp
xorpd  %xmm1,%xmm1
movsd  0x18(%rsp),%xmm0
ucomisd %xmm1,%xmm0
jne    138a <add_u_v_term_l_2+0x23a>
jnp    13b8 <add_u_v_term_l_2+0x268>
mov    0xd8(%rsp),%rsi
mov    0xd0(%rsp),%rdi
sub    $0x8,%rsp
mov    %rbp,%rdx
mov    %r14,%rcx
mov    %rdi,%r8
mov    %rsi,%r9
push   %rbx
call   1050 <dmat_scale_add_1x2@plt>
xorpd  %xmm1,%xmm1
add    $0x10,%rsp
movsd  0x20(%rsp),%xmm0
ucomisd %xmm1,%xmm0
jne    13c6 <add_u_v_term_l_2+0x276>
jnp    13f2 <add_u_v_term_l_2+0x2a2>
mov    0xe8(%rsp),%rsi
mov    0xe0(%rsp),%rdi
sub    $0x8,%rsp
mov    %rbp,%rdx
mov    %r14,%rcx
mov    %rdi,%r8
mov    %rsi,%r9
push   %rbx
call   1050 <dmat_scale_add_1x2@plt>
add    $0x38,%rsp
jmp    13f6 <add_u_v_term_l_2+0x2a6>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @add_u_v_term_l_2(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, double** %16, double** %17, double** %18, double** %19, double** %20, double** %21, double** %22, double** %23, double** %24, double** %25, double** %26, double** %27, double** %28, double** %29, double** %30, double** %31, double %32, double %33, double %34, double %35, i32 %36) {
%38 = alloca i32
%39 = alloca i32
%40 = alloca double**
%41 = alloca double**
%42 = alloca double**
%43 = alloca double**
%44 = alloca double**
%45 = alloca double**
%46 = alloca double**
%47 = alloca double**
%48 = alloca double**
%49 = alloca double**
%50 = alloca double**
%51 = alloca double**
%52 = alloca double**
%53 = alloca double**
%54 = alloca double**
%55 = alloca double**
%56 = alloca double**
%57 = alloca double**
%58 = alloca double**
%59 = alloca double**
%60 = alloca double**
%61 = alloca double**
%62 = alloca double**
%63 = alloca double**
%64 = alloca double**
%65 = alloca double**
%66 = alloca double**
%67 = alloca double**
%68 = alloca double**
%69 = alloca double**
%70 = alloca double
%71 = alloca double
%72 = alloca double
%73 = alloca double
%74 = alloca i32
%75 = alloca i32
store i32 %0, i32* %38
store i32 %1, i32* %39
store double** %2, double*** %40
store double** %3, double*** %41
store double** %4, double*** %42
store double** %5, double*** %43
store double** %6, double*** %44
store double** %7, double*** %45
store double** %8, double*** %46
store double** %9, double*** %47
store double** %10, double*** %48
store double** %11, double*** %49
store double** %12, double*** %50
store double** %13, double*** %51
store double** %14, double*** %52
store double** %15, double*** %53
store double** %16, double*** %54
store double** %17, double*** %55
store double** %18, double*** %56
store double** %19, double*** %57
store double** %20, double*** %58
store double** %21, double*** %59
store double** %22, double*** %60
store double** %23, double*** %61
store double** %24, double*** %62
store double** %25, double*** %63
store double** %26, double*** %64
store double** %27, double*** %65
store double** %28, double*** %66
store double** %29, double*** %67
store double** %30, double*** %68
store double** %31, double*** %69
store double %32, double* %70
store double %33, double* %71
store double %34, double* %72
store double %35, double* %73
store i32 %36, i32* %74
%76 = load i32, i32* %38
%77 = load i32, i32* %39
%78 = mul nsw i32 %76, %77
store i32 %78, i32* %75
%79 = load i32, i32* %74
%80 = icmp ne i32 %79, 0
br i1 %80, label %110, label %81
81: ; preds = %37
%82 = load double**, double*** %46
%83 = load double**, double*** %47
%84 = load double**, double*** %42
%85 = load double**, double*** %43
%86 = load double**, double*** %44
%87 = load double**, double*** %45
%88 = load i32, i32* %75
%89 = load double**, double*** %62
%90 = load double**, double*** %63
%91 = call i32 @dmat_mul_a2(double** %82, double** %83, double** %84, double** %85, double** %86, double** %87, i32 %88, double** %89, double** %90)
%92 = load double**, double*** %40
%93 = load double**, double*** %41
%94 = load double**, double*** %48
%95 = load double**, double*** %49
%96 = load double**, double*** %50
%97 = load double**, double*** %51
%98 = load i32, i32* %75
%99 = load double**, double*** %66
%100 = load double**, double*** %67
%101 = call i32 @dmat_mul_a2(double** %92, double** %93, double** %94, double** %95, double** %96, double** %97, i32 %98, double** %99, double** %100)
%102 = load double**, double*** %62
%103 = load double**, double*** %63
%104 = load double**, double*** %66
%105 = load double**, double*** %67
%106 = load double**, double*** %52
%107 = load double**, double*** %53
%108 = load i32, i32* %75
%109 = call i32 @dmat_scale_add_1x2(double** %102, double** %103, double** %104, double** %105, double** %106, double** %107, double 1.000000e+00, i32 %108)
br label %144
110: ; preds = %37
%111 = load double**, double*** %46
%112 = load double**, double*** %47
%113 = load double**, double*** %42
%114 = load double**, double*** %43
%115 = load double**, double*** %44
%116 = load double**, double*** %45
%117 = load i32, i32* %75
%118 = load double**, double*** %62
%119 = load double**, double*** %63
%120 = call i32 @dmat_mul_a3(double** %111, double** %112, double** %113, double** %114, double** %115, double** %116, i32 %117, double** %118, double** %119, i32 -1, i32 0)
%121 = load double**, double*** %40
%122 = load double**, double*** %41
%123 = load double**, double*** %48
%124 = load double**, double*** %49
%125 = load double**, double*** %50
%126 = load double**, double*** %51
%127 = load i32, i32* %75
%128 = load double**, double*** %66
%129 = load double**, double*** %67
%130 = call i32 @dmat_mul_a3(double** %121, double** %122, double** %123, double** %124, double** %125, double** %126, i32 %127, double** %128, double** %129, i32 -1, i32 0)
%131 = load double**, double*** %62
%132 = load double**, double*** %66
%133 = load double**, double*** %52
%134 = load i32, i32* %75
%135 = call i32 @dsym_add(double** %131, double** %132, double** %133, i32 %134, i32 1)
%136 = load double**, double*** %63
%137 = load double**, double*** %67
%138 = load double**, double*** %53
%139 = load i32, i32* %75
%140 = call i32 @dsym_add(double** %136, double** %137, double** %138, i32 %139, i32 0)
%141 = load double**, double*** %53
%142 = load i32, i32* %75
%143 = call i32 @dmat_sym(double** %141, i32 %142, i32 -1)
br label %144
144: ; preds = %110, %81
%145 = load double, double* %70
%146 = fcmp une double %145, 0.000000e+00
br i1 %146, label %147, label %157
147: ; preds = %144
%148 = load double**, double*** %54
%149 = load double**, double*** %55
%150 = load double**, double*** %52
%151 = load double**, double*** %53
%152 = load double**, double*** %54
%153 = load double**, double*** %55
%154 = load double, double* %70
%155 = load i32, i32* %75
%156 = call i32 @dmat_scale_add_1x2(double** %148, double** %149, double** %150, double** %151, double** %152, double** %153, double %154, i32 %155)
br label %157
157: ; preds = %147, %144
%158 = load double, double* %71
%159 = fcmp une double %158, 0.000000e+00
br i1 %159, label %160, label %170
160: ; preds = %157
%161 = load double**, double*** %56
%162 = load double**, double*** %57
%163 = load double**, double*** %52
%164 = load double**, double*** %53
%165 = load double**, double*** %56
%166 = load double**, double*** %57
%167 = load double, double* %71
%168 = load i32, i32* %75
%169 = call i32 @dmat_scale_add_1x2(double** %161, double** %162, double** %163, double** %164, double** %165, double** %166, double %167, i32 %168)
br label %170
170: ; preds = %160, %157
%171 = load double, double* %72
%172 = fcmp une double %171, 0.000000e+00
br i1 %172, label %173, label %183
173: ; preds = %170
%174 = load double**, double*** %58
%175 = load double**, double*** %59
%176 = load double**, double*** %52
%177 = load double**, double*** %53
%178 = load double**, double*** %58
%179 = load double**, double*** %59
%180 = load double, double* %72
%181 = load i32, i32* %75
%182 = call i32 @dmat_scale_add_1x2(double** %174, double** %175, double** %176, double** %177, double** %178, double** %179, double %180, i32 %181)
br label %183
183: ; preds = %173, %170
%184 = load double, double* %73
%185 = fcmp une double %184, 0.000000e+00
br i1 %185, label %186, label %196
186: ; preds = %183
%187 = load double**, double*** %60
%188 = load double**, double*** %61
%189 = load double**, double*** %52
%190 = load double**, double*** %53
%191 = load double**, double*** %60
%192 = load double**, double*** %61
%193 = load double, double* %73
%194 = load i32, i32* %75
%195 = call i32 @dmat_scale_add_1x2(double** %187, double** %188, double** %189, double** %190, double** %191, double** %192, double %193, i32 %194)
br label %196
196: ; preds = %186, %183
ret void
}

LLVM IR (-O2):
define void @add_u_v_term_l_2(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, double** %16, double** %17, double** %18, double** %19, double** %20, double** %21, double** %22, double** %23, double** %24, double** %25, double** nocapture readnone %26, double** nocapture readnone %27, double** %28, double** %29, double** nocapture readnone %30, double** nocapture readnone %31, double %32, double %33, double %34, double %35, i32 %36) {
%38 = mul nsw i32 %1, %0
%39 = icmp eq i32 %36, 0
br i1 %39, label %40, label %44
40: ; preds = %37
%41 = tail call i32 @dmat_mul_a2(double** %8, double** %9, double** %4, double** %5, double** %6, double** %7, i32 %38, double** %24, double** %25)
%42 = tail call i32 @dmat_mul_a2(double** %2, double** %3, double** %10, double** %11, double** %12, double** %13, i32 %38, double** %28, double** %29)
%43 = tail call i32 @dmat_scale_add_1x2(double** %24, double** %25, double** %28, double** %29, double** %14, double** %15, double 1.000000e+00, i32 %38)
br label %50
44: ; preds = %37
%45 = tail call i32 @dmat_mul_a3(double** %8, double** %9, double** %4, double** %5, double** %6, double** %7, i32 %38, double** %24, double** %25, i32 -1, i32 0)
%46 = tail call i32 @dmat_mul_a3(double** %2, double** %3, double** %10, double** %11, double** %12, double** %13, i32 %38, double** %28, double** %29, i32 -1, i32 0)
%47 = tail call i32 @dsym_add(double** %24, double** %28, double** %14, i32 %38, i32 1)
%48 = tail call i32 @dsym_add(double** %25, double** %29, double** %15, i32 %38, i32 0)
%49 = tail call i32 @dmat_sym(double** %15, i32 %38, i32 -1)
br label %50
50: ; preds = %44, %40
%51 = fcmp une double %32, 0.000000e+00
br i1 %51, label %52, label %54
52: ; preds = %50
%53 = tail call i32 @dmat_scale_add_1x2(double** %16, double** %17, double** %14, double** %15, double** %16, double** %17, double %32, i32 %38)
br label %54
54: ; preds = %52, %50
%55 = fcmp une double %33, 0.000000e+00
br i1 %55, label %56, label %58
56: ; preds = %54
%57 = tail call i32 @dmat_scale_add_1x2(double** %18, double** %19, double** %14, double** %15, double** %18, double** %19, double %33, i32 %38)
br label %58
58: ; preds = %56, %54
%59 = fcmp une double %34, 0.000000e+00
br i1 %59, label %60, label %62
60: ; preds = %58
%61 = tail call i32 @dmat_scale_add_1x2(double** %20, double** %21, double** %14, double** %15, double** %20, double** %21, double %34, i32 %38)
br label %62
62: ; preds = %60, %58
%63 = fcmp une double %35, 0.000000e+00
br i1 %63, label %64, label %66
64: ; preds = %62
%65 = tail call i32 @dmat_scale_add_1x2(double** %22, double** %23, double** %14, double** %15, double** %22, double** %23, double %35, i32 %38)
br label %66
66: ; preds = %64, %62
ret void
}