#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ quad(float, float, float, float, float, float, float, float,
                        float, float, float, float);
void box(float a, float b, float c) {
  quad(a, b, c, -a, b, c, -a, b, -c, a, b, -c);
  quad(a, -b, c, a, -b, -c, -a, -b, -c, -a, -b, c);
  quad(a, -b, -c, a, b, -c, -a, b, -c, -a, -b, -c);
  quad(a, -b, c, -a, -b, c, -a, b, c, a, b, c);
  quad(a, -b, -c, a, -b, c, a, b, c, a, b, -c);
  quad(-a, -b, -c, -a, b, -c, -a, b, c, -a, -b, c);
}


x86 assembly (clang, -O0):
<box>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  -0x4(%rbp),%xmm0
movss  -0x8(%rbp),%xmm1
movss  -0xc(%rbp),%xmm2
movss  -0x4(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
movss  -0x8(%rbp),%xmm4
movss  -0xc(%rbp),%xmm5
movss  -0x4(%rbp),%xmm6
movd   %xmm6,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm6
movss  -0x8(%rbp),%xmm7
movss  -0xc(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm11
movss  -0x4(%rbp),%xmm10
movss  -0x8(%rbp),%xmm9
movss  -0xc(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm8
movss  %xmm11,(%rsp)
movss  %xmm10,0x8(%rsp)
movss  %xmm9,0x10(%rsp)
movss  %xmm8,0x18(%rsp)
call   1030 <quad@plt>
movss  -0x4(%rbp),%xmm0
movss  -0x8(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
movss  -0xc(%rbp),%xmm2
movss  -0x4(%rbp),%xmm3
movss  -0x8(%rbp),%xmm4
movd   %xmm4,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm4
movss  -0xc(%rbp),%xmm5
movd   %xmm5,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm5
movss  -0x4(%rbp),%xmm6
movd   %xmm6,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm6
movss  -0x8(%rbp),%xmm7
movd   %xmm7,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm7
movss  -0xc(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm11
movss  -0x4(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm10
movss  -0x8(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm9
movss  -0xc(%rbp),%xmm8
movss  %xmm11,(%rsp)
movss  %xmm10,0x8(%rsp)
movss  %xmm9,0x10(%rsp)
movss  %xmm8,0x18(%rsp)
call   1030 <quad@plt>
movss  -0x4(%rbp),%xmm0
movss  -0x8(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
movss  -0xc(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
movss  -0x4(%rbp),%xmm3
movss  -0x8(%rbp),%xmm4
movss  -0xc(%rbp),%xmm5
movd   %xmm5,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm5
movss  -0x4(%rbp),%xmm6
movd   %xmm6,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm6
movss  -0x8(%rbp),%xmm7
movss  -0xc(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm11
movss  -0x4(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm10
movss  -0x8(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm9
movss  -0xc(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm8
movss  %xmm11,(%rsp)
movss  %xmm10,0x8(%rsp)
movss  %xmm9,0x10(%rsp)
movss  %xmm8,0x18(%rsp)
call   1030 <quad@plt>
movss  -0x4(%rbp),%xmm0
movss  -0x8(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
movss  -0xc(%rbp),%xmm2
movss  -0x4(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
movss  -0x8(%rbp),%xmm4
movd   %xmm4,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm4
movss  -0xc(%rbp),%xmm5
movss  -0x4(%rbp),%xmm6
movd   %xmm6,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm6
movss  -0x8(%rbp),%xmm7
movss  -0xc(%rbp),%xmm11
movss  -0x4(%rbp),%xmm10
movss  -0x8(%rbp),%xmm9
movss  -0xc(%rbp),%xmm8
movss  %xmm11,(%rsp)
movss  %xmm10,0x8(%rsp)
movss  %xmm9,0x10(%rsp)
movss  %xmm8,0x18(%rsp)
call   1030 <quad@plt>
movss  -0x4(%rbp),%xmm0
movss  -0x8(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
movss  -0xc(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
movss  -0x4(%rbp),%xmm3
movss  -0x8(%rbp),%xmm4
movd   %xmm4,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm4
movss  -0xc(%rbp),%xmm5
movss  -0x4(%rbp),%xmm6
movss  -0x8(%rbp),%xmm7
movss  -0xc(%rbp),%xmm11
movss  -0x4(%rbp),%xmm10
movss  -0x8(%rbp),%xmm9
movss  -0xc(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm8
movss  %xmm11,(%rsp)
movss  %xmm10,0x8(%rsp)
movss  %xmm9,0x10(%rsp)
movss  %xmm8,0x18(%rsp)
call   1030 <quad@plt>
movss  -0x4(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  -0x8(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
movss  -0xc(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
movss  -0x4(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
movss  -0x8(%rbp),%xmm4
movss  -0xc(%rbp),%xmm5
movd   %xmm5,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm5
movss  -0x4(%rbp),%xmm6
movd   %xmm6,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm6
movss  -0x8(%rbp),%xmm7
movss  -0xc(%rbp),%xmm11
movss  -0x4(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm10
movss  -0x8(%rbp),%xmm8
movd   %xmm8,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm9
movss  -0xc(%rbp),%xmm8
movss  %xmm11,(%rsp)
movss  %xmm10,0x8(%rsp)
movss  %xmm9,0x10(%rsp)
movss  %xmm8,0x18(%rsp)
call   1030 <quad@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<box>:
sub    $0x88,%rsp
movaps %xmm2,%xmm5
movaps %xmm2,0x70(%rsp)
movaps %xmm1,0x20(%rsp)
movaps %xmm0,0x40(%rsp)
movaps 0xed0(%rip),%xmm4
movaps %xmm0,%xmm3
xorps  %xmm4,%xmm3
movaps %xmm3,0x60(%rsp)
xorps  %xmm4,%xmm2
movaps %xmm2,0x50(%rsp)
movss  %xmm1,0x10(%rsp)
movss  %xmm0,0x8(%rsp)
movss  %xmm2,0x18(%rsp)
movss  %xmm2,(%rsp)
movaps %xmm5,%xmm2
movaps %xmm1,%xmm4
movaps %xmm3,%xmm6
movaps %xmm1,%xmm7
call   1030 <quad@plt>
movaps 0xe8e(%rip),%xmm1
xorps  0x20(%rsp),%xmm1
movaps %xmm1,0x30(%rsp)
movaps 0x70(%rsp),%xmm2
movss  %xmm2,0x18(%rsp)
movss  %xmm1,0x10(%rsp)
movaps 0x60(%rsp),%xmm6
movss  %xmm6,0x8(%rsp)
movaps 0x50(%rsp),%xmm5
movss  %xmm5,(%rsp)
movaps 0x40(%rsp),%xmm0
movaps %xmm0,%xmm3
movaps %xmm1,%xmm4
movaps %xmm1,%xmm7
call   1030 <quad@plt>
movaps 0x50(%rsp),%xmm2
movss  %xmm2,0x18(%rsp)
movaps 0x30(%rsp),%xmm1
movss  %xmm1,0x10(%rsp)
movaps 0x60(%rsp),%xmm6
movss  %xmm6,0x8(%rsp)
movss  %xmm2,(%rsp)
movaps 0x40(%rsp),%xmm0
movaps %xmm0,%xmm3
movaps 0x20(%rsp),%xmm4
movaps %xmm2,%xmm5
movaps %xmm4,%xmm7
call   1030 <quad@plt>
movaps 0x70(%rsp),%xmm2
movss  %xmm2,0x18(%rsp)
movaps 0x20(%rsp),%xmm7
movss  %xmm7,0x10(%rsp)
movaps 0x40(%rsp),%xmm0
movss  %xmm0,0x8(%rsp)
movss  %xmm2,(%rsp)
movaps 0x30(%rsp),%xmm1
movaps 0x60(%rsp),%xmm3
movaps %xmm1,%xmm4
movaps %xmm2,%xmm5
movaps %xmm3,%xmm6
call   1030 <quad@plt>
movaps 0x50(%rsp),%xmm2
movss  %xmm2,0x18(%rsp)
movaps 0x20(%rsp),%xmm7
movss  %xmm7,0x10(%rsp)
movaps 0x40(%rsp),%xmm0
movss  %xmm0,0x8(%rsp)
movaps 0x70(%rsp),%xmm5
movss  %xmm5,(%rsp)
movaps 0x30(%rsp),%xmm1
movaps %xmm0,%xmm3
movaps %xmm0,%xmm6
movaps %xmm1,%xmm4
call   1030 <quad@plt>
movaps 0x70(%rsp),%xmm2
movss  %xmm2,0x18(%rsp)
movaps 0x30(%rsp),%xmm1
movss  %xmm1,0x10(%rsp)
movaps 0x60(%rsp),%xmm0
movss  %xmm0,0x8(%rsp)
movss  %xmm2,(%rsp)
movaps 0x50(%rsp),%xmm2
movaps %xmm0,%xmm3
movaps %xmm0,%xmm6
movaps 0x20(%rsp),%xmm4
movaps %xmm2,%xmm5
movaps %xmm4,%xmm7
call   1030 <quad@plt>
add    $0x88,%rsp
ret

LLVM IR (-O0):
define void @box(float %0, float %1, float %2) {
%4 = alloca float
%5 = alloca float
%6 = alloca float
store float %0, float* %4
store float %1, float* %5
store float %2, float* %6
%7 = load float, float* %4
%8 = load float, float* %5
%9 = load float, float* %6
%10 = load float, float* %4
%11 = fneg float %10
%12 = load float, float* %5
%13 = load float, float* %6
%14 = load float, float* %4
%15 = fneg float %14
%16 = load float, float* %5
%17 = load float, float* %6
%18 = fneg float %17
%19 = load float, float* %4
%20 = load float, float* %5
%21 = load float, float* %6
%22 = fneg float %21
%23 = call i32 @quad(float %7, float %8, float %9, float %11, float %12, float %13, float %15, float %16, float %18, float %19, float %20, float %22)
%24 = load float, float* %4
%25 = load float, float* %5
%26 = fneg float %25
%27 = load float, float* %6
%28 = load float, float* %4
%29 = load float, float* %5
%30 = fneg float %29
%31 = load float, float* %6
%32 = fneg float %31
%33 = load float, float* %4
%34 = fneg float %33
%35 = load float, float* %5
%36 = fneg float %35
%37 = load float, float* %6
%38 = fneg float %37
%39 = load float, float* %4
%40 = fneg float %39
%41 = load float, float* %5
%42 = fneg float %41
%43 = load float, float* %6
%44 = call i32 @quad(float %24, float %26, float %27, float %28, float %30, float %32, float %34, float %36, float %38, float %40, float %42, float %43)
%45 = load float, float* %4
%46 = load float, float* %5
%47 = fneg float %46
%48 = load float, float* %6
%49 = fneg float %48
%50 = load float, float* %4
%51 = load float, float* %5
%52 = load float, float* %6
%53 = fneg float %52
%54 = load float, float* %4
%55 = fneg float %54
%56 = load float, float* %5
%57 = load float, float* %6
%58 = fneg float %57
%59 = load float, float* %4
%60 = fneg float %59
%61 = load float, float* %5
%62 = fneg float %61
%63 = load float, float* %6
%64 = fneg float %63
%65 = call i32 @quad(float %45, float %47, float %49, float %50, float %51, float %53, float %55, float %56, float %58, float %60, float %62, float %64)
%66 = load float, float* %4
%67 = load float, float* %5
%68 = fneg float %67
%69 = load float, float* %6
%70 = load float, float* %4
%71 = fneg float %70
%72 = load float, float* %5
%73 = fneg float %72
%74 = load float, float* %6
%75 = load float, float* %4
%76 = fneg float %75
%77 = load float, float* %5
%78 = load float, float* %6
%79 = load float, float* %4
%80 = load float, float* %5
%81 = load float, float* %6
%82 = call i32 @quad(float %66, float %68, float %69, float %71, float %73, float %74, float %76, float %77, float %78, float %79, float %80, float %81)
%83 = load float, float* %4
%84 = load float, float* %5
%85 = fneg float %84
%86 = load float, float* %6
%87 = fneg float %86
%88 = load float, float* %4
%89 = load float, float* %5
%90 = fneg float %89
%91 = load float, float* %6
%92 = load float, float* %4
%93 = load float, float* %5
%94 = load float, float* %6
%95 = load float, float* %4
%96 = load float, float* %5
%97 = load float, float* %6
%98 = fneg float %97
%99 = call i32 @quad(float %83, float %85, float %87, float %88, float %90, float %91, float %92, float %93, float %94, float %95, float %96, float %98)
%100 = load float, float* %4
%101 = fneg float %100
%102 = load float, float* %5
%103 = fneg float %102
%104 = load float, float* %6
%105 = fneg float %104
%106 = load float, float* %4
%107 = fneg float %106
%108 = load float, float* %5
%109 = load float, float* %6
%110 = fneg float %109
%111 = load float, float* %4
%112 = fneg float %111
%113 = load float, float* %5
%114 = load float, float* %6
%115 = load float, float* %4
%116 = fneg float %115
%117 = load float, float* %5
%118 = fneg float %117
%119 = load float, float* %6
%120 = call i32 @quad(float %101, float %103, float %105, float %107, float %108, float %110, float %112, float %113, float %114, float %116, float %118, float %119)
ret void
}

LLVM IR (-O2):
define void @box(float %0, float %1, float %2) {
%4 = fneg float %0
%5 = fneg float %2
%6 = tail call i32 @quad(float %0, float %1, float %2, float %4, float %1, float %2, float %4, float %1, float %5, float %0, float %1, float %5)
%7 = fneg float %1
%8 = tail call i32 @quad(float %0, float %7, float %2, float %0, float %7, float %5, float %4, float %7, float %5, float %4, float %7, float %2)
%9 = tail call i32 @quad(float %0, float %7, float %5, float %0, float %1, float %5, float %4, float %1, float %5, float %4, float %7, float %5)
%10 = tail call i32 @quad(float %0, float %7, float %2, float %4, float %7, float %2, float %4, float %1, float %2, float %0, float %1, float %2)
%11 = tail call i32 @quad(float %0, float %7, float %5, float %0, float %7, float %2, float %0, float %1, float %2, float %0, float %1, float %5)
%12 = tail call i32 @quad(float %4, float %7, float %5, float %4, float %1, float %5, float %4, float %1, float %2, float %4, float %7, float %2)
ret void
}