void revbin_permute_32(double _Complex *f) {
  {
    double _Complex t = f[1];
    f[1] = f[16];
    f[16] = t;
  };
  {
    double _Complex t = f[2];
    f[2] = f[8];
    f[8] = t;
  };
  {
    double _Complex t = f[3];
    f[3] = f[24];
    f[24] = t;
  };
  {
    double _Complex t = f[5];
    f[5] = f[20];
    f[20] = t;
  };
  {
    double _Complex t = f[6];
    f[6] = f[12];
    f[12] = t;
  };
  {
    double _Complex t = f[7];
    f[7] = f[28];
    f[28] = t;
  };
  {
    double _Complex t = f[9];
    f[9] = f[18];
    f[18] = t;
  };
  {
    double _Complex t = f[11];
    f[11] = f[26];
    f[26] = t;
  };
  {
    double _Complex t = f[13];
    f[13] = f[22];
    f[22] = t;
  };
  {
    double _Complex t = f[15];
    f[15] = f[30];
    f[30] = t;
  };
  {
    double _Complex t = f[19];
    f[19] = f[25];
    f[25] = t;
  };
  {
    double _Complex t = f[23];
    f[23] = f[29];
    f[29] = t;
  };
}


x86 assembly (clang, -O0):
<revbin_permute_32>:
push   %rbp
mov    %rsp,%rbp
sub    $0x48,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  0x18(%rax),%xmm0
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x100(%rax),%xmm1
movsd  0x108(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x10(%rax)
movsd  %xmm0,0x18(%rax)
movsd  -0x18(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x100(%rax)
movsd  %xmm0,0x108(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm1
movsd  0x28(%rax),%xmm0
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x80(%rax),%xmm1
movsd  0x88(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x20(%rax)
movsd  %xmm0,0x28(%rax)
movsd  -0x28(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x80(%rax)
movsd  %xmm0,0x88(%rax)
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  0x38(%rax),%xmm0
movsd  %xmm1,-0x38(%rbp)
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x180(%rax),%xmm1
movsd  0x188(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x30(%rax)
movsd  %xmm0,0x38(%rax)
movsd  -0x38(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x180(%rax)
movsd  %xmm0,0x188(%rax)
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  0x58(%rax),%xmm0
movsd  %xmm1,-0x48(%rbp)
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x140(%rax),%xmm1
movsd  0x148(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x50(%rax)
movsd  %xmm0,0x58(%rax)
movsd  -0x48(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x140(%rax)
movsd  %xmm0,0x148(%rax)
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm1
movsd  0x68(%rax),%xmm0
movsd  %xmm1,-0x58(%rbp)
movsd  %xmm0,-0x50(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xc0(%rax),%xmm1
movsd  0xc8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x60(%rax)
movsd  %xmm0,0x68(%rax)
movsd  -0x58(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xc0(%rax)
movsd  %xmm0,0xc8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  0x78(%rax),%xmm0
movsd  %xmm1,-0x68(%rbp)
movsd  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x1c0(%rax),%xmm1
movsd  0x1c8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x70(%rax)
movsd  %xmm0,0x78(%rax)
movsd  -0x68(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x1c0(%rax)
movsd  %xmm0,0x1c8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x90(%rax),%xmm1
movsd  0x98(%rax),%xmm0
movsd  %xmm1,-0x78(%rbp)
movsd  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x120(%rax),%xmm1
movsd  0x128(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x90(%rax)
movsd  %xmm0,0x98(%rax)
movsd  -0x78(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x120(%rax)
movsd  %xmm0,0x128(%rax)
mov    -0x8(%rbp),%rax
movsd  0xb0(%rax),%xmm1
movsd  0xb8(%rax),%xmm0
movsd  %xmm1,-0x88(%rbp)
ff
movsd  %xmm0,-0x80(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x1a0(%rax),%xmm1
movsd  0x1a8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xb0(%rax)
movsd  %xmm0,0xb8(%rax)
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x80(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x1a0(%rax)
movsd  %xmm0,0x1a8(%rax)
mov    -0x8(%rbp),%rax
movsd  0xd0(%rax),%xmm1
movsd  0xd8(%rax),%xmm0
movsd  %xmm1,-0x98(%rbp)
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x160(%rax),%xmm1
movsd  0x168(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xd0(%rax)
movsd  %xmm0,0xd8(%rax)
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x160(%rax)
movsd  %xmm0,0x168(%rax)
mov    -0x8(%rbp),%rax
movsd  0xf0(%rax),%xmm1
movsd  0xf8(%rax),%xmm0
movsd  %xmm1,-0xa8(%rbp)
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x1e0(%rax),%xmm1
movsd  0x1e8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xf0(%rax)
movsd  %xmm0,0xf8(%rax)
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x1e0(%rax)
movsd  %xmm0,0x1e8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x130(%rax),%xmm1
movsd  0x138(%rax),%xmm0
movsd  %xmm1,-0xb8(%rbp)
ff
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x190(%rax),%xmm1
movsd  0x198(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x130(%rax)
movsd  %xmm0,0x138(%rax)
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x190(%rax)
movsd  %xmm0,0x198(%rax)
mov    -0x8(%rbp),%rax
movsd  0x170(%rax),%xmm1
movsd  0x178(%rax),%xmm0
movsd  %xmm1,-0xc8(%rbp)
ff
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x1d0(%rax),%xmm1
movsd  0x1d8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x170(%rax)
movsd  %xmm0,0x178(%rax)
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x1d0(%rax)
movsd  %xmm0,0x1d8(%rax)
add    $0x48,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<revbin_permute_32>:
movups 0x100(%rdi),%xmm0
movups 0x10(%rdi),%xmm1
movups 0x20(%rdi),%xmm2
movups 0x30(%rdi),%xmm3
movups 0x50(%rdi),%xmm4
movups %xmm0,0x10(%rdi)
movups %xmm1,0x100(%rdi)
movups 0x80(%rdi),%xmm0
movups %xmm0,0x20(%rdi)
movups %xmm2,0x80(%rdi)
movups 0x180(%rdi),%xmm0
movups %xmm0,0x30(%rdi)
movups %xmm3,0x180(%rdi)
movups 0x140(%rdi),%xmm0
movups %xmm0,0x50(%rdi)
movups %xmm4,0x140(%rdi)
movups 0x60(%rdi),%xmm0
movups 0xc0(%rdi),%xmm1
movups %xmm1,0x60(%rdi)
movups %xmm0,0xc0(%rdi)
movups 0x70(%rdi),%xmm0
movups 0x1c0(%rdi),%xmm1
movups %xmm1,0x70(%rdi)
movups %xmm0,0x1c0(%rdi)
movups 0x90(%rdi),%xmm0
movups 0x120(%rdi),%xmm1
movups %xmm1,0x90(%rdi)
movups %xmm0,0x120(%rdi)
movups 0xb0(%rdi),%xmm0
movups 0x1a0(%rdi),%xmm1
movups %xmm1,0xb0(%rdi)
movups %xmm0,0x1a0(%rdi)
movups 0xd0(%rdi),%xmm0
movups 0x160(%rdi),%xmm1
movups %xmm1,0xd0(%rdi)
movups %xmm0,0x160(%rdi)
movups 0xf0(%rdi),%xmm0
movups 0x1e0(%rdi),%xmm1
movups %xmm1,0xf0(%rdi)
movups %xmm0,0x1e0(%rdi)
movups 0x130(%rdi),%xmm0
movups 0x190(%rdi),%xmm1
movups %xmm1,0x130(%rdi)
movups %xmm0,0x190(%rdi)
movups 0x170(%rdi),%xmm0
movups 0x1d0(%rdi),%xmm1
movups %xmm1,0x170(%rdi)
movups %xmm0,0x1d0(%rdi)
ret

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

LLVM IR (-O2):
define void @revbin_permute_32({ double, double }* %0) {
%2 = getelementptr inbounds { double, double }, { double, double }* %0, i64 1, i32 0
%3 = bitcast double* %2 to <2 x double>*
%4 = load <2 x double>, <2 x double>* %3
%5 = getelementptr inbounds { double, double }, { double, double }* %0, i64 16, i32 0
%6 = bitcast double* %5 to <2 x double>*
%7 = load <2 x double>, <2 x double>* %6
%8 = bitcast double* %2 to <2 x double>*
store <2 x double> %7, <2 x double>* %8
%9 = bitcast double* %5 to <2 x double>*
store <2 x double> %4, <2 x double>* %9
%10 = getelementptr inbounds { double, double }, { double, double }* %0, i64 2, 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 }* %0, i64 8, i32 0
%14 = bitcast double* %13 to <2 x double>*
%15 = load <2 x double>, <2 x double>* %14
%16 = bitcast double* %10 to <2 x double>*
store <2 x double> %15, <2 x double>* %16
%17 = bitcast double* %13 to <2 x double>*
store <2 x double> %12, <2 x double>* %17
%18 = getelementptr inbounds { double, double }, { double, double }* %0, i64 3, i32 0
%19 = bitcast double* %18 to <2 x double>*
%20 = load <2 x double>, <2 x double>* %19
%21 = getelementptr inbounds { double, double }, { double, double }* %0, i64 24, i32 0
%22 = bitcast double* %21 to <2 x double>*
%23 = load <2 x double>, <2 x double>* %22
%24 = bitcast double* %18 to <2 x double>*
store <2 x double> %23, <2 x double>* %24
%25 = bitcast double* %21 to <2 x double>*
store <2 x double> %20, <2 x double>* %25
%26 = getelementptr inbounds { double, double }, { double, double }* %0, i64 5, i32 0
%27 = bitcast double* %26 to <2 x double>*
%28 = load <2 x double>, <2 x double>* %27
%29 = getelementptr inbounds { double, double }, { double, double }* %0, i64 20, i32 0
%30 = bitcast double* %29 to <2 x double>*
%31 = load <2 x double>, <2 x double>* %30
%32 = bitcast double* %26 to <2 x double>*
store <2 x double> %31, <2 x double>* %32
%33 = bitcast double* %29 to <2 x double>*
store <2 x double> %28, <2 x double>* %33
%34 = getelementptr inbounds { double, double }, { double, double }* %0, i64 6, i32 0
%35 = bitcast double* %34 to <2 x double>*
%36 = load <2 x double>, <2 x double>* %35
%37 = getelementptr inbounds { double, double }, { double, double }* %0, i64 12, i32 0
%38 = bitcast double* %37 to <2 x double>*
%39 = load <2 x double>, <2 x double>* %38
%40 = bitcast double* %34 to <2 x double>*
store <2 x double> %39, <2 x double>* %40
%41 = bitcast double* %37 to <2 x double>*
store <2 x double> %36, <2 x double>* %41
%42 = getelementptr inbounds { double, double }, { double, double }* %0, i64 7, i32 0
%43 = bitcast double* %42 to <2 x double>*
%44 = load <2 x double>, <2 x double>* %43
%45 = getelementptr inbounds { double, double }, { double, double }* %0, i64 28, i32 0
%46 = bitcast double* %45 to <2 x double>*
%47 = load <2 x double>, <2 x double>* %46
%48 = bitcast double* %42 to <2 x double>*
store <2 x double> %47, <2 x double>* %48
%49 = bitcast double* %45 to <2 x double>*
store <2 x double> %44, <2 x double>* %49
%50 = getelementptr inbounds { double, double }, { double, double }* %0, i64 9, i32 0
%51 = load double, double* %50
%52 = getelementptr inbounds { double, double }, { double, double }* %0, i64 9, i32 1
%53 = load double, double* %52
%54 = getelementptr inbounds { double, double }, { double, double }* %0, i64 18, i32 0
%55 = getelementptr inbounds { double, double }, { double, double }* %0, i64 18, i32 1
%56 = bitcast double* %54 to <2 x double>*
%57 = load <2 x double>, <2 x double>* %56
%58 = bitcast double* %50 to <2 x double>*
store <2 x double> %57, <2 x double>* %58
store double %51, double* %54
store double %53, double* %55
%59 = getelementptr inbounds { double, double }, { double, double }* %0, i64 11, i32 0
%60 = bitcast double* %59 to <2 x double>*
%61 = load <2 x double>, <2 x double>* %60
%62 = getelementptr inbounds { double, double }, { double, double }* %0, i64 26, i32 0
%63 = bitcast double* %62 to <2 x double>*
%64 = load <2 x double>, <2 x double>* %63
%65 = bitcast double* %59 to <2 x double>*
store <2 x double> %64, <2 x double>* %65
%66 = bitcast double* %62 to <2 x double>*
store <2 x double> %61, <2 x double>* %66
%67 = getelementptr inbounds { double, double }, { double, double }* %0, i64 13, i32 0
%68 = bitcast double* %67 to <2 x double>*
%69 = load <2 x double>, <2 x double>* %68
%70 = getelementptr inbounds { double, double }, { double, double }* %0, i64 22, i32 0
%71 = bitcast double* %70 to <2 x double>*
%72 = load <2 x double>, <2 x double>* %71
%73 = bitcast double* %67 to <2 x double>*
store <2 x double> %72, <2 x double>* %73
%74 = bitcast double* %70 to <2 x double>*
store <2 x double> %69, <2 x double>* %74
%75 = getelementptr inbounds { double, double }, { double, double }* %0, i64 15, i32 0
%76 = bitcast double* %75 to <2 x double>*
%77 = load <2 x double>, <2 x double>* %76
%78 = getelementptr inbounds { double, double }, { double, double }* %0, i64 30, i32 0
%79 = bitcast double* %78 to <2 x double>*
%80 = load <2 x double>, <2 x double>* %79
%81 = bitcast double* %75 to <2 x double>*
store <2 x double> %80, <2 x double>* %81
%82 = bitcast double* %78 to <2 x double>*
store <2 x double> %77, <2 x double>* %82
%83 = getelementptr inbounds { double, double }, { double, double }* %0, i64 19, i32 0
%84 = getelementptr inbounds { double, double }, { double, double }* %0, i64 19, i32 1
%85 = bitcast double* %83 to <2 x double>*
%86 = load <2 x double>, <2 x double>* %85
%87 = getelementptr inbounds { double, double }, { double, double }* %0, i64 25, i32 0
%88 = load double, double* %87
%89 = getelementptr inbounds { double, double }, { double, double }* %0, i64 25, i32 1
%90 = load double, double* %89
store double %88, double* %83
store double %90, double* %84
%91 = bitcast double* %87 to <2 x double>*
store <2 x double> %86, <2 x double>* %91
%92 = getelementptr inbounds { double, double }, { double, double }* %0, i64 23, i32 0
%93 = bitcast double* %92 to <2 x double>*
%94 = load <2 x double>, <2 x double>* %93
%95 = getelementptr inbounds { double, double }, { double, double }* %0, i64 29, i32 0
%96 = bitcast double* %95 to <2 x double>*
%97 = load <2 x double>, <2 x double>* %96
%98 = bitcast double* %92 to <2 x double>*
store <2 x double> %97, <2 x double>* %98
%99 = bitcast double* %95 to <2 x double>*
store <2 x double> %94, <2 x double>* %99
ret void
}