int sgemm_ncopy_4(long m, long n, float *a, long lda, float *b) {
  long i, j;
  float *a_offset, *a_offset1, *a_offset2, *a_offset3, *a_offset4;
  float *b_offset;
  float ctemp1, ctemp2, ctemp3, ctemp4;
  float ctemp5, ctemp6, ctemp7, ctemp8;
  float ctemp9, ctemp10, ctemp11, ctemp12;
  float ctemp13, ctemp14, ctemp15, ctemp16;
  a_offset = a;
  b_offset = b;
  j = (n >> 2);
  if (j > 0) {
    do {
      a_offset1 = a_offset;
      a_offset2 = a_offset1 + lda;
      a_offset3 = a_offset2 + lda;
      a_offset4 = a_offset3 + lda;
      a_offset += 4 * lda;
      i = (m >> 2);
      if (i > 0) {
        do {
          ctemp1 = *(a_offset1 + 0);
          ctemp2 = *(a_offset1 + 1);
          ctemp3 = *(a_offset1 + 2);
          ctemp4 = *(a_offset1 + 3);
          ctemp5 = *(a_offset2 + 0);
          ctemp6 = *(a_offset2 + 1);
          ctemp7 = *(a_offset2 + 2);
          ctemp8 = *(a_offset2 + 3);
          ctemp9 = *(a_offset3 + 0);
          ctemp10 = *(a_offset3 + 1);
          ctemp11 = *(a_offset3 + 2);
          ctemp12 = *(a_offset3 + 3);
          ctemp13 = *(a_offset4 + 0);
          ctemp14 = *(a_offset4 + 1);
          ctemp15 = *(a_offset4 + 2);
          ctemp16 = *(a_offset4 + 3);
          *(b_offset + 0) = ctemp1;
          *(b_offset + 1) = ctemp5;
          *(b_offset + 2) = ctemp9;
          *(b_offset + 3) = ctemp13;
          *(b_offset + 4) = ctemp2;
          *(b_offset + 5) = ctemp6;
          *(b_offset + 6) = ctemp10;
          *(b_offset + 7) = ctemp14;
          *(b_offset + 8) = ctemp3;
          *(b_offset + 9) = ctemp7;
          *(b_offset + 10) = ctemp11;
          *(b_offset + 11) = ctemp15;
          *(b_offset + 12) = ctemp4;
          *(b_offset + 13) = ctemp8;
          *(b_offset + 14) = ctemp12;
          *(b_offset + 15) = ctemp16;
          a_offset1 += 4;
          a_offset2 += 4;
          a_offset3 += 4;
          a_offset4 += 4;
          b_offset += 16;
          i--;
        } while (i > 0);
      }
      i = (m & 3);
      if (i > 0) {
        do {
          ctemp1 = *(a_offset1 + 0);
          ctemp5 = *(a_offset2 + 0);
          ctemp9 = *(a_offset3 + 0);
          ctemp13 = *(a_offset4 + 0);
          *(b_offset + 0) = ctemp1;
          *(b_offset + 1) = ctemp5;
          *(b_offset + 2) = ctemp9;
          *(b_offset + 3) = ctemp13;
          a_offset1++;
          a_offset2++;
          a_offset3++;
          a_offset4++;
          b_offset += 4;
          i--;
        } while (i > 0);
      }
      j--;
    } while (j > 0);
  }
  if (n & 2) {
    a_offset1 = a_offset;
    a_offset2 = a_offset1 + lda;
    a_offset += 2 * lda;
    i = (m >> 2);
    if (i > 0) {
      do {
        ctemp1 = *(a_offset1 + 0);
        ctemp2 = *(a_offset1 + 1);
        ctemp3 = *(a_offset1 + 2);
        ctemp4 = *(a_offset1 + 3);
        ctemp5 = *(a_offset2 + 0);
        ctemp6 = *(a_offset2 + 1);
        ctemp7 = *(a_offset2 + 2);
        ctemp8 = *(a_offset2 + 3);
        *(b_offset + 0) = ctemp1;
        *(b_offset + 1) = ctemp5;
        *(b_offset + 2) = ctemp2;
        *(b_offset + 3) = ctemp6;
        *(b_offset + 4) = ctemp3;
        *(b_offset + 5) = ctemp7;
        *(b_offset + 6) = ctemp4;
        *(b_offset + 7) = ctemp8;
        a_offset1 += 4;
        a_offset2 += 4;
        b_offset += 8;
        i--;
      } while (i > 0);
    }
    i = (m & 3);
    if (i > 0) {
      do {
        ctemp1 = *(a_offset1 + 0);
        ctemp5 = *(a_offset2 + 0);
        *(b_offset + 0) = ctemp1;
        *(b_offset + 1) = ctemp5;
        a_offset1++;
        a_offset2++;
        b_offset += 2;
        i--;
      } while (i > 0);
    }
  }
  if (n & 1) {
    a_offset1 = a_offset;
    i = (m >> 2);
    if (i > 0) {
      do {
        ctemp1 = *(a_offset1 + 0);
        ctemp2 = *(a_offset1 + 1);
        ctemp3 = *(a_offset1 + 2);
        ctemp4 = *(a_offset1 + 3);
        *(b_offset + 0) = ctemp1;
        *(b_offset + 1) = ctemp2;
        *(b_offset + 2) = ctemp3;
        *(b_offset + 3) = ctemp4;
        a_offset1 += 4;
        b_offset += 4;
        i--;
      } while (i > 0);
    }
    i = (m & 3);
    if (i > 0) {
      do {
        ctemp1 = *(a_offset1 + 0);
        *(b_offset + 0) = ctemp1;
        a_offset1++;
        b_offset += 1;
        i--;
      } while (i > 0);
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<sgemm_ncopy_4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x28,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x10(%rbp),%rax
sar    $0x2,%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jle    150f <sgemm_ncopy_4+0x40f>
jmp    1148 <sgemm_ncopy_4+0x48>
mov    -0x40(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x20(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
mov    -0x20(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
mov    -0x20(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x60(%rbp)
mov    -0x20(%rbp),%rax
shl    $0x2,%rax
shl    $0x2,%rax
add    -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x8(%rbp),%rax
sar    $0x2,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jle    1408 <sgemm_ncopy_4+0x308>
jmp    11b9 <sgemm_ncopy_4+0xb9>
mov    -0x48(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x48(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x48(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x48(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x78(%rbp)
mov    -0x50(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x50(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x80(%rbp)
mov    -0x50(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x84(%rbp)
ff
mov    -0x50(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x88(%rbp)
ff
mov    -0x58(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
mov    -0x58(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x90(%rbp)
ff
mov    -0x58(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x94(%rbp)
ff
mov    -0x58(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x98(%rbp)
ff
mov    -0x60(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x9c(%rbp)
ff
mov    -0x60(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0xa0(%rbp)
ff
mov    -0x60(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0xa4(%rbp)
ff
mov    -0x60(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0xa8(%rbp)
ff
movss  -0x6c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x7c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x8c(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x9c(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0xc(%rax)
movss  -0x70(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x10(%rax)
movss  -0x80(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0x90(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x18(%rax)
movss  -0xa0(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x1c(%rax)
movss  -0x74(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x20(%rax)
movss  -0x84(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x24(%rax)
movss  -0x94(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x28(%rax)
movss  -0xa4(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x2c(%rax)
movss  -0x78(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x30(%rax)
movss  -0x88(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x34(%rax)
movss  -0x98(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x38(%rax)
movss  -0xa8(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x3c(%rax)
mov    -0x48(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x58(%rbp)
mov    -0x60(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x60(%rbp)
mov    -0x68(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jg     11b9 <sgemm_ncopy_4+0xb9>
jmp    1408 <sgemm_ncopy_4+0x308>
mov    -0x8(%rbp),%rax
and    $0x3,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jle    14f3 <sgemm_ncopy_4+0x3f3>
jmp    1424 <sgemm_ncopy_4+0x324>
mov    -0x48(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x50(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x58(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
mov    -0x60(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x9c(%rbp)
ff
movss  -0x6c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x7c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x8c(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x9c(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0xc(%rax)
mov    -0x48(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x58(%rbp)
mov    -0x60(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x60(%rbp)
mov    -0x68(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jg     1424 <sgemm_ncopy_4+0x324>
jmp    14f3 <sgemm_ncopy_4+0x3f3>
mov    -0x38(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jg     1148 <sgemm_ncopy_4+0x48>
jmp    150f <sgemm_ncopy_4+0x40f>
mov    -0x10(%rbp),%rax
and    $0x2,%rax
cmp    $0x0,%rax
je     172b <sgemm_ncopy_4+0x62b>
mov    -0x40(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x20(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x20(%rbp),%rax
shl    $0x1,%rax
shl    $0x2,%rax
add    -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x8(%rbp),%rax
sar    $0x2,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jle    1695 <sgemm_ncopy_4+0x595>
jmp    156c <sgemm_ncopy_4+0x46c>
mov    -0x48(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x48(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x48(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x48(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x78(%rbp)
mov    -0x50(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x50(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x80(%rbp)
mov    -0x50(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x84(%rbp)
ff
mov    -0x50(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x88(%rbp)
ff
movss  -0x6c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x7c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x70(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x80(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0xc(%rax)
movss  -0x74(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x10(%rax)
movss  -0x84(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0x78(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x18(%rax)
movss  -0x88(%rbp),%xmm0
ff
mov    -0x68(%rbp),%rax
movss  %xmm0,0x1c(%rax)
mov    -0x48(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x50(%rbp)
mov    -0x68(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jg     156c <sgemm_ncopy_4+0x46c>
jmp    1695 <sgemm_ncopy_4+0x595>
mov    -0x8(%rbp),%rax
and    $0x3,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jle    1726 <sgemm_ncopy_4+0x626>
jmp    16b1 <sgemm_ncopy_4+0x5b1>
mov    -0x48(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x50(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  -0x6c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x7c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x4(%rax)
mov    -0x48(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
mov    -0x68(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jg     16b1 <sgemm_ncopy_4+0x5b1>
jmp    1726 <sgemm_ncopy_4+0x626>
jmp    172b <sgemm_ncopy_4+0x62b>
mov    -0x10(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     1872 <sgemm_ncopy_4+0x772>
mov    -0x40(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x8(%rbp),%rax
sar    $0x2,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jle    1803 <sgemm_ncopy_4+0x703>
jmp    1761 <sgemm_ncopy_4+0x661>
mov    -0x48(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x48(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x48(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x48(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x6c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x70(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x74(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x78(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,0xc(%rax)
mov    -0x48(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x48(%rbp)
mov    -0x68(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jg     1761 <sgemm_ncopy_4+0x661>
jmp    1803 <sgemm_ncopy_4+0x703>
mov    -0x8(%rbp),%rax
and    $0x3,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jle    186d <sgemm_ncopy_4+0x76d>
jmp    181f <sgemm_ncopy_4+0x71f>
mov    -0x48(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x6c(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movss  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x68(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jg     181f <sgemm_ncopy_4+0x71f>
jmp    186d <sgemm_ncopy_4+0x76d>
jmp    1872 <sgemm_ncopy_4+0x772>
xor    %eax,%eax
add    $0x28,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sgemm_ncopy_4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
cmp    $0x4,%rsi
mov    %rsi,-0x20(%rsp)
jl     138f <sgemm_ncopy_4+0x28f>
mov    %rsi,%r11
shr    $0x2,%r11
lea    0x0(,%rcx,4),%rax
mov    %rdi,%rbp
sar    $0x2,%rbp
mov    %edi,%r14d
and    $0x3,%r14d
lea    -0x3(%r14),%rsi
mov    %rsi,-0x18(%rsp)
lea    (%rcx,%rcx,2),%rsi
lea    (%rdx,%rsi,4),%r12
mov    %rcx,%r15
shl    $0x4,%r15
lea    (%rdx,%rcx,8),%r13
lea    (%rdx,%rcx,4),%r10
add    $0x1,%rbp
mov    %rbp,-0x8(%rsp)
mov    %r14,-0x10(%rsp)
jmp    1191 <sgemm_ncopy_4+0x91>
cs nopw 0x0(%rax,%rax,1)
add    $0x10,%r8
add    %r15,%rdx
lea    -0x1(%r11),%rsi
add    %r15,%r12
add    %r15,%r13
add    %r15,%r10
cmp    $0x1,%r11
mov    %rsi,%r11
jle    138f <sgemm_ncopy_4+0x28f>
cmp    $0x4,%rdi
jl     12d0 <sgemm_ncopy_4+0x1d0>
mov    -0x8(%rsp),%r9
xor    %r14d,%r14d
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
lea    (%rdx,%rbp,1),%rsi
movss  (%rdx,%rbp,1),%xmm13
movss  0x4(%rdx,%rbp,1),%xmm11
movss  0x8(%rdx,%rbp,1),%xmm9
movss  0xc(%rdx,%rbp,1),%xmm8
lea    (%rsi,%rax,1),%rbx
movss  (%rsi,%rcx,4),%xmm4
movss  0x4(%rsi,%rcx,4),%xmm15
movss  0x8(%rsi,%rcx,4),%xmm12
movss  0xc(%rsi,%rcx,4),%xmm10
add    %rax,%rbx
movss  (%rsi,%rcx,8),%xmm3
movss  0x4(%rsi,%rcx,8),%xmm2
movss  0x8(%rsi,%rcx,8),%xmm7
movss  0xc(%rsi,%rcx,8),%xmm14
movss  (%rbx,%rcx,4),%xmm6
movss  0x4(%rbx,%rcx,4),%xmm0
movss  0x8(%rbx,%rcx,4),%xmm1
movss  0xc(%rbx,%rcx,4),%xmm5
movss  %xmm13,(%r8,%rbp,4)
movss  %xmm4,0x4(%r8,%rbp,4)
movss  %xmm3,0x8(%r8,%rbp,4)
movss  %xmm6,0xc(%r8,%rbp,4)
movss  %xmm11,0x10(%r8,%rbp,4)
movss  %xmm15,0x14(%r8,%rbp,4)
movss  %xmm2,0x18(%r8,%rbp,4)
movss  %xmm0,0x1c(%r8,%rbp,4)
movss  %xmm9,0x20(%r8,%rbp,4)
movss  %xmm12,0x24(%r8,%rbp,4)
movss  %xmm7,0x28(%r8,%rbp,4)
movss  %xmm1,0x2c(%r8,%rbp,4)
movss  %xmm8,0x30(%r8,%rbp,4)
movss  %xmm10,0x34(%r8,%rbp,4)
movss  %xmm14,0x38(%r8,%rbp,4)
movss  %xmm5,0x3c(%r8,%rbp,4)
add    $0x10,%rbp
add    $0x40,%r14
add    $0xffffffffffffffff,%r9
cmp    $0x1,%r9
jg     11b0 <sgemm_ncopy_4+0xb0>
lea    (%r12,%rbp,1),%r9
add    %r14,%r8
mov    %r13,%rsi
add    %rbp,%rsi
lea    (%r10,%rbp,1),%rbx
add    %rdx,%rbp
mov    -0x10(%rsp),%r14
test   %r14,%r14
jne    12e8 <sgemm_ncopy_4+0x1e8>
jmp    1174 <sgemm_ncopy_4+0x74>
nopw   0x0(%rax,%rax,1)
lea    (%rdx,%rcx,4),%rbx
lea    (%rbx,%rcx,4),%rsi
lea    (%rsi,%rcx,4),%r9
mov    %rdx,%rbp
test   %r14,%r14
je     1174 <sgemm_ncopy_4+0x74>
movss  0x0(%rbp),%xmm0
movss  (%rbx),%xmm1
movss  (%rsi),%xmm2
movss  (%r9),%xmm3
movss  %xmm0,(%r8)
movss  %xmm1,0x4(%r8)
movss  %xmm2,0x8(%r8)
movss  %xmm3,0xc(%r8)
cmp    $0x2,%r14d
jb     1170 <sgemm_ncopy_4+0x70>
movss  0x4(%rbp),%xmm0
movss  0x4(%rbx),%xmm1
movss  0x4(%rsi),%xmm2
movss  0x4(%r9),%xmm3
movss  %xmm0,0x10(%r8)
movss  %xmm1,0x14(%r8)
movss  %xmm2,0x18(%r8)
movss  %xmm3,0x1c(%r8)
cmpq   $0xfffffffffffffffd,-0x18(%rsp)
ja     1386 <sgemm_ncopy_4+0x286>
movss  0x8(%rbp),%xmm0
movss  0x8(%rbx),%xmm1
movss  0x8(%rsi),%xmm2
movss  0x8(%r9),%xmm3
movss  %xmm0,0x20(%r8)
movss  %xmm1,0x24(%r8)
movss  %xmm2,0x28(%r8)
movss  %xmm3,0x2c(%r8)
add    $0x30,%r8
jmp    1174 <sgemm_ncopy_4+0x74>
add    $0x20,%r8
jmp    1174 <sgemm_ncopy_4+0x74>
mov    -0x20(%rsp),%rbp
test   $0x2,%bpl
je     14a8 <sgemm_ncopy_4+0x3a8>
cmp    $0x4,%rdi
jl     1431 <sgemm_ncopy_4+0x331>
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %rdx,%rax
cs nopw 0x0(%rax,%rax,1)
movss  (%rax),%xmm0
movss  0x4(%rax),%xmm1
movss  0x8(%rax),%xmm2
movss  0xc(%rax),%xmm3
movss  (%rax,%rcx,4),%xmm4
movss  0x4(%rax,%rcx,4),%xmm5
movss  0x8(%rax,%rcx,4),%xmm6
movss  0xc(%rax,%rcx,4),%xmm7
movss  %xmm0,(%r8)
movss  %xmm4,0x4(%r8)
movss  %xmm1,0x8(%r8)
movss  %xmm5,0xc(%r8)
movss  %xmm2,0x10(%r8)
movss  %xmm6,0x14(%r8)
movss  %xmm3,0x18(%r8)
movss  %xmm7,0x1c(%r8)
add    $0x10,%rax
add    $0x20,%r8
add    $0xffffffffffffffff,%rsi
cmp    $0x1,%rsi
ja     13c0 <sgemm_ncopy_4+0x2c0>
lea    (%rax,%rcx,4),%rsi
jmp    1438 <sgemm_ncopy_4+0x338>
lea    (%rdx,%rcx,4),%rsi
mov    %rdx,%rax
lea    (%rdx,%rcx,8),%rdx
mov    %rdi,%rcx
and    $0x3,%rcx
je     14a8 <sgemm_ncopy_4+0x3a8>
movss  (%rax),%xmm0
movss  (%rsi),%xmm1
movss  %xmm0,(%r8)
movss  %xmm1,0x4(%r8)
cmp    $0x2,%rcx
jb     14a4 <sgemm_ncopy_4+0x3a4>
movss  0x4(%rax),%xmm0
movss  0x4(%rsi),%xmm1
movss  %xmm0,0x8(%r8)
movss  %xmm1,0xc(%r8)
add    $0xfffffffffffffffd,%rcx
cmp    $0xfffffffffffffffd,%rcx
ja     1510 <sgemm_ncopy_4+0x410>
movss  0x8(%rax),%xmm0
movss  0x8(%rsi),%xmm1
movss  %xmm0,0x10(%r8)
movss  %xmm1,0x14(%r8)
add    $0x18,%r8
test   $0x1,%bpl
jne    14ae <sgemm_ncopy_4+0x3ae>
jmp    151a <sgemm_ncopy_4+0x41a>
add    $0x8,%r8
test   $0x1,%bpl
je     151a <sgemm_ncopy_4+0x41a>
cmp    $0x4,%rdi
jl     14d9 <sgemm_ncopy_4+0x3d9>
mov    %rdi,%rax
shr    $0x2,%rax
add    $0x1,%rax
nop
movups (%rdx),%xmm0
movups %xmm0,(%r8)
add    $0x10,%rdx
add    $0x10,%r8
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
ja     14c0 <sgemm_ncopy_4+0x3c0>
and    $0x3,%rdi
je     151a <sgemm_ncopy_4+0x41a>
movss  (%rdx),%xmm0
movss  %xmm0,(%r8)
cmp    $0x2,%rdi
jb     151a <sgemm_ncopy_4+0x41a>
movss  0x4(%rdx),%xmm0
movss  %xmm0,0x4(%r8)
add    $0xfffffffffffffffd,%rdi
cmp    $0xfffffffffffffffd,%rdi
ja     151a <sgemm_ncopy_4+0x41a>
movss  0x8(%rdx),%xmm0
movss  %xmm0,0x8(%r8)
jmp    151a <sgemm_ncopy_4+0x41a>
add    $0x10,%r8
test   $0x1,%bpl
jne    14ae <sgemm_ncopy_4+0x3ae>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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