__attribute__((always_)) void micro_trsp_blk(long N, long N_SQRT,
                                             double _Complex (*data)[N_SQRT]) {
  register double _Complex a00, a01, a02, a03;
  register double _Complex a10, a11, a12, a13;
  register double _Complex a20, a21, a22, a23;
  register double _Complex a30, a31, a32, a33;
  a00 = data[0][0];
  a01 = data[0][1];
  a02 = data[0][2];
  a03 = data[0][3];
  a10 = data[1][0];
  a11 = data[1][1];
  a12 = data[1][2];
  a13 = data[1][3];
  a20 = data[2][0];
  a21 = data[2][1];
  a22 = data[2][2];
  a23 = data[2][3];
  a30 = data[3][0];
  a31 = data[3][1];
  a32 = data[3][2];
  a33 = data[3][3];
  data[0][0] = a00;
  data[0][1] = a10;
  data[0][2] = a20;
  data[0][3] = a30;
  data[1][0] = a01;
  data[1][1] = a11;
  data[1][2] = a21;
  data[1][3] = a31;
  data[2][0] = a02;
  data[2][1] = a12;
  data[2][2] = a22;
  data[2][3] = a32;
  data[3][0] = a03;
  data[3][1] = a13;
  data[3][2] = a23;
  data[3][3] = a33;
}


