#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 */
typedef int /*<<< orphan*/ __m128;

/* Variables and functions */
int /*<<< orphan*/ _mm_add_ps(int /*<<< orphan*/, int /*<<< orphan*/);
int /*<<< orphan*/ _mm_load1_ps(float *);
int /*<<< orphan*/ _mm_loadu_ps(float *);
int /*<<< orphan*/ _mm_mul_ps(int /*<<< orphan*/, int /*<<< orphan*/);
int /*<<< orphan*/ _mm_setzero_ps();
int /*<<< orphan*/ _mm_storeu_ps(float *, int /*<<< orphan*/);
void sgemmSpecial(float *A, float *B, float *C) {
  __m128 c1;
  __m128 c2;
  __m128 c3;
  __m128 c4;
  for (int i = 0; i < 36; i += 4) {
    for (int j = 0; j < 36; j += 4) {
      c1 = _mm_setzero_ps();
      c2 = _mm_setzero_ps();
      c3 = _mm_setzero_ps();
      c4 = _mm_setzero_ps();
      for (int k = 0; k < 36; k += 4) {
        __m128 a1 = _mm_loadu_ps(A + i + 36 * (k + 0));
        __m128 a2 = _mm_loadu_ps(A + i + 36 * (k + 1));
        __m128 a3 = _mm_loadu_ps(A + i + 36 * (k + 2));
        __m128 a4 = _mm_loadu_ps(A + i + 36 * (k + 3));
        c1 = _mm_add_ps(
            c1, _mm_mul_ps(a1, _mm_load1_ps((B + j + 0 + 36 * (k + 0)))));
        c2 = _mm_add_ps(
            c2, _mm_mul_ps(a1, _mm_load1_ps((B + j + 1 + 36 * (k + 0)))));
        c3 = _mm_add_ps(
            c3, _mm_mul_ps(a1, _mm_load1_ps((B + j + 2 + 36 * (k + 0)))));
        c4 = _mm_add_ps(
            c4, _mm_mul_ps(a1, _mm_load1_ps((B + j + 3 + 36 * (k + 0)))));
        c1 = _mm_add_ps(
            c1, _mm_mul_ps(a2, _mm_load1_ps((B + j + 0 + 36 * (k + 1)))));
        c2 = _mm_add_ps(
            c2, _mm_mul_ps(a2, _mm_load1_ps((B + j + 1 + 36 * (k + 1)))));
        c3 = _mm_add_ps(
            c3, _mm_mul_ps(a2, _mm_load1_ps((B + j + 2 + 36 * (k + 1)))));
        c4 = _mm_add_ps(
            c4, _mm_mul_ps(a2, _mm_load1_ps((B + j + 3 + 36 * (k + 1)))));
        c1 = _mm_add_ps(
            c1, _mm_mul_ps(a3, _mm_load1_ps((B + j + 0 + 36 * (k + 2)))));
        c2 = _mm_add_ps(
            c2, _mm_mul_ps(a3, _mm_load1_ps((B + j + 1 + 36 * (k + 2)))));
        c3 = _mm_add_ps(
            c3, _mm_mul_ps(a3, _mm_load1_ps((B + j + 2 + 36 * (k + 2)))));
        c4 = _mm_add_ps(
            c4, _mm_mul_ps(a3, _mm_load1_ps((B + j + 3 + 36 * (k + 2)))));
        c1 = _mm_add_ps(
            c1, _mm_mul_ps(a4, _mm_load1_ps((B + j + 0 + 36 * (k + 3)))));
        c2 = _mm_add_ps(
            c2, _mm_mul_ps(a4, _mm_load1_ps((B + j + 1 + 36 * (k + 3)))));
        c3 = _mm_add_ps(
            c3, _mm_mul_ps(a4, _mm_load1_ps((B + j + 2 + 36 * (k + 3)))));
        c4 = _mm_add_ps(
            c4, _mm_mul_ps(a4, _mm_load1_ps((B + j + 3 + 36 * (k + 3)))));
      }
      _mm_storeu_ps(C + i + 36 * (j + 0),
                    _mm_add_ps(c1, _mm_loadu_ps(C + i + 36 * (j + 0))));
      _mm_storeu_ps(C + i + 36 * (j + 1),
                    _mm_add_ps(c2, _mm_loadu_ps(C + i + 36 * (j + 1))));
      _mm_storeu_ps(C + i + 36 * (j + 2),
                    _mm_add_ps(c3, _mm_loadu_ps(C + i + 36 * (j + 2))));
      _mm_storeu_ps(C + i + 36 * (j + 3),
                    _mm_add_ps(c4, _mm_loadu_ps(C + i + 36 * (j + 3))));
    }
  }
}


