void revbin_permute_8(double _Complex *f) {
  {
    double _Complex t = f[1];
    f[1] = f[4];
    f[4] = t;
  };
  {
    double _Complex t = f[3];
    f[3] = f[6];
    f[6] = t;
  };
}


x86 assembly (clang, -O0):
<revbin_permute_8>:
push   %rbp
mov    %rsp,%rbp
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  0x40(%rax),%xmm1
movsd  0x48(%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,0x40(%rax)
movsd  %xmm0,0x48(%rax)
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  0x38(%rax),%xmm0
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm1
movsd  0x68(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x30(%rax)
movsd  %xmm0,0x38(%rax)
movsd  -0x28(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x60(%rax)
movsd  %xmm0,0x68(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<revbin_permute_8>:
movups 0x10(%rdi),%xmm0
movups 0x30(%rdi),%xmm1
movups 0x40(%rdi),%xmm2
movups 0x60(%rdi),%xmm3
movups %xmm2,0x10(%rdi)
movups %xmm0,0x40(%rdi)
movups %xmm3,0x30(%rdi)
movups %xmm1,0x60(%rdi)
ret

LLVM IR (-O0):
define void @revbin_permute_8({ double, double }* %0) {
%2 = alloca { double, double }*
%3 = alloca { double, double }
%4 = alloca { double, double }
store { double, double }* %0, { double, double }** %2
%5 = load { double, double }*, { double, double }** %2
%6 = getelementptr inbounds { double, double }, { double, double }* %5, i64 1
%7 = getelementptr inbounds { double, double }, { double, double }* %6, i32 0, i32 0
%8 = load double, double* %7
%9 = getelementptr inbounds { double, double }, { double, double }* %6, i32 0, i32 1
%10 = load double, double* %9
%11 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%12 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
store double %8, double* %11
store double %10, double* %12
%13 = load { double, double }*, { double, double }** %2
%14 = getelementptr inbounds { double, double }, { double, double }* %13, i64 4
%15 = getelementptr inbounds { double, double }, { double, double }* %14, i32 0, i32 0
%16 = load double, double* %15
%17 = getelementptr inbounds { double, double }, { double, double }* %14, i32 0, i32 1
%18 = load double, double* %17
%19 = load { double, double }*, { double, double }** %2
%20 = getelementptr inbounds { double, double }, { double, double }* %19, i64 1
%21 = getelementptr inbounds { double, double }, { double, double }* %20, i32 0, i32 0
%22 = getelementptr inbounds { double, double }, { double, double }* %20, i32 0, i32 1
store double %16, double* %21
store double %18, double* %22
%23 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%24 = load double, double* %23
%25 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
%26 = load double, double* %25
%27 = load { double, double }*, { double, double }** %2
%28 = getelementptr inbounds { double, double }, { double, double }* %27, i64 4
%29 = getelementptr inbounds { double, double }, { double, double }* %28, i32 0, i32 0
%30 = getelementptr inbounds { double, double }, { double, double }* %28, i32 0, i32 1
store double %24, double* %29
store double %26, double* %30
%31 = load { double, double }*, { double, double }** %2
%32 = getelementptr inbounds { double, double }, { double, double }* %31, i64 3
%33 = getelementptr inbounds { double, double }, { double, double }* %32, i32 0, i32 0
%34 = load double, double* %33
%35 = getelementptr inbounds { double, double }, { double, double }* %32, i32 0, i32 1
%36 = load double, double* %35
%37 = getelementptr inbounds { double, double }, { double, double }* %4, i32 0, i32 0
%38 = getelementptr inbounds { double, double }, { double, double }* %4, i32 0, i32 1
store double %34, double* %37
store double %36, double* %38
%39 = load { double, double }*, { double, double }** %2
%40 = getelementptr inbounds { double, double }, { double, double }* %39, i64 6
%41 = getelementptr inbounds { double, double }, { double, double }* %40, i32 0, i32 0
%42 = load double, double* %41
%43 = getelementptr inbounds { double, double }, { double, double }* %40, i32 0, i32 1
%44 = load double, double* %43
%45 = load { double, double }*, { double, double }** %2
%46 = getelementptr inbounds { double, double }, { double, double }* %45, i64 3
%47 = getelementptr inbounds { double, double }, { double, double }* %46, i32 0, i32 0
%48 = getelementptr inbounds { double, double }, { double, double }* %46, i32 0, i32 1
store double %42, double* %47
store double %44, double* %48
%49 = getelementptr inbounds { double, double }, { double, double }* %4, i32 0, i32 0
%50 = load double, double* %49
%51 = getelementptr inbounds { double, double }, { double, double }* %4, i32 0, i32 1
%52 = load double, double* %51
%53 = load { double, double }*, { double, double }** %2
%54 = getelementptr inbounds { double, double }, { double, double }* %53, i64 6
%55 = getelementptr inbounds { double, double }, { double, double }* %54, i32 0, i32 0
%56 = getelementptr inbounds { double, double }, { double, double }* %54, i32 0, i32 1
store double %50, double* %55
store double %52, double* %56
ret void
}

LLVM IR (-O2):
define void @revbin_permute_8({ double, double }* nocapture %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 4, 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 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 }* %0, i64 6, 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
ret void
}