x86 assembly (clang, -O0):
<micro_trsp_blk>:
push   %rbp
mov    %rsp,%rbp
sub    $0x98,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rax
imul   $0x0,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  (%rax),%xmm1
movsd  0x8(%rax),%xmm0
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    -0x18(%rbp),%rax
imul   $0x0,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x10(%rax),%xmm1
movsd  0x18(%rax),%xmm0
movsd  %xmm1,-0x38(%rbp)
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
imul   $0x0,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x20(%rax),%xmm1
movsd  0x28(%rax),%xmm0
movsd  %xmm1,-0x48(%rbp)
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
imul   $0x0,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x30(%rax),%xmm1
movsd  0x38(%rax),%xmm0
movsd  %xmm1,-0x58(%rbp)
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x0,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  (%rax),%xmm1
movsd  0x8(%rax),%xmm0
movsd  %xmm1,-0x68(%rbp)
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x0,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x10(%rax),%xmm1
movsd  0x18(%rax),%xmm0
movsd  %xmm1,-0x78(%rbp)
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x0,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x20(%rax),%xmm1
movsd  0x28(%rax),%xmm0
movsd  %xmm1,-0x88(%rbp)
ff
movsd  %xmm0,-0x80(%rbp)
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x0,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x30(%rax),%xmm1
movsd  0x38(%rax),%xmm0
movsd  %xmm1,-0x98(%rbp)
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x1,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  (%rax),%xmm1
movsd  0x8(%rax),%xmm0
movsd  %xmm1,-0xa8(%rbp)
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x1,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x10(%rax),%xmm1
movsd  0x18(%rax),%xmm0
movsd  %xmm1,-0xb8(%rbp)
ff
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x1,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x20(%rax),%xmm1
movsd  0x28(%rax),%xmm0
movsd  %xmm1,-0xc8(%rbp)
ff
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x1,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x30(%rax),%xmm1
movsd  0x38(%rax),%xmm0
movsd  %xmm1,-0xd8(%rbp)
ff
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x18(%rbp),%rax
imul   $0x3,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  (%rax),%xmm1
movsd  0x8(%rax),%xmm0
movsd  %xmm1,-0xe8(%rbp)
ff
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x18(%rbp),%rax
imul   $0x3,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x10(%rax),%xmm1
movsd  0x18(%rax),%xmm0
movsd  %xmm1,-0xf8(%rbp)
ff
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
imul   $0x3,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x20(%rax),%xmm1
movsd  0x28(%rax),%xmm0
movsd  %xmm1,-0x108(%rbp)
ff
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x18(%rbp),%rax
imul   $0x3,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  0x30(%rax),%xmm1
movsd  0x38(%rax),%xmm0
movsd  %xmm1,-0x118(%rbp)
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x28(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
mov    -0x18(%rbp),%rax
imul   $0x0,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,(%rax)
movsd  %xmm0,0x8(%rax)
movsd  -0x68(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
imul   $0x0,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x10(%rax)
movsd  %xmm0,0x18(%rax)
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
imul   $0x0,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x20(%rax)
movsd  %xmm0,0x28(%rax)
movsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
imul   $0x0,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x30(%rax)
movsd  %xmm0,0x38(%rax)
movsd  -0x38(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x0,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,(%rax)
movsd  %xmm0,0x8(%rax)
movsd  -0x78(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x0,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x10(%rax)
movsd  %xmm0,0x18(%rax)
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x0,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x20(%rax)
movsd  %xmm0,0x28(%rax)
movsd  -0xf8(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x0,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x30(%rax)
movsd  %xmm0,0x38(%rax)
movsd  -0x48(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x1,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,(%rax)
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x1,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x10(%rax)
movsd  %xmm0,0x18(%rax)
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x1,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x20(%rax)
movsd  %xmm0,0x28(%rax)
movsd  -0x108(%rbp),%xmm1
ff
movsd  -0x100(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    %rcx,%rdx
shl    $0x1,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x30(%rax)
movsd  %xmm0,0x38(%rax)
movsd  -0x58(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
mov    -0x18(%rbp),%rax
imul   $0x3,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,(%rax)
movsd  %xmm0,0x8(%rax)
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
imul   $0x3,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x10(%rax)
movsd  %xmm0,0x18(%rax)
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
imul   $0x3,%rcx,%rdx
shl    $0x4,%rdx
add    %rdx,%rax
movsd  %xmm1,0x20(%rax)
movsd  %xmm0,0x28(%rax)
movsd  -0x118(%rbp),%xmm1
ff
movsd  -0x110(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
imul   $0x3,%rcx,%rcx
shl    $0x4,%rcx
add    %rcx,%rax
movsd  %xmm1,0x30(%rax)
movsd  %xmm0,0x38(%rax)
add    $0x98,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<micro_trsp_blk>:
movups 0x10(%rdx),%xmm10
movups 0x20(%rdx),%xmm9
movups 0x30(%rdx),%xmm8
mov    %rsi,%rax
lea    (%rsi,%rsi,2),%rcx
shl    $0x4,%rsi
movups (%rdx,%rsi,1),%xmm3
movups 0x10(%rdx,%rsi,1),%xmm4
movups 0x20(%rdx,%rsi,1),%xmm13
movups 0x30(%rdx,%rsi,1),%xmm11
shl    $0x5,%rax
movups (%rdx,%rax,1),%xmm7
movups 0x10(%rdx,%rax,1),%xmm2
movups 0x20(%rdx,%rax,1),%xmm1
movups 0x30(%rdx,%rax,1),%xmm12
shl    $0x4,%rcx
movups (%rdx,%rcx,1),%xmm6
movups 0x10(%rdx,%rcx,1),%xmm0
movups 0x20(%rdx,%rcx,1),%xmm5
movups 0x30(%rdx,%rcx,1),%xmm14
movups %xmm3,0x10(%rdx)
movups %xmm7,0x20(%rdx)
movups %xmm6,0x30(%rdx)
movups %xmm10,(%rdx,%rsi,1)
movups %xmm4,0x10(%rdx,%rsi,1)
movups %xmm2,0x20(%rdx,%rsi,1)
movups %xmm0,0x30(%rdx,%rsi,1)
movups %xmm9,(%rdx,%rax,1)
movups %xmm13,0x10(%rdx,%rax,1)
movups %xmm1,0x20(%rdx,%rax,1)
movups %xmm5,0x30(%rdx,%rax,1)
movups %xmm8,(%rdx,%rcx,1)
movups %xmm11,0x10(%rdx,%rcx,1)
movups %xmm12,0x20(%rdx,%rcx,1)
movups %xmm14,0x30(%rdx,%rcx,1)
ret

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

LLVM IR (-O2):
define void @micro_trsp_blk(i64 %0, i64 %1, { double, double }* nocapture %2) {
%4 = getelementptr inbounds { double, double }, { double, double }* %2, i64 1, i32 0
%5 = bitcast double* %4 to <2 x double>*
%6 = load <2 x double>, <2 x double>* %5
%7 = getelementptr inbounds { double, double }, { double, double }* %2, i64 2, i32 0
%8 = bitcast double* %7 to <2 x double>*
%9 = load <2 x double>, <2 x double>* %8
%10 = getelementptr inbounds { double, double }, { double, double }* %2, i64 3, i32 0
%11 = bitcast double* %10 to <2 x double>*
%12 = load <2 x double>, <2 x double>* %11
%13 = getelementptr inbounds { double, double }, { double, double }* %2, i64 %1
%14 = bitcast { double, double }* %13 to <2 x double>*
%15 = load <2 x double>, <2 x double>* %14
%16 = getelementptr inbounds { double, double }, { double, double }* %13, i64 1
%17 = bitcast { double, double }* %16 to <2 x double>*
%18 = load <2 x double>, <2 x double>* %17
%19 = getelementptr inbounds { double, double }, { double, double }* %13, i64 2
%20 = bitcast { double, double }* %19 to <2 x double>*
%21 = load <2 x double>, <2 x double>* %20
%22 = getelementptr inbounds { double, double }, { double, double }* %13, i64 3
%23 = bitcast { double, double }* %22 to <2 x double>*
%24 = load <2 x double>, <2 x double>* %23
%25 = shl nsw i64 %1, 1
%26 = getelementptr inbounds { double, double }, { double, double }* %2, i64 %25
%27 = bitcast { double, double }* %26 to <2 x double>*
%28 = load <2 x double>, <2 x double>* %27
%29 = getelementptr inbounds { double, double }, { double, double }* %26, i64 1
%30 = bitcast { double, double }* %29 to <2 x double>*
%31 = load <2 x double>, <2 x double>* %30
%32 = getelementptr inbounds { double, double }, { double, double }* %26, i64 2
%33 = bitcast { double, double }* %32 to <2 x double>*
%34 = load <2 x double>, <2 x double>* %33
%35 = getelementptr inbounds { double, double }, { double, double }* %26, i64 3
%36 = bitcast { double, double }* %35 to <2 x double>*
%37 = load <2 x double>, <2 x double>* %36
%38 = mul nsw i64 %1, 3
%39 = getelementptr inbounds { double, double }, { double, double }* %2, i64 %38
%40 = bitcast { double, double }* %39 to <2 x double>*
%41 = load <2 x double>, <2 x double>* %40
%42 = getelementptr inbounds { double, double }, { double, double }* %39, i64 1
%43 = bitcast { double, double }* %42 to <2 x double>*
%44 = load <2 x double>, <2 x double>* %43
%45 = getelementptr inbounds { double, double }, { double, double }* %39, i64 2
%46 = bitcast { double, double }* %45 to <2 x double>*
%47 = load <2 x double>, <2 x double>* %46
%48 = getelementptr inbounds { double, double }, { double, double }* %39, i64 3
%49 = bitcast { double, double }* %48 to <2 x double>*
%50 = load <2 x double>, <2 x double>* %49
%51 = bitcast double* %4 to <2 x double>*
store <2 x double> %15, <2 x double>* %51
%52 = bitcast double* %7 to <2 x double>*
store <2 x double> %28, <2 x double>* %52
%53 = bitcast double* %10 to <2 x double>*
store <2 x double> %41, <2 x double>* %53
%54 = bitcast { double, double }* %13 to <2 x double>*
store <2 x double> %6, <2 x double>* %54
%55 = bitcast { double, double }* %16 to <2 x double>*
store <2 x double> %18, <2 x double>* %55
%56 = bitcast { double, double }* %19 to <2 x double>*
store <2 x double> %31, <2 x double>* %56
%57 = bitcast { double, double }* %22 to <2 x double>*
store <2 x double> %44, <2 x double>* %57
%58 = bitcast { double, double }* %26 to <2 x double>*
store <2 x double> %9, <2 x double>* %58
%59 = bitcast { double, double }* %29 to <2 x double>*
store <2 x double> %21, <2 x double>* %59
%60 = bitcast { double, double }* %32 to <2 x double>*
store <2 x double> %34, <2 x double>* %60
%61 = bitcast { double, double }* %35 to <2 x double>*
store <2 x double> %47, <2 x double>* %61
%62 = bitcast { double, double }* %39 to <2 x double>*
store <2 x double> %12, <2 x double>* %62
%63 = bitcast { double, double }* %42 to <2 x double>*
store <2 x double> %24, <2 x double>* %63
%64 = bitcast { double, double }* %45 to <2 x double>*
store <2 x double> %37, <2 x double>* %64
%65 = bitcast { double, double }* %48 to <2 x double>*
store <2 x double> %50, <2 x double>* %65
ret void
}