#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*/ matrix_ij_A(int, double *, double, double, double, double,
                               double);
int /*<<< orphan*/ matrix_ij_B(int, double *, double, double, double, double);
int /*<<< orphan*/ matrix_ij_C(int, double *, double, double, double, double,
                               double);
int /*<<< orphan*/ matrix_ij_G(int, double *, double, double, double, double,
                               double);
int /*<<< orphan*/ matrix_ij_GT(int, double *, double, double, double, double,
                                double);
int /*<<< orphan*/ matrix_ij_H(int, double *, double, double, double, double);
int /*<<< orphan*/ matrix_ij_HT(int, double *, double, double, double, double);
int /*<<< orphan*/ matrix_ij_M(int, double *, double, double, double, double,
                               double, double);
void matrix_fts_ij(int i, int j, double ex, double ey, double ez, double xa,
                   double ya, double yb, double xc, double yc, double xg,
                   double yg, double yh, double xm, double ym, double zm,
                   int n11, double *mat) {
  int i1, i4, i7;
  int j1, j4, j7;
  i1 = i * 11;
  i4 = i1 + 3;
  i7 = i1 + 6;
  j1 = j * 11;
  j4 = j1 + 3;
  j7 = j1 + 6;
  matrix_ij_A(n11, &mat[i1 * n11 + j1], ex, ey, ez, xa, ya);
  matrix_ij_B(n11, &mat[i4 * n11 + j1], ex, ey, ez, yb);
  if (i == j) {
    matrix_ij_B(n11, &mat[i1 * n11 + j4], ex, ey, ez, -yb);
  } else {
    matrix_ij_B(n11, &mat[i1 * n11 + j4], ex, ey, ez, yb);
  }
  matrix_ij_C(n11, &mat[i4 * n11 + j4], ex, ey, ez, xc, yc);
  matrix_ij_G(n11, &mat[i7 * n11 + j1], ex, ey, ez, xg, yg);
  if (i == j) {
    matrix_ij_GT(n11, &mat[i1 * n11 + j7], ex, ey, ez, xg, yg);
  } else {
    matrix_ij_GT(n11, &mat[i1 * n11 + j7], ex, ey, ez, -xg, -yg);
  }
  matrix_ij_H(n11, &mat[i7 * n11 + j4], ex, ey, ez, yh);
  matrix_ij_HT(n11, &mat[i4 * n11 + j7], ex, ey, ez, yh);
  matrix_ij_M(n11, &mat[i7 * n11 + j7], ex, ey, ez, xm, ym, zm);
}


