void bar(void) {
  foo("", __builtin_conjl(({
        __complex__ long double r;
        __real__ r = 3.0;
        __imag__ r = -4.0;
        r;
      })),
      ({
        __complex__ long double s;
        __real__ s = 3.0;
        __imag__ s = 4.0;
        s;
      }));
}


x86 assembly (clang, -O0):
<bar>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
flds   0xedf(%rip)
fld    %st(0)
fstpt  -0x20(%rbp)
flds   0xed8(%rip)
fstpt  -0x10(%rbp)
fldt   -0x20(%rbp)
fldt   -0x10(%rbp)
fxch   %st(1)
fstpt  -0x40(%rbp)
fstpt  -0x30(%rbp)
fldt   -0x40(%rbp)
fldt   -0x30(%rbp)
fchs
fxch   %st(2)
fstpt  -0x60(%rbp)
flds   0xeb8(%rip)
fstpt  -0x50(%rbp)
fldt   -0x60(%rbp)
fldt   -0x50(%rbp)
fxch   %st(1)
fstpt  -0x80(%rbp)
fstpt  -0x70(%rbp)
fldt   -0x80(%rbp)
fldt   -0x70(%rbp)
fxch   %st(2)
fstpt  -0xa0(%rbp)
fxch   %st(2)
fstpt  -0x90(%rbp)
fxch   %st(1)
fstpt  -0xc0(%rbp)
fstpt  -0xb0(%rbp)
lea    0xe80(%rip),%rdi
lea    -0xa0(%rbp),%rcx
lea    -0xc0(%rbp),%rax
mov    (%rcx),%rdx
mov    %rdx,(%rsp)
mov    0x8(%rcx),%rdx
mov    %rdx,0x8(%rsp)
mov    0x10(%rcx),%rdx
mov    %rdx,0x10(%rsp)
mov    0x18(%rcx),%rcx
mov    %rcx,0x18(%rsp)
mov    (%rax),%rcx
mov    %rcx,0x20(%rsp)
mov    0x8(%rax),%rcx
mov    %rcx,0x28(%rsp)
mov    0x10(%rax),%rcx
mov    %rcx,0x30(%rsp)
mov    0x18(%rax),%rax
mov    %rax,0x38(%rsp)
mov    $0x0,%al
call   1030 <foo@plt>
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bar>:
sub    $0x88,%rsp
flds   0xee3(%rip)
fld    %st(0)
fstpt  0x60(%rsp)
flds   0xedb(%rip)
fld    %st(0)
fstpt  0x70(%rsp)
fxch   %st(1)
fstpt  0x40(%rsp)
fstpt  0x50(%rsp)
movaps 0x40(%rsp),%xmm0
movaps 0x50(%rsp),%xmm1
movaps %xmm1,0x30(%rsp)
movaps %xmm0,0x20(%rsp)
movaps 0x60(%rsp),%xmm0
movaps 0x70(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
lea    0xea1(%rip),%rdi
xor    %eax,%eax
call   1030 <foo@plt>
add    $0x88,%rsp
ret

LLVM IR (-O0):
@.str = [1 x i8] zeroinitializer
define void @bar() {
%1 = alloca { x86_fp80, x86_fp80 }
%2 = alloca { x86_fp80, x86_fp80 }
%3 = alloca { x86_fp80, x86_fp80 }
%4 = alloca { x86_fp80, x86_fp80 }
%5 = alloca { x86_fp80, x86_fp80 }
%6 = alloca { x86_fp80, x86_fp80 }
%7 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %1, i32 0, i32 0
store x86_fp80 0xK4000C000000000000000, x86_fp80* %7
%8 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %1, i32 0, i32 1
store x86_fp80 0xKC0018000000000000000, x86_fp80* %8
%9 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %1, i32 0, i32 0
%10 = load x86_fp80, x86_fp80* %9
%11 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %1, i32 0, i32 1
%12 = load x86_fp80, x86_fp80* %11
%13 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %2, i32 0, i32 0
%14 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %2, i32 0, i32 1
store x86_fp80 %10, x86_fp80* %13
store x86_fp80 %12, x86_fp80* %14
%15 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %2, i32 0, i32 0
%16 = load x86_fp80, x86_fp80* %15
%17 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %2, i32 0, i32 1
%18 = load x86_fp80, x86_fp80* %17
%19 = fneg x86_fp80 %18
%20 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i32 0, i32 0
store x86_fp80 0xK4000C000000000000000, x86_fp80* %20
%21 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i32 0, i32 1
store x86_fp80 0xK40018000000000000000, x86_fp80* %21
%22 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i32 0, i32 0
%23 = load x86_fp80, x86_fp80* %22
%24 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i32 0, i32 1
%25 = load x86_fp80, x86_fp80* %24
%26 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%27 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
store x86_fp80 %23, x86_fp80* %26
store x86_fp80 %25, x86_fp80* %27
%28 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%29 = load x86_fp80, x86_fp80* %28
%30 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
%31 = load x86_fp80, x86_fp80* %30
%32 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %5, i32 0, i32 0
%33 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %5, i32 0, i32 1
store x86_fp80 %16, x86_fp80* %32
store x86_fp80 %19, x86_fp80* %33
%34 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %6, i32 0, i32 0
%35 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %6, i32 0, i32 1
store x86_fp80 %29, x86_fp80* %34
store x86_fp80 %31, x86_fp80* %35
%36 = call i32 (i8*, { x86_fp80, x86_fp80 }*, { x86_fp80, x86_fp80 }*, ...) bitcast (i32 (...)* @foo to i32 (i8*, { x86_fp80, x86_fp80 }*, { x86_fp80, x86_fp80 }*, ...)*)(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), { x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %5, { x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %6)
ret void
}

LLVM IR (-O2):
@.str = [1 x i8] zeroinitializer
define void @bar() {
%1 = alloca { x86_fp80, x86_fp80 }
%2 = alloca { x86_fp80, x86_fp80 }
%3 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %1, i64 0, i32 0
%4 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %1, i64 0, i32 1
store x86_fp80 0xK4000C000000000000000, x86_fp80* %3
store x86_fp80 0xK40018000000000000000, x86_fp80* %4
%5 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %2, i64 0, i32 0
%6 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %2, i64 0, i32 1
store x86_fp80 0xK4000C000000000000000, x86_fp80* %5
store x86_fp80 0xK40018000000000000000, x86_fp80* %6
%7 = tail call i32 (i8*, { x86_fp80, x86_fp80 }*, { x86_fp80, x86_fp80 }*, ...) bitcast (i32 (...)* @foo to i32 (i8*, { x86_fp80, x86_fp80 }*, { x86_fp80, x86_fp80 }*, ...)*)(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), { x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %1, { x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %2)
ret void
}