x86 assembly (clang, -O0):
<sgemmSpecial>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x24,-0x2c(%rbp)
jge    1997 <sgemmSpecial+0x837>
movl   $0x0,-0x30(%rbp)
cmpl   $0x24,-0x30(%rbp)
jge    1984 <sgemmSpecial+0x824>
mov    $0x0,%al
call   1080 <_mm_setzero_ps@plt>
mov    %eax,-0x1c(%rbp)
mov    $0x0,%al
call   1080 <_mm_setzero_ps@plt>
mov    %eax,-0x20(%rbp)
mov    $0x0,%al
call   1080 <_mm_setzero_ps@plt>
mov    %eax,-0x24(%rbp)
mov    $0x0,%al
call   1080 <_mm_setzero_ps@plt>
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x34(%rbp)
cmpl   $0x24,-0x34(%rbp)
jge    17aa <sgemmSpecial+0x64a>
mov    -0x8(%rbp),%rdi
movslq -0x2c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x34(%rbp),%eax
add    $0x0,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x2c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x34(%rbp),%eax
add    $0x1,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %eax,-0x3c(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x2c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x34(%rbp),%eax
add    $0x2,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %eax,-0x40(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x2c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x34(%rbp),%eax
add    $0x3,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0xc0(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0xc4(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x34(%rbp),%eax
add    $0x0,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0xc4(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0xc0(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0xb8(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0xbc(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x4,%rdi
mov    -0x34(%rbp),%eax
add    $0x0,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0xbc(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0xb8(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0xb0(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0xb4(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x8,%rdi
mov    -0x34(%rbp),%eax
add    $0x0,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0xb4(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0xb0(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0xa8(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0xac(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0xc,%rdi
mov    -0x34(%rbp),%eax
add    $0x0,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0xac(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0xa8(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0xa0(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0xa4(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x34(%rbp),%eax
add    $0x1,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0xa4(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0xa0(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x4,%rdi
mov    -0x34(%rbp),%eax
add    $0x1,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x9c(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x98(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x8,%rdi
mov    -0x34(%rbp),%eax
add    $0x1,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x94(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x90(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0xc,%rdi
mov    -0x34(%rbp),%eax
add    $0x1,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x8c(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x88(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x34(%rbp),%eax
add    $0x2,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x84(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x80(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x4,%rdi
mov    -0x34(%rbp),%eax
add    $0x2,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x7c(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x78(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x8,%rdi
mov    -0x34(%rbp),%eax
add    $0x2,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x74(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x70(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0xc,%rdi
mov    -0x34(%rbp),%eax
add    $0x2,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x6c(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x68(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x34(%rbp),%eax
add    $0x3,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x64(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x60(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x4,%rdi
mov    -0x34(%rbp),%eax
add    $0x3,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x5c(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x58(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x8,%rdi
mov    -0x34(%rbp),%eax
add    $0x3,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x54(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x50(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0xc,%rdi
mov    -0x34(%rbp),%eax
add    $0x3,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1070 <_mm_load1_ps@plt>
mov    -0x4c(%rbp),%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    -0x48(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    11c8 <sgemmSpecial+0x68>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x30(%rbp),%ecx
add    $0x0,%ecx
imul   $0x24,%ecx,%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x100(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x104(%rbp)
mov    -0x18(%rbp),%rdi
movslq -0x2c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x30(%rbp),%eax
add    $0x0,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    -0x104(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    -0x100(%rbp),%rdi
mov    %eax,%esi
call   1030 <_mm_storeu_ps@plt>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
imul   $0x24,%ecx,%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0xf0(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0xf4(%rbp)
mov    -0x18(%rbp),%rdi
movslq -0x2c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x30(%rbp),%eax
add    $0x1,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    -0xf4(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    -0xf0(%rbp),%rdi
mov    %eax,%esi
call   1030 <_mm_storeu_ps@plt>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x30(%rbp),%ecx
add    $0x2,%ecx
imul   $0x24,%ecx,%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0xe0(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0xe4(%rbp)
mov    -0x18(%rbp),%rdi
movslq -0x2c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x30(%rbp),%eax
add    $0x2,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    -0xe4(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    -0xe0(%rbp),%rdi
mov    %eax,%esi
call   1030 <_mm_storeu_ps@plt>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x30(%rbp),%ecx
add    $0x3,%ecx
imul   $0x24,%ecx,%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0xd0(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0xd4(%rbp)
mov    -0x18(%rbp),%rdi
movslq -0x2c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    -0x30(%rbp),%eax
add    $0x3,%eax
imul   $0x24,%eax,%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    -0xd4(%rbp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    -0xd0(%rbp),%rdi
mov    %eax,%esi
call   1030 <_mm_storeu_ps@plt>
mov    -0x30(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x30(%rbp)
jmp    118f <sgemmSpecial+0x2f>
jmp    1989 <sgemmSpecial+0x829>
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    117e <sgemmSpecial+0x1e>
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sgemmSpecial>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %rdx,0x30(%rsp)
mov    %rsi,0x28(%rsp)
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
mov    %rdi,0x20(%rsp)
mov    0x30(%rsp),%rax
mov    %rcx,0x38(%rsp)
lea    (%rax,%rcx,4),%rax
mov    %rax,0x40(%rsp)
mov    0x28(%rsp),%r15
xor    %eax,%eax
nop
mov    %rax,0x48(%rsp)
xor    %eax,%eax
call   1080 <_mm_setzero_ps@plt>
mov    %eax,%r12d
xor    %eax,%eax
call   1080 <_mm_setzero_ps@plt>
mov    %eax,0xc(%rsp)
xor    %eax,%eax
call   1080 <_mm_setzero_ps@plt>
mov    %eax,0x8(%rsp)
xor    %eax,%eax
call   1080 <_mm_setzero_ps@plt>
mov    %eax,%ebp
mov    $0xfffffffffffffffc,%rax
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
mov    %ebp,0x18(%rsp)
mov    %rax,0x50(%rsp)
mov    0x20(%rsp),%r14
lea    (%r14,%rbx,1),%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %eax,%ebp
lea    (%r14,%rbx,1),%rdi
add    $0x90,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %eax,%r13d
lea    (%r14,%rbx,1),%rdi
add    $0x120,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %eax,0x10(%rsp)
lea    (%r14,%rbx,1),%rdi
add    $0x1b0,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %eax,0x1c(%rsp)
lea    (%r15,%rbx,1),%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    %r12d,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,0x14(%rsp)
lea    (%r15,%rbx,1),%rdi
add    $0x4,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    0xc(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%r12d
lea    (%r15,%rbx,1),%rdi
add    $0x8,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    0x8(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%r14d
lea    (%r15,%rbx,1),%rdi
add    $0xc,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    0x18(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%ebp
lea    (%r15,%rbx,1),%rdi
add    $0x90,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %r13d,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    0x14(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,0x8(%rsp)
lea    (%r15,%rbx,1),%rdi
add    $0x94,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %r13d,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    %r12d,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%r12d
lea    (%r15,%rbx,1),%rdi
add    $0x98,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %r13d,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    %r14d,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%r14d
lea    (%r15,%rbx,1),%rdi
add    $0x9c,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %r13d,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,0xc(%rsp)
lea    (%r15,%rbx,1),%rdi
add    $0x120,%rdi
call   1070 <_mm_load1_ps@plt>
mov    0x10(%rsp),%ebp
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    0x8(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%r13d
lea    (%r15,%rbx,1),%rdi
add    $0x124,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    %r12d,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,0x8(%rsp)
lea    (%r15,%rbx,1),%rdi
add    $0x128,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    %r14d,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%r14d
lea    (%r15,%rbx,1),%rdi
add    $0x12c,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    0xc(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,0x10(%rsp)
lea    (%r15,%rbx,1),%rdi
add    $0x1b0,%rdi
call   1070 <_mm_load1_ps@plt>
mov    0x1c(%rsp),%ebp
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    %r13d,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%r12d
lea    (%r15,%rbx,1),%rdi
add    $0x1b4,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    0x8(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,0xc(%rsp)
lea    (%r15,%rbx,1),%rdi
add    $0x1b8,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    %r14d,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,0x8(%rsp)
lea    (%r15,%rbx,1),%rdi
add    $0x1bc,%rdi
call   1070 <_mm_load1_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1050 <_mm_mul_ps@plt>
mov    0x10(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %eax,%ebp
mov    0x50(%rsp),%rax
add    $0x4,%rax
add    $0x240,%rbx
cmp    $0x20,%rax
jb     11e0 <sgemmSpecial+0x80>
mov    0x48(%rsp),%r14
lea    (%r14,%r14,8),%rbx
shl    $0x4,%rbx
mov    0x40(%rsp),%r13
add    %r13,%rbx
mov    %rbx,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %r12d,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %rbx,%rdi
mov    %eax,%esi
call   1030 <_mm_storeu_ps@plt>
mov    %r14,%rax
or     $0x1,%rax
lea    (%rax,%rax,8),%rbx
shl    $0x4,%rbx
add    %r13,%rbx
mov    %rbx,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    0xc(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %rbx,%rdi
mov    %eax,%esi
call   1030 <_mm_storeu_ps@plt>
mov    %r14,%rax
or     $0x2,%rax
lea    (%rax,%rax,8),%rbx
shl    $0x4,%rbx
add    %r13,%rbx
mov    %rbx,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    0x8(%rsp),%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %rbx,%rdi
mov    %eax,%esi
call   1030 <_mm_storeu_ps@plt>
mov    %r14,%rax
or     $0x3,%rax
lea    (%rax,%rax,8),%rbx
shl    $0x4,%rbx
add    %r13,%rbx
mov    %rbx,%rdi
call   1040 <_mm_loadu_ps@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1060 <_mm_add_ps@plt>
mov    %rbx,%rdi
mov    %eax,%esi
call   1030 <_mm_storeu_ps@plt>
lea    0x4(%r14),%rax
add    $0x10,%r15
cmp    $0x20,%r14
jb     11a0 <sgemmSpecial+0x40>
mov    0x38(%rsp),%rcx
lea    0x4(%rcx),%rax
mov    0x20(%rsp),%rdi
add    $0x10,%rdi
cmp    $0x20,%rcx
mov    %rax,%rcx
jb     1180 <sgemmSpecial+0x20>
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @sgemmSpecial(float* %0, float* %1, float* %2) {
%4 = alloca float*
%5 = alloca float*
%6 = alloca float*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
store float* %0, float** %4
store float* %1, float** %5
store float* %2, float** %6
store i32 0, i32* %11
br label %18
18: ; preds = %410, %3
%19 = load i32, i32* %11
%20 = icmp slt i32 %19, 36
br i1 %20, label %21, label %413
21: ; preds = %18
store i32 0, i32* %12
br label %22
22: ; preds = %406, %21
%23 = load i32, i32* %12
%24 = icmp slt i32 %23, 36
br i1 %24, label %25, label %409
25: ; preds = %22
%26 = call i32 (...) @_mm_setzero_ps()
store i32 %26, i32* %7
%27 = call i32 (...) @_mm_setzero_ps()
store i32 %27, i32* %8
%28 = call i32 (...) @_mm_setzero_ps()
store i32 %28, i32* %9
%29 = call i32 (...) @_mm_setzero_ps()
store i32 %29, i32* %10
store i32 0, i32* %13
br label %30
30: ; preds = %314, %25
%31 = load i32, i32* %13
%32 = icmp slt i32 %31, 36
br i1 %32, label %33, label %317
33: ; preds = %30
%34 = load float*, float** %4
%35 = load i32, i32* %11
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds float, float* %34, i64 %36
%38 = load i32, i32* %13
%39 = add nsw i32 %38, 0
%40 = mul nsw i32 36, %39
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds float, float* %37, i64 %41
%43 = call i32 @_mm_loadu_ps(float* %42)
store i32 %43, i32* %14
%44 = load float*, float** %4
%45 = load i32, i32* %11
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds float, float* %44, i64 %46
%48 = load i32, i32* %13
%49 = add nsw i32 %48, 1
%50 = mul nsw i32 36, %49
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds float, float* %47, i64 %51
%53 = call i32 @_mm_loadu_ps(float* %52)
store i32 %53, i32* %15
%54 = load float*, float** %4
%55 = load i32, i32* %11
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds float, float* %54, i64 %56
%58 = load i32, i32* %13
%59 = add nsw i32 %58, 2
%60 = mul nsw i32 36, %59
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds float, float* %57, i64 %61
%63 = call i32 @_mm_loadu_ps(float* %62)
store i32 %63, i32* %16
%64 = load float*, float** %4
%65 = load i32, i32* %11
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds float, float* %64, i64 %66
%68 = load i32, i32* %13
%69 = add nsw i32 %68, 3
%70 = mul nsw i32 36, %69
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds float, float* %67, i64 %71
%73 = call i32 @_mm_loadu_ps(float* %72)
store i32 %73, i32* %17
%74 = load i32, i32* %7
%75 = load i32, i32* %14
%76 = load float*, float** %5
%77 = load i32, i32* %12
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds float, float* %76, i64 %78
%80 = getelementptr inbounds float, float* %79, i64 0
%81 = load i32, i32* %13
%82 = add nsw i32 %81, 0
%83 = mul nsw i32 36, %82
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds float, float* %80, i64 %84
%86 = call i32 @_mm_load1_ps(float* %85)
%87 = call i32 @_mm_mul_ps(i32 %75, i32 %86)
%88 = call i32 @_mm_add_ps(i32 %74, i32 %87)
store i32 %88, i32* %7
%89 = load i32, i32* %8
%90 = load i32, i32* %14
%91 = load float*, float** %5
%92 = load i32, i32* %12
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds float, float* %91, i64 %93
%95 = getelementptr inbounds float, float* %94, i64 1
%96 = load i32, i32* %13
%97 = add nsw i32 %96, 0
%98 = mul nsw i32 36, %97
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds float, float* %95, i64 %99
%101 = call i32 @_mm_load1_ps(float* %100)
%102 = call i32 @_mm_mul_ps(i32 %90, i32 %101)
%103 = call i32 @_mm_add_ps(i32 %89, i32 %102)
store i32 %103, i32* %8
%104 = load i32, i32* %9
%105 = load i32, i32* %14
%106 = load float*, float** %5
%107 = load i32, i32* %12
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds float, float* %106, i64 %108
%110 = getelementptr inbounds float, float* %109, i64 2
%111 = load i32, i32* %13
%112 = add nsw i32 %111, 0
%113 = mul nsw i32 36, %112
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds float, float* %110, i64 %114
%116 = call i32 @_mm_load1_ps(float* %115)
%117 = call i32 @_mm_mul_ps(i32 %105, i32 %116)
%118 = call i32 @_mm_add_ps(i32 %104, i32 %117)
store i32 %118, i32* %9
%119 = load i32, i32* %10
%120 = load i32, i32* %14
%121 = load float*, float** %5
%122 = load i32, i32* %12
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds float, float* %121, i64 %123
%125 = getelementptr inbounds float, float* %124, i64 3
%126 = load i32, i32* %13
%127 = add nsw i32 %126, 0
%128 = mul nsw i32 36, %127
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds float, float* %125, i64 %129
%131 = call i32 @_mm_load1_ps(float* %130)
%132 = call i32 @_mm_mul_ps(i32 %120, i32 %131)
%133 = call i32 @_mm_add_ps(i32 %119, i32 %132)
store i32 %133, i32* %10
%134 = load i32, i32* %7
%135 = load i32, i32* %15
%136 = load float*, float** %5
%137 = load i32, i32* %12
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds float, float* %136, i64 %138
%140 = getelementptr inbounds float, float* %139, i64 0
%141 = load i32, i32* %13
%142 = add nsw i32 %141, 1
%143 = mul nsw i32 36, %142
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds float, float* %140, i64 %144
%146 = call i32 @_mm_load1_ps(float* %145)
%147 = call i32 @_mm_mul_ps(i32 %135, i32 %146)
%148 = call i32 @_mm_add_ps(i32 %134, i32 %147)
store i32 %148, i32* %7
%149 = load i32, i32* %8
%150 = load i32, i32* %15
%151 = load float*, float** %5
%152 = load i32, i32* %12
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds float, float* %151, i64 %153
%155 = getelementptr inbounds float, float* %154, i64 1
%156 = load i32, i32* %13
%157 = add nsw i32 %156, 1
%158 = mul nsw i32 36, %157
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds float, float* %155, i64 %159
%161 = call i32 @_mm_load1_ps(float* %160)
%162 = call i32 @_mm_mul_ps(i32 %150, i32 %161)
%163 = call i32 @_mm_add_ps(i32 %149, i32 %162)
store i32 %163, i32* %8
%164 = load i32, i32* %9
%165 = load i32, i32* %15
%166 = load float*, float** %5
%167 = load i32, i32* %12
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds float, float* %166, i64 %168
%170 = getelementptr inbounds float, float* %169, i64 2
%171 = load i32, i32* %13
%172 = add nsw i32 %171, 1
%173 = mul nsw i32 36, %172
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds float, float* %170, i64 %174
%176 = call i32 @_mm_load1_ps(float* %175)
%177 = call i32 @_mm_mul_ps(i32 %165, i32 %176)
%178 = call i32 @_mm_add_ps(i32 %164, i32 %177)
store i32 %178, i32* %9
%179 = load i32, i32* %10
%180 = load i32, i32* %15
%181 = load float*, float** %5
%182 = load i32, i32* %12
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds float, float* %181, i64 %183
%185 = getelementptr inbounds float, float* %184, i64 3
%186 = load i32, i32* %13
%187 = add nsw i32 %186, 1
%188 = mul nsw i32 36, %187
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds float, float* %185, i64 %189
%191 = call i32 @_mm_load1_ps(float* %190)
%192 = call i32 @_mm_mul_ps(i32 %180, i32 %191)
%193 = call i32 @_mm_add_ps(i32 %179, i32 %192)
store i32 %193, i32* %10
%194 = load i32, i32* %7
%195 = load i32, i32* %16
%196 = load float*, float** %5
%197 = load i32, i32* %12
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds float, float* %196, i64 %198
%200 = getelementptr inbounds float, float* %199, i64 0
%201 = load i32, i32* %13
%202 = add nsw i32 %201, 2
%203 = mul nsw i32 36, %202
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds float, float* %200, i64 %204
%206 = call i32 @_mm_load1_ps(float* %205)
%207 = call i32 @_mm_mul_ps(i32 %195, i32 %206)
%208 = call i32 @_mm_add_ps(i32 %194, i32 %207)
store i32 %208, i32* %7
%209 = load i32, i32* %8
%210 = load i32, i32* %16
%211 = load float*, float** %5
%212 = load i32, i32* %12
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds float, float* %211, i64 %213
%215 = getelementptr inbounds float, float* %214, i64 1
%216 = load i32, i32* %13
%217 = add nsw i32 %216, 2
%218 = mul nsw i32 36, %217
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds float, float* %215, i64 %219
%221 = call i32 @_mm_load1_ps(float* %220)
%222 = call i32 @_mm_mul_ps(i32 %210, i32 %221)
%223 = call i32 @_mm_add_ps(i32 %209, i32 %222)
store i32 %223, i32* %8
%224 = load i32, i32* %9
%225 = load i32, i32* %16
%226 = load float*, float** %5
%227 = load i32, i32* %12
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds float, float* %226, i64 %228
%230 = getelementptr inbounds float, float* %229, i64 2
%231 = load i32, i32* %13
%232 = add nsw i32 %231, 2
%233 = mul nsw i32 36, %232
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds float, float* %230, i64 %234
%236 = call i32 @_mm_load1_ps(float* %235)
%237 = call i32 @_mm_mul_ps(i32 %225, i32 %236)
%238 = call i32 @_mm_add_ps(i32 %224, i32 %237)
store i32 %238, i32* %9
%239 = load i32, i32* %10
%240 = load i32, i32* %16
%241 = load float*, float** %5
%242 = load i32, i32* %12
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds float, float* %241, i64 %243
%245 = getelementptr inbounds float, float* %244, i64 3
%246 = load i32, i32* %13
%247 = add nsw i32 %246, 2
%248 = mul nsw i32 36, %247
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds float, float* %245, i64 %249
%251 = call i32 @_mm_load1_ps(float* %250)
%252 = call i32 @_mm_mul_ps(i32 %240, i32 %251)
%253 = call i32 @_mm_add_ps(i32 %239, i32 %252)
store i32 %253, i32* %10
%254 = load i32, i32* %7
%255 = load i32, i32* %17
%256 = load float*, float** %5
%257 = load i32, i32* %12
%258 = sext i32 %257 to i64
%259 = getelementptr inbounds float, float* %256, i64 %258
%260 = getelementptr inbounds float, float* %259, i64 0
%261 = load i32, i32* %13
%262 = add nsw i32 %261, 3
%263 = mul nsw i32 36, %262
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds float, float* %260, i64 %264
%266 = call i32 @_mm_load1_ps(float* %265)
%267 = call i32 @_mm_mul_ps(i32 %255, i32 %266)
%268 = call i32 @_mm_add_ps(i32 %254, i32 %267)
store i32 %268, i32* %7
%269 = load i32, i32* %8
%270 = load i32, i32* %17
%271 = load float*, float** %5
%272 = load i32, i32* %12
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds float, float* %271, i64 %273
%275 = getelementptr inbounds float, float* %274, i64 1
%276 = load i32, i32* %13
%277 = add nsw i32 %276, 3
%278 = mul nsw i32 36, %277
%279 = sext i32 %278 to i64
%280 = getelementptr inbounds float, float* %275, i64 %279
%281 = call i32 @_mm_load1_ps(float* %280)
%282 = call i32 @_mm_mul_ps(i32 %270, i32 %281)
%283 = call i32 @_mm_add_ps(i32 %269, i32 %282)
store i32 %283, i32* %8
%284 = load i32, i32* %9
%285 = load i32, i32* %17
%286 = load float*, float** %5
%287 = load i32, i32* %12
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds float, float* %286, i64 %288
%290 = getelementptr inbounds float, float* %289, i64 2
%291 = load i32, i32* %13
%292 = add nsw i32 %291, 3
%293 = mul nsw i32 36, %292
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds float, float* %290, i64 %294
%296 = call i32 @_mm_load1_ps(float* %295)
%297 = call i32 @_mm_mul_ps(i32 %285, i32 %296)
%298 = call i32 @_mm_add_ps(i32 %284, i32 %297)
store i32 %298, i32* %9
%299 = load i32, i32* %10
%300 = load i32, i32* %17
%301 = load float*, float** %5
%302 = load i32, i32* %12
%303 = sext i32 %302 to i64
%304 = getelementptr inbounds float, float* %301, i64 %303
%305 = getelementptr inbounds float, float* %304, i64 3
%306 = load i32, i32* %13
%307 = add nsw i32 %306, 3
%308 = mul nsw i32 36, %307
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds float, float* %305, i64 %309
%311 = call i32 @_mm_load1_ps(float* %310)
%312 = call i32 @_mm_mul_ps(i32 %300, i32 %311)
%313 = call i32 @_mm_add_ps(i32 %299, i32 %312)
store i32 %313, i32* %10
br label %314
314: ; preds = %33
%315 = load i32, i32* %13
%316 = add nsw i32 %315, 4
store i32 %316, i32* %13
br label %30
317: ; preds = %30
%318 = load float*, float** %6
%319 = load i32, i32* %11
%320 = sext i32 %319 to i64
%321 = getelementptr inbounds float, float* %318, i64 %320
%322 = load i32, i32* %12
%323 = add nsw i32 %322, 0
%324 = mul nsw i32 36, %323
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds float, float* %321, i64 %325
%327 = load i32, i32* %7
%328 = load float*, float** %6
%329 = load i32, i32* %11
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds float, float* %328, i64 %330
%332 = load i32, i32* %12
%333 = add nsw i32 %332, 0
%334 = mul nsw i32 36, %333
%335 = sext i32 %334 to i64
%336 = getelementptr inbounds float, float* %331, i64 %335
%337 = call i32 @_mm_loadu_ps(float* %336)
%338 = call i32 @_mm_add_ps(i32 %327, i32 %337)
%339 = call i32 @_mm_storeu_ps(float* %326, i32 %338)
%340 = load float*, float** %6
%341 = load i32, i32* %11
%342 = sext i32 %341 to i64
%343 = getelementptr inbounds float, float* %340, i64 %342
%344 = load i32, i32* %12
%345 = add nsw i32 %344, 1
%346 = mul nsw i32 36, %345
%347 = sext i32 %346 to i64
%348 = getelementptr inbounds float, float* %343, i64 %347
%349 = load i32, i32* %8
%350 = load float*, float** %6
%351 = load i32, i32* %11
%352 = sext i32 %351 to i64
%353 = getelementptr inbounds float, float* %350, i64 %352
%354 = load i32, i32* %12
%355 = add nsw i32 %354, 1
%356 = mul nsw i32 36, %355
%357 = sext i32 %356 to i64
%358 = getelementptr inbounds float, float* %353, i64 %357
%359 = call i32 @_mm_loadu_ps(float* %358)
%360 = call i32 @_mm_add_ps(i32 %349, i32 %359)
%361 = call i32 @_mm_storeu_ps(float* %348, i32 %360)
%362 = load float*, float** %6
%363 = load i32, i32* %11
%364 = sext i32 %363 to i64
%365 = getelementptr inbounds float, float* %362, i64 %364
%366 = load i32, i32* %12
%367 = add nsw i32 %366, 2
%368 = mul nsw i32 36, %367
%369 = sext i32 %368 to i64
%370 = getelementptr inbounds float, float* %365, i64 %369
%371 = load i32, i32* %9
%372 = load float*, float** %6
%373 = load i32, i32* %11
%374 = sext i32 %373 to i64
%375 = getelementptr inbounds float, float* %372, i64 %374
%376 = load i32, i32* %12
%377 = add nsw i32 %376, 2
%378 = mul nsw i32 36, %377
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds float, float* %375, i64 %379
%381 = call i32 @_mm_loadu_ps(float* %380)
%382 = call i32 @_mm_add_ps(i32 %371, i32 %381)
%383 = call i32 @_mm_storeu_ps(float* %370, i32 %382)
%384 = load float*, float** %6
%385 = load i32, i32* %11
%386 = sext i32 %385 to i64
%387 = getelementptr inbounds float, float* %384, i64 %386
%388 = load i32, i32* %12
%389 = add nsw i32 %388, 3
%390 = mul nsw i32 36, %389
%391 = sext i32 %390 to i64
%392 = getelementptr inbounds float, float* %387, i64 %391
%393 = load i32, i32* %10
%394 = load float*, float** %6
%395 = load i32, i32* %11
%396 = sext i32 %395 to i64
%397 = getelementptr inbounds float, float* %394, i64 %396
%398 = load i32, i32* %12
%399 = add nsw i32 %398, 3
%400 = mul nsw i32 36, %399
%401 = sext i32 %400 to i64
%402 = getelementptr inbounds float, float* %397, i64 %401
%403 = call i32 @_mm_loadu_ps(float* %402)
%404 = call i32 @_mm_add_ps(i32 %393, i32 %403)
%405 = call i32 @_mm_storeu_ps(float* %392, i32 %404)
br label %406
406: ; preds = %317
%407 = load i32, i32* %12
%408 = add nsw i32 %407, 4
store i32 %408, i32* %12
br label %22
409: ; preds = %22
br label %410
410: ; preds = %409
%411 = load i32, i32* %11
%412 = add nsw i32 %411, 4
store i32 %412, i32* %11
br label %18
413: ; preds = %18
ret void
}

LLVM IR (-O2):
define void @sgemmSpecial(float* %0, float* %1, float* %2) {
br label %4
4: ; preds = %3, %9
%5 = phi i64 [ 0, %3 ], [ %10, %9 ]
%6 = getelementptr inbounds float, float* %0, i64 %5
%7 = getelementptr inbounds float, float* %2, i64 %5
br label %12
8: ; preds = %9
ret void
9: ; preds = %22
%10 = add nuw nsw i64 %5, 4
%11 = icmp ult i64 %5, 32
br i1 %11, label %4, label %8
12: ; preds = %4, %22
%13 = phi i64 [ 0, %4 ], [ %46, %22 ]
%14 = tail call i32 (...) @_mm_setzero_ps()
%15 = tail call i32 (...) @_mm_setzero_ps()
%16 = tail call i32 (...) @_mm_setzero_ps()
%17 = tail call i32 (...) @_mm_setzero_ps()
%18 = getelementptr inbounds float, float* %1, i64 %13
%19 = getelementptr inbounds float, float* %18, i64 1
%20 = getelementptr inbounds float, float* %18, i64 2
%21 = getelementptr inbounds float, float* %18, i64 3
br label %48
22: ; preds = %48
%23 = mul nuw nsw i64 %13, 36
%24 = getelementptr inbounds float, float* %7, i64 %23
%25 = tail call i32 @_mm_loadu_ps(float* %24)
%26 = tail call i32 @_mm_add_ps(i32 %120, i32 %25)
%27 = tail call i32 @_mm_storeu_ps(float* %24, i32 %26)
%28 = or i64 %13, 1
%29 = mul nuw nsw i64 %28, 36
%30 = getelementptr inbounds float, float* %7, i64 %29
%31 = tail call i32 @_mm_loadu_ps(float* %30)
%32 = tail call i32 @_mm_add_ps(i32 %124, i32 %31)
%33 = tail call i32 @_mm_storeu_ps(float* %30, i32 %32)
%34 = or i64 %13, 2
%35 = mul nuw nsw i64 %34, 36
%36 = getelementptr inbounds float, float* %7, i64 %35
%37 = tail call i32 @_mm_loadu_ps(float* %36)
%38 = tail call i32 @_mm_add_ps(i32 %128, i32 %37)
%39 = tail call i32 @_mm_storeu_ps(float* %36, i32 %38)
%40 = or i64 %13, 3
%41 = mul nuw nsw i64 %40, 36
%42 = getelementptr inbounds float, float* %7, i64 %41
%43 = tail call i32 @_mm_loadu_ps(float* %42)
%44 = tail call i32 @_mm_add_ps(i32 %132, i32 %43)
%45 = tail call i32 @_mm_storeu_ps(float* %42, i32 %44)
%46 = add nuw nsw i64 %13, 4
%47 = icmp ult i64 %13, 32
br i1 %47, label %12, label %9
48: ; preds = %12, %48
%49 = phi i64 [ 0, %12 ], [ %133, %48 ]
%50 = phi i32 [ %14, %12 ], [ %120, %48 ]
%51 = phi i32 [ %15, %12 ], [ %124, %48 ]
%52 = phi i32 [ %16, %12 ], [ %128, %48 ]
%53 = phi i32 [ %17, %12 ], [ %132, %48 ]
%54 = mul nuw nsw i64 %49, 36
%55 = getelementptr inbounds float, float* %6, i64 %54
%56 = tail call i32 @_mm_loadu_ps(float* %55)
%57 = or i64 %49, 1
%58 = mul nuw nsw i64 %57, 36
%59 = getelementptr inbounds float, float* %6, i64 %58
%60 = tail call i32 @_mm_loadu_ps(float* %59)
%61 = or i64 %49, 2
%62 = mul nuw nsw i64 %61, 36
%63 = getelementptr inbounds float, float* %6, i64 %62
%64 = tail call i32 @_mm_loadu_ps(float* %63)
%65 = or i64 %49, 3
%66 = mul nuw nsw i64 %65, 36
%67 = getelementptr inbounds float, float* %6, i64 %66
%68 = tail call i32 @_mm_loadu_ps(float* %67)
%69 = getelementptr inbounds float, float* %18, i64 %54
%70 = tail call i32 @_mm_load1_ps(float* %69)
%71 = tail call i32 @_mm_mul_ps(i32 %56, i32 %70)
%72 = tail call i32 @_mm_add_ps(i32 %50, i32 %71)
%73 = getelementptr inbounds float, float* %19, i64 %54
%74 = tail call i32 @_mm_load1_ps(float* %73)
%75 = tail call i32 @_mm_mul_ps(i32 %56, i32 %74)
%76 = tail call i32 @_mm_add_ps(i32 %51, i32 %75)
%77 = getelementptr inbounds float, float* %20, i64 %54
%78 = tail call i32 @_mm_load1_ps(float* %77)
%79 = tail call i32 @_mm_mul_ps(i32 %56, i32 %78)
%80 = tail call i32 @_mm_add_ps(i32 %52, i32 %79)
%81 = getelementptr inbounds float, float* %21, i64 %54
%82 = tail call i32 @_mm_load1_ps(float* %81)
%83 = tail call i32 @_mm_mul_ps(i32 %56, i32 %82)
%84 = tail call i32 @_mm_add_ps(i32 %53, i32 %83)
%85 = getelementptr inbounds float, float* %18, i64 %58
%86 = tail call i32 @_mm_load1_ps(float* %85)
%87 = tail call i32 @_mm_mul_ps(i32 %60, i32 %86)
%88 = tail call i32 @_mm_add_ps(i32 %72, i32 %87)
%89 = getelementptr inbounds float, float* %19, i64 %58
%90 = tail call i32 @_mm_load1_ps(float* %89)
%91 = tail call i32 @_mm_mul_ps(i32 %60, i32 %90)
%92 = tail call i32 @_mm_add_ps(i32 %76, i32 %91)
%93 = getelementptr inbounds float, float* %20, i64 %58
%94 = tail call i32 @_mm_load1_ps(float* %93)
%95 = tail call i32 @_mm_mul_ps(i32 %60, i32 %94)
%96 = tail call i32 @_mm_add_ps(i32 %80, i32 %95)
%97 = getelementptr inbounds float, float* %21, i64 %58
%98 = tail call i32 @_mm_load1_ps(float* %97)
%99 = tail call i32 @_mm_mul_ps(i32 %60, i32 %98)
%100 = tail call i32 @_mm_add_ps(i32 %84, i32 %99)
%101 = getelementptr inbounds float, float* %18, i64 %62
%102 = tail call i32 @_mm_load1_ps(float* %101)
%103 = tail call i32 @_mm_mul_ps(i32 %64, i32 %102)
%104 = tail call i32 @_mm_add_ps(i32 %88, i32 %103)
%105 = getelementptr inbounds float, float* %19, i64 %62
%106 = tail call i32 @_mm_load1_ps(float* %105)
%107 = tail call i32 @_mm_mul_ps(i32 %64, i32 %106)
%108 = tail call i32 @_mm_add_ps(i32 %92, i32 %107)
%109 = getelementptr inbounds float, float* %20, i64 %62
%110 = tail call i32 @_mm_load1_ps(float* %109)
%111 = tail call i32 @_mm_mul_ps(i32 %64, i32 %110)
%112 = tail call i32 @_mm_add_ps(i32 %96, i32 %111)
%113 = getelementptr inbounds float, float* %21, i64 %62
%114 = tail call i32 @_mm_load1_ps(float* %113)
%115 = tail call i32 @_mm_mul_ps(i32 %64, i32 %114)
%116 = tail call i32 @_mm_add_ps(i32 %100, i32 %115)
%117 = getelementptr inbounds float, float* %18, i64 %66
%118 = tail call i32 @_mm_load1_ps(float* %117)
%119 = tail call i32 @_mm_mul_ps(i32 %68, i32 %118)
%120 = tail call i32 @_mm_add_ps(i32 %104, i32 %119)
%121 = getelementptr inbounds float, float* %19, i64 %66
%122 = tail call i32 @_mm_load1_ps(float* %121)
%123 = tail call i32 @_mm_mul_ps(i32 %68, i32 %122)
%124 = tail call i32 @_mm_add_ps(i32 %108, i32 %123)
%125 = getelementptr inbounds float, float* %20, i64 %66
%126 = tail call i32 @_mm_load1_ps(float* %125)
%127 = tail call i32 @_mm_mul_ps(i32 %68, i32 %126)
%128 = tail call i32 @_mm_add_ps(i32 %112, i32 %127)
%129 = getelementptr inbounds float, float* %21, i64 %66
%130 = tail call i32 @_mm_load1_ps(float* %129)
%131 = tail call i32 @_mm_mul_ps(i32 %68, i32 %130)
%132 = tail call i32 @_mm_add_ps(i32 %116, i32 %131)
%133 = add nuw nsw i64 %49, 4
%134 = icmp ult i64 %49, 32
br i1 %134, label %48, label %22
}