x86 assembly (clang, -O0):
<matrix_fts_ij>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movsd  0x38(%rbp),%xmm8
movsd  0x30(%rbp),%xmm8
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
mov    %edx,-0x4c(%rbp)
mov    %rcx,-0x58(%rbp)
imul   $0xb,-0x4(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x60(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x64(%rbp)
imul   $0xb,-0x8(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x68(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x70(%rbp)
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x5c(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x68(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
movsd  -0x30(%rbp),%xmm4
call   1040 <matrix_ij_A@plt>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x60(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x68(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
call   1090 <matrix_ij_B@plt>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    12d9 <matrix_fts_ij+0x159>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x5c(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x6c(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
call   1090 <matrix_ij_B@plt>
jmp    130c <matrix_fts_ij+0x18c>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x5c(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x6c(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
call   1090 <matrix_ij_B@plt>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x60(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x6c(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
call   1060 <matrix_ij_C@plt>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x64(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x68(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  0x10(%rbp),%xmm3
movsd  0x18(%rbp),%xmm4
call   1070 <matrix_ij_G@plt>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    13c5 <matrix_fts_ij+0x245>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x5c(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x70(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  0x10(%rbp),%xmm3
movsd  0x18(%rbp),%xmm4
call   1080 <matrix_ij_GT@plt>
jmp    142b <matrix_fts_ij+0x2ab>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x5c(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x70(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  0x10(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
movsd  0x18(%rbp),%xmm4
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
call   1080 <matrix_ij_GT@plt>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x64(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x6c(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  0x20(%rbp),%xmm3
call   10a0 <matrix_ij_H@plt>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x60(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x70(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  0x20(%rbp),%xmm3
call   1030 <matrix_ij_HT@plt>
mov    -0x4c(%rbp),%edi
mov    -0x58(%rbp),%rsi
mov    -0x64(%rbp),%eax
imul   -0x4c(%rbp),%eax
add    -0x70(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rsi
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  0x28(%rbp),%xmm3
movsd  0x30(%rbp),%xmm4
movsd  0x38(%rbp),%xmm5
call   1050 <matrix_ij_M@plt>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<matrix_fts_ij>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x98,%rsp
mov    %rcx,0x88(%rsp)
mov    %edx,%r13d
movsd  %xmm7,0x30(%rsp)
movsd  %xmm6,0x28(%rsp)
movaps %xmm5,0x40(%rsp)
movsd  %xmm2,0x18(%rsp)
movsd  %xmm1,0x10(%rsp)
movaps %xmm0,%xmm5
movsd  %xmm0,0x8(%rsp)
mov    %esi,%r15d
mov    %edi,%r12d
movsd  0xd0(%rsp),%xmm0
movaps %xmm0,0x60(%rsp)
movsd  0xd8(%rsp),%xmm0
movaps %xmm0,0x70(%rsp)
lea    (%r12,%r12,4),%eax
lea    (%r12,%rax,2),%r14d
lea    0x3(%r12,%rax,2),%ebx
lea    0x6(%r12,%rax,2),%eax
mov    %eax,0x24(%rsp)
lea    (%r15,%r15,4),%eax
mov    %rax,0x38(%rsp)
lea    (%r15,%rax,2),%ebp
imul   %edx,%r14d
lea    (%r14,%rbp,1),%eax
cltq
lea    (%rcx,%rax,8),%rsi
mov    %edx,%edi
movaps %xmm5,%xmm0
call   1040 <matrix_ij_A@plt>
imul   %r13d,%ebx
mov    %rbx,0x58(%rsp)
lea    (%rbx,%rbp,1),%eax
mov    %r14,%rbx
mov    0x88(%rsp),%r14
cltq
lea    (%r14,%rax,8),%rsi
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
movaps 0x40(%rsp),%xmm3
call   1090 <matrix_ij_B@plt>
lea    (%rbx,%rbp,1),%eax
add    $0x3,%eax
cltq
lea    (%r14,%rax,8),%rsi
cmp    %r15d,%r12d
je     1273 <matrix_fts_ij+0xf3>
movaps 0x40(%rsp),%xmm3
jmp    127f <matrix_fts_ij+0xff>
movaps 0x40(%rsp),%xmm3
xorps  0xd81(%rip),%xmm3
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
call   1090 <matrix_ij_B@plt>
mov    0x58(%rsp),%rax
add    %ebp,%eax
add    $0x3,%eax
cltq
lea    (%r14,%rax,8),%rsi
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
movsd  0x28(%rsp),%xmm3
movsd  0x30(%rsp),%xmm4
call   1060 <matrix_ij_C@plt>
mov    0x24(%rsp),%ecx
imul   %r13d,%ecx
mov    %ebp,%eax
mov    %ecx,0x24(%rsp)
add    %ecx,%eax
cltq
lea    (%r14,%rax,8),%rsi
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
movaps 0x60(%rsp),%xmm3
movaps 0x70(%rsp),%xmm4
call   1070 <matrix_ij_G@plt>
movsd  0xf8(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xf0(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0xe8(%rsp),%xmm0
movsd  %xmm0,0x90(%rsp)
movsd  0xe0(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
lea    0x6(%rbx,%rbp,1),%eax
mov    0x38(%rsp),%rcx
lea    0x3(%r15,%rcx,2),%ebp
lea    0x6(%r15,%rcx,2),%ecx
mov    %ecx,0x38(%rsp)
cltq
lea    (%r14,%rax,8),%rsi
cmp    %r15d,%r12d
jne    138b <matrix_fts_ij+0x20b>
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
movaps 0x60(%rsp),%xmm3
movaps 0x70(%rsp),%xmm4
jmp    13b7 <matrix_fts_ij+0x237>
movaps 0xc6e(%rip),%xmm0
movaps 0x60(%rsp),%xmm3
xorps  %xmm0,%xmm3
movaps 0x70(%rsp),%xmm4
xorps  %xmm0,%xmm4
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
call   1080 <matrix_ij_GT@plt>
mov    0x24(%rsp),%ebx
add    %ebx,%ebp
movslq %ebp,%rax
lea    (%r14,%rax,8),%rsi
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
movsd  0x40(%rsp),%xmm3
call   10a0 <matrix_ij_H@plt>
mov    0x58(%rsp),%rax
mov    0x38(%rsp),%ebp
add    %ebp,%eax
cltq
lea    (%r14,%rax,8),%rsi
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
movsd  0x40(%rsp),%xmm3
call   1030 <matrix_ij_HT@plt>
add    %ebp,%ebx
movslq %ebx,%rax
lea    (%r14,%rax,8),%rsi
mov    %r13d,%edi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
movsd  0x90(%rsp),%xmm3
movsd  0x28(%rsp),%xmm4
movsd  0x30(%rsp),%xmm5
add    $0x98,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <matrix_ij_M@plt>

LLVM IR (-O0):
define void @matrix_fts_ij(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, i32 %16, double* %17) {
%19 = alloca i32
%20 = alloca i32
%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 double
%34 = alloca double
%35 = alloca i32
%36 = alloca double*
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
store i32 %0, i32* %19
store i32 %1, i32* %20
store double %2, double* %21
store double %3, double* %22
store double %4, double* %23
store double %5, double* %24
store double %6, double* %25
store double %7, double* %26
store double %8, double* %27
store double %9, double* %28
store double %10, double* %29
store double %11, double* %30
store double %12, double* %31
store double %13, double* %32
store double %14, double* %33
store double %15, double* %34
store i32 %16, i32* %35
store double* %17, double** %36
%43 = load i32, i32* %19
%44 = mul nsw i32 %43, 11
store i32 %44, i32* %37
%45 = load i32, i32* %37
%46 = add nsw i32 %45, 3
store i32 %46, i32* %38
%47 = load i32, i32* %37
%48 = add nsw i32 %47, 6
store i32 %48, i32* %39
%49 = load i32, i32* %20
%50 = mul nsw i32 %49, 11
store i32 %50, i32* %40
%51 = load i32, i32* %40
%52 = add nsw i32 %51, 3
store i32 %52, i32* %41
%53 = load i32, i32* %40
%54 = add nsw i32 %53, 6
store i32 %54, i32* %42
%55 = load i32, i32* %35
%56 = load double*, double** %36
%57 = load i32, i32* %37
%58 = load i32, i32* %35
%59 = mul nsw i32 %57, %58
%60 = load i32, i32* %40
%61 = add nsw i32 %59, %60
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds double, double* %56, i64 %62
%64 = load double, double* %21
%65 = load double, double* %22
%66 = load double, double* %23
%67 = load double, double* %24
%68 = load double, double* %25
%69 = call i32 @matrix_ij_A(i32 %55, double* %63, double %64, double %65, double %66, double %67, double %68)
%70 = load i32, i32* %35
%71 = load double*, double** %36
%72 = load i32, i32* %38
%73 = load i32, i32* %35
%74 = mul nsw i32 %72, %73
%75 = load i32, i32* %40
%76 = add nsw i32 %74, %75
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds double, double* %71, i64 %77
%79 = load double, double* %21
%80 = load double, double* %22
%81 = load double, double* %23
%82 = load double, double* %26
%83 = call i32 @matrix_ij_B(i32 %70, double* %78, double %79, double %80, double %81, double %82)
%84 = load i32, i32* %19
%85 = load i32, i32* %20
%86 = icmp eq i32 %84, %85
br i1 %86, label %87, label %103
87: ; preds = %18
%88 = load i32, i32* %35
%89 = load double*, double** %36
%90 = load i32, i32* %37
%91 = load i32, i32* %35
%92 = mul nsw i32 %90, %91
%93 = load i32, i32* %41
%94 = add nsw i32 %92, %93
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds double, double* %89, i64 %95
%97 = load double, double* %21
%98 = load double, double* %22
%99 = load double, double* %23
%100 = load double, double* %26
%101 = fneg double %100
%102 = call i32 @matrix_ij_B(i32 %88, double* %96, double %97, double %98, double %99, double %101)
br label %118
103: ; preds = %18
%104 = load i32, i32* %35
%105 = load double*, double** %36
%106 = load i32, i32* %37
%107 = load i32, i32* %35
%108 = mul nsw i32 %106, %107
%109 = load i32, i32* %41
%110 = add nsw i32 %108, %109
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds double, double* %105, i64 %111
%113 = load double, double* %21
%114 = load double, double* %22
%115 = load double, double* %23
%116 = load double, double* %26
%117 = call i32 @matrix_ij_B(i32 %104, double* %112, double %113, double %114, double %115, double %116)
br label %118
118: ; preds = %103, %87
%119 = load i32, i32* %35
%120 = load double*, double** %36
%121 = load i32, i32* %38
%122 = load i32, i32* %35
%123 = mul nsw i32 %121, %122
%124 = load i32, i32* %41
%125 = add nsw i32 %123, %124
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds double, double* %120, i64 %126
%128 = load double, double* %21
%129 = load double, double* %22
%130 = load double, double* %23
%131 = load double, double* %27
%132 = load double, double* %28
%133 = call i32 @matrix_ij_C(i32 %119, double* %127, double %128, double %129, double %130, double %131, double %132)
%134 = load i32, i32* %35
%135 = load double*, double** %36
%136 = load i32, i32* %39
%137 = load i32, i32* %35
%138 = mul nsw i32 %136, %137
%139 = load i32, i32* %40
%140 = add nsw i32 %138, %139
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds double, double* %135, i64 %141
%143 = load double, double* %21
%144 = load double, double* %22
%145 = load double, double* %23
%146 = load double, double* %29
%147 = load double, double* %30
%148 = call i32 @matrix_ij_G(i32 %134, double* %142, double %143, double %144, double %145, double %146, double %147)
%149 = load i32, i32* %19
%150 = load i32, i32* %20
%151 = icmp eq i32 %149, %150
br i1 %151, label %152, label %168
152: ; preds = %118
%153 = load i32, i32* %35
%154 = load double*, double** %36
%155 = load i32, i32* %37
%156 = load i32, i32* %35
%157 = mul nsw i32 %155, %156
%158 = load i32, i32* %42
%159 = add nsw i32 %157, %158
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds double, double* %154, i64 %160
%162 = load double, double* %21
%163 = load double, double* %22
%164 = load double, double* %23
%165 = load double, double* %29
%166 = load double, double* %30
%167 = call i32 @matrix_ij_GT(i32 %153, double* %161, double %162, double %163, double %164, double %165, double %166)
br label %186
168: ; preds = %118
%169 = load i32, i32* %35
%170 = load double*, double** %36
%171 = load i32, i32* %37
%172 = load i32, i32* %35
%173 = mul nsw i32 %171, %172
%174 = load i32, i32* %42
%175 = add nsw i32 %173, %174
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds double, double* %170, i64 %176
%178 = load double, double* %21
%179 = load double, double* %22
%180 = load double, double* %23
%181 = load double, double* %29
%182 = fneg double %181
%183 = load double, double* %30
%184 = fneg double %183
%185 = call i32 @matrix_ij_GT(i32 %169, double* %177, double %178, double %179, double %180, double %182, double %184)
br label %186
186: ; preds = %168, %152
%187 = load i32, i32* %35
%188 = load double*, double** %36
%189 = load i32, i32* %39
%190 = load i32, i32* %35
%191 = mul nsw i32 %189, %190
%192 = load i32, i32* %41
%193 = add nsw i32 %191, %192
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds double, double* %188, i64 %194
%196 = load double, double* %21
%197 = load double, double* %22
%198 = load double, double* %23
%199 = load double, double* %31
%200 = call i32 @matrix_ij_H(i32 %187, double* %195, double %196, double %197, double %198, double %199)
%201 = load i32, i32* %35
%202 = load double*, double** %36
%203 = load i32, i32* %38
%204 = load i32, i32* %35
%205 = mul nsw i32 %203, %204
%206 = load i32, i32* %42
%207 = add nsw i32 %205, %206
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds double, double* %202, i64 %208
%210 = load double, double* %21
%211 = load double, double* %22
%212 = load double, double* %23
%213 = load double, double* %31
%214 = call i32 @matrix_ij_HT(i32 %201, double* %209, double %210, double %211, double %212, double %213)
%215 = load i32, i32* %35
%216 = load double*, double** %36
%217 = load i32, i32* %39
%218 = load i32, i32* %35
%219 = mul nsw i32 %217, %218
%220 = load i32, i32* %42
%221 = add nsw i32 %219, %220
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds double, double* %216, i64 %222
%224 = load double, double* %21
%225 = load double, double* %22
%226 = load double, double* %23
%227 = load double, double* %32
%228 = load double, double* %33
%229 = load double, double* %34
%230 = call i32 @matrix_ij_M(i32 %215, double* %223, double %224, double %225, double %226, double %227, double %228, double %229)
ret void
}

LLVM IR (-O2):
define void @matrix_fts_ij(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, i32 %16, double* %17) {
%19 = mul nsw i32 %0, 11
%20 = add nsw i32 %19, 3
%21 = add nsw i32 %19, 6
%22 = mul nsw i32 %1, 11
%23 = add nsw i32 %22, 3
%24 = add nsw i32 %22, 6
%25 = mul nsw i32 %19, %16
%26 = add nsw i32 %25, %22
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds double, double* %17, i64 %27
%29 = tail call i32 @matrix_ij_A(i32 %16, double* %28, double %2, double %3, double %4, double %5, double %6)
%30 = mul nsw i32 %20, %16
%31 = add nsw i32 %30, %22
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds double, double* %17, i64 %32
%34 = tail call i32 @matrix_ij_B(i32 %16, double* %33, double %2, double %3, double %4, double %7)
%35 = icmp eq i32 %0, %1
%36 = add nsw i32 %25, %23
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds double, double* %17, i64 %37
%39 = fneg double %7
%40 = select i1 %35, double %39, double %7
%41 = tail call i32 @matrix_ij_B(i32 %16, double* %38, double %2, double %3, double %4, double %40)
%42 = add nsw i32 %30, %23
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds double, double* %17, i64 %43
%45 = tail call i32 @matrix_ij_C(i32 %16, double* %44, double %2, double %3, double %4, double %8, double %9)
%46 = mul nsw i32 %21, %16
%47 = add nsw i32 %46, %22
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds double, double* %17, i64 %48
%50 = tail call i32 @matrix_ij_G(i32 %16, double* %49, double %2, double %3, double %4, double %10, double %11)
%51 = add nsw i32 %25, %24
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds double, double* %17, i64 %52
br i1 %35, label %54, label %56
54: ; preds = %18
%55 = tail call i32 @matrix_ij_GT(i32 %16, double* %53, double %2, double %3, double %4, double %10, double %11)
br label %60
56: ; preds = %18
%57 = fneg double %10
%58 = fneg double %11
%59 = tail call i32 @matrix_ij_GT(i32 %16, double* %53, double %2, double %3, double %4, double %57, double %58)
br label %60
60: ; preds = %56, %54
%61 = add nsw i32 %46, %23
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds double, double* %17, i64 %62
%64 = tail call i32 @matrix_ij_H(i32 %16, double* %63, double %2, double %3, double %4, double %12)
%65 = add nsw i32 %30, %24
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds double, double* %17, i64 %66
%68 = tail call i32 @matrix_ij_HT(i32 %16, double* %67, double %2, double %3, double %4, double %12)
%69 = add nsw i32 %46, %24
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds double, double* %17, i64 %70
%72 = tail call i32 @matrix_ij_M(i32 %16, double* %71, double %2, double %3, double %4, double %13, double %14, double %15)
ret void
}