#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 */
typedef double GLfloat;
typedef int /*<<< orphan*/ GLUquadricObj;

/* Variables and functions */
int /*<<< orphan*/ GLU_FILL;
int /*<<< orphan*/ GLU_SMOOTH;
int /*<<< orphan*/ GL_BLEND;
int /*<<< orphan*/ GL_DIFFUSE;
int /*<<< orphan*/ GL_FRONT;
int /*<<< orphan*/ GL_ONE;
int /*<<< orphan*/ GL_SHININESS;
int /*<<< orphan*/ GL_SPECULAR;
int /*<<< orphan*/ GL_SRC_ALPHA;
int /*<<< orphan*/ glBlendFunc(int /*<<< orphan*/, int /*<<< orphan*/);
int /*<<< orphan*/ glDisable(int /*<<< orphan*/);
int /*<<< orphan*/ glEnable(int /*<<< orphan*/);
int /*<<< orphan*/ glMaterialf(int /*<<< orphan*/, int /*<<< orphan*/,
                               int /*<<< orphan*/);
int /*<<< orphan*/ glMaterialfv(int /*<<< orphan*/, int /*<<< orphan*/,
                                double *);
int /*<<< orphan*/ glPopMatrix();
int /*<<< orphan*/ glPushMatrix();
int /*<<< orphan*/ glRotated(double, double, double, double);
int /*<<< orphan*/ glRotatef(int, int /*<<< orphan*/, int /*<<< orphan*/, int);
int /*<<< orphan*/ glScaled(double, double, double);
int /*<<< orphan*/ glTranslated(double, double, double);
int /*<<< orphan*/ gluCylinder(int /*<<< orphan*/ *, double, double, double,
                               int, int);
int /*<<< orphan*/ *gluNewQuadric();
int /*<<< orphan*/ gluQuadricDrawStyle(int /*<<< orphan*/ *,
                                       int /*<<< orphan*/);
int /*<<< orphan*/ gluQuadricNormals(int /*<<< orphan*/ *, int /*<<< orphan*/);
int /*<<< orphan*/ glutSolidCube(double);
void myDrawSofa(void) {
  GLUquadricObj *qobj;
  GLfloat diffSofa[] = {0.83, 0.44, 0.03, 1.0};
  GLfloat spec[] = {0.0, 0.0, 0.0, 1.0};
  qobj = gluNewQuadric();
  gluQuadricDrawStyle(qobj, GLU_FILL);
  gluQuadricNormals(qobj, GLU_SMOOTH);
  glMaterialfv(GL_FRONT, GL_DIFFUSE, diffSofa);
  glMaterialfv(GL_FRONT, GL_SPECULAR, spec);
  glMaterialf(GL_FRONT, GL_SHININESS, 0);
  glRotated(90.0, 1.0, 0.0, 0.0);
  glPushMatrix();
  glPushMatrix();
  glScaled(7.0, 1.2, 1.5);
  glutSolidCube(3.0);
  glPopMatrix();
  glPushMatrix();
  glTranslated(12.0, -1.0, -1.1);
  glScaled(1.2, 1.9, 2.5);
  glutSolidCube(3.0);
  glPopMatrix();
  glPushMatrix();
  glTranslated(-12.0, -1.0, -1.1);
  glScaled(1.2, 1.9, 2.5);
  glutSolidCube(3.0);
  glPopMatrix();
  glPushMatrix();
  glTranslated(0.0, -2.6, -4.0);
  glScaled(7.0, 0.5, 3.5);
  glutSolidCube(3.0);
  glPopMatrix();
  glPushMatrix();
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  glTranslated(-12.0, 0.0, -6.3);
  glRotatef(-90, 0, 0, 1);
  gluCylinder(qobj, 1.00, 0.80, 1.4, 30, 30);
  glDisable(GL_BLEND);
  glPopMatrix();
  glPopMatrix();
}


x86 assembly (clang, -O0):
<myDrawSofa>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0xe91(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0xe8e(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0xe8b(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xe88(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    0xe85(%rip),%rax
mov    %rax,-0x50(%rbp)
mov    0xe82(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    0xe7f(%rip),%rax
mov    %rax,-0x40(%rbp)
mov    0xe7c(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    $0x0,%al
call   1050 <gluNewQuadric@plt>
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
mov    0x2d32(%rip),%rax
mov    (%rax),%esi
call   10a0 <gluQuadricDrawStyle@plt>
mov    -0x8(%rbp),%rdi
mov    0x2d40(%rip),%rax
mov    (%rax),%esi
call   10d0 <gluQuadricNormals@plt>
mov    0x2d42(%rip),%rax
mov    (%rax),%edi
mov    0x2d01(%rip),%rax
mov    (%rax),%esi
lea    -0x30(%rbp),%rdx
call   1100 <glMaterialfv@plt>
mov    0x2d27(%rip),%rax
mov    (%rax),%edi
mov    0x2d2e(%rip),%rax
mov    (%rax),%esi
lea    -0x50(%rbp),%rdx
call   1100 <glMaterialfv@plt>
mov    0x2d0c(%rip),%rax
mov    (%rax),%edi
mov    0x2d1b(%rip),%rax
mov    (%rax),%esi
xor    %edx,%edx
call   1040 <glMaterialf@plt>
movsd  0xdaa(%rip),%xmm0
movsd  0xd12(%rip),%xmm1
xorps  %xmm3,%xmm3
movaps %xmm3,%xmm2
call   1110 <glRotated@plt>
mov    $0x0,%al
call   10b0 <glPushMatrix@plt>
mov    $0x0,%al
call   10b0 <glPushMatrix@plt>
movsd  0xd21(%rip),%xmm0
movsd  0xd41(%rip),%xmm1
movsd  0xd69(%rip),%xmm2
call   1090 <glScaled@plt>
movsd  0xcfc(%rip),%xmm0
call   1070 <glutSolidCube@plt>
mov    $0x0,%al
call   1080 <glPopMatrix@plt>
mov    $0x0,%al
call   10b0 <glPushMatrix@plt>
movsd  0xd39(%rip),%xmm0
movsd  0xd21(%rip),%xmm1
movsd  0xd21(%rip),%xmm2
call   10e0 <glTranslated@plt>
movsd  0xcf4(%rip),%xmm0
movsd  0xcf4(%rip),%xmm1
movsd  0xcf4(%rip),%xmm2
call   1090 <glScaled@plt>
movsd  0xca7(%rip),%xmm0
call   1070 <glutSolidCube@plt>
mov    $0x0,%al
call   1080 <glPopMatrix@plt>
mov    $0x0,%al
call   10b0 <glPushMatrix@plt>
movsd  0xc7c(%rip),%xmm0
movsd  0xccc(%rip),%xmm1
movsd  0xccc(%rip),%xmm2
call   10e0 <glTranslated@plt>
movsd  0xc9f(%rip),%xmm0
movsd  0xc9f(%rip),%xmm1
movsd  0xc9f(%rip),%xmm2
call   1090 <glScaled@plt>
movsd  0xc52(%rip),%xmm0
call   1070 <glutSolidCube@plt>
mov    $0x0,%al
call   1080 <glPopMatrix@plt>
mov    $0x0,%al
call   10b0 <glPushMatrix@plt>
xorps  %xmm0,%xmm0
movsd  0xc54(%rip),%xmm1
movsd  0xc54(%rip),%xmm2
call   10e0 <glTranslated@plt>
movsd  0xc27(%rip),%xmm0
movsd  0xc27(%rip),%xmm1
movsd  0xc27(%rip),%xmm2
call   1090 <glScaled@plt>
movsd  0xc02(%rip),%xmm0
call   1070 <glutSolidCube@plt>
mov    $0x0,%al
call   1080 <glPopMatrix@plt>
mov    $0x0,%al
call   10b0 <glPushMatrix@plt>
mov    0x2b90(%rip),%rax
mov    (%rax),%edi
call   1060 <glEnable@plt>
mov    0x2b62(%rip),%rax
mov    (%rax),%edi
mov    0x2b61(%rip),%rax
mov    (%rax),%esi
call   1030 <glBlendFunc@plt>
movsd  0xbb2(%rip),%xmm0
xorps  %xmm1,%xmm1
movsd  0xbaf(%rip),%xmm2
call   10e0 <glTranslated@plt>
mov    $0xffffffa6,%edi
xor    %edx,%edx
mov    $0x1,%ecx
mov    %edx,%esi
call   1120 <glRotatef@plt>
mov    -0x8(%rbp),%rdi
movsd  0xb6b(%rip),%xmm0
movsd  0xb6b(%rip),%xmm1
movsd  0xb6b(%rip),%xmm2
mov    $0x1e,%edx
mov    %edx,%esi
call   10c0 <gluCylinder@plt>
mov    0x2b18(%rip),%rax
mov    (%rax),%edi
call   10f0 <glDisable@plt>
mov    $0x0,%al
call   1080 <glPopMatrix@plt>
mov    $0x0,%al
call   1080 <glPopMatrix@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<myDrawSofa>:
push   %r14
push   %rbx
sub    $0x48,%rsp
movaps 0xea2(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xe86(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xeaa(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xe8e(%rip),%xmm0
movaps %xmm0,(%rsp)
xor    %eax,%eax
call   1050 <gluNewQuadric@plt>
mov    %rax,%r14
mov    0x2d61(%rip),%rax
mov    (%rax),%esi
mov    %r14,%rdi
call   10a0 <gluQuadricDrawStyle@plt>
mov    0x2d70(%rip),%rax
mov    (%rax),%esi
mov    %r14,%rdi
call   10d0 <gluQuadricNormals@plt>
mov    0x2d6f(%rip),%rbx
mov    (%rbx),%edi
mov    0x2d2e(%rip),%rax
mov    (%rax),%esi
lea    0x20(%rsp),%rdx
call   1100 <glMaterialfv@plt>
mov    (%rbx),%edi
mov    0x2d61(%rip),%rax
mov    (%rax),%esi
mov    %rsp,%rdx
call   1100 <glMaterialfv@plt>
mov    (%rbx),%edi
mov    0x2d56(%rip),%rax
mov    (%rax),%esi
xor    %edx,%edx
call   1040 <glMaterialf@plt>
movsd  0xd55(%rip),%xmm0
movsd  0xd55(%rip),%xmm1
xorps  %xmm2,%xmm2
xorps  %xmm3,%xmm3
call   1110 <glRotated@plt>
xor    %eax,%eax
call   10b0 <glPushMatrix@plt>
xor    %eax,%eax
call   10b0 <glPushMatrix@plt>
movsd  0xd3c(%rip),%xmm0
movsd  0xd3c(%rip),%xmm1
movsd  0xd3c(%rip),%xmm2
call   1090 <glScaled@plt>
movsd  0xd37(%rip),%xmm0
call   1070 <glutSolidCube@plt>
xor    %eax,%eax
call   1080 <glPopMatrix@plt>
xor    %eax,%eax
call   10b0 <glPushMatrix@plt>
movsd  0xd24(%rip),%xmm0
movsd  0xd24(%rip),%xmm1
movsd  0xd24(%rip),%xmm2
call   10e0 <glTranslated@plt>
movsd  0xd1f(%rip),%xmm1
movsd  0xd1f(%rip),%xmm2
movsd  0xcdf(%rip),%xmm0
call   1090 <glScaled@plt>
movsd  0xce2(%rip),%xmm0
call   1070 <glutSolidCube@plt>
xor    %eax,%eax
call   1080 <glPopMatrix@plt>
xor    %eax,%eax
call   10b0 <glPushMatrix@plt>
movsd  0xcf7(%rip),%xmm0
movsd  0xccf(%rip),%xmm1
movsd  0xccf(%rip),%xmm2
call   10e0 <glTranslated@plt>
movsd  0xc9a(%rip),%xmm0
movsd  0xcc2(%rip),%xmm1
movsd  0xcc2(%rip),%xmm2
call   1090 <glScaled@plt>
movsd  0xc8d(%rip),%xmm0
call   1070 <glutSolidCube@plt>
xor    %eax,%eax
call   1080 <glPopMatrix@plt>
xor    %eax,%eax
call   10b0 <glPushMatrix@plt>
movsd  0xcaa(%rip),%xmm1
movsd  0xcaa(%rip),%xmm2
xorps  %xmm0,%xmm0
call   10e0 <glTranslated@plt>
movsd  0xca2(%rip),%xmm1
movsd  0xca2(%rip),%xmm2
movsd  0xc32(%rip),%xmm0
call   1090 <glScaled@plt>
movsd  0xc3d(%rip),%xmm0
call   1070 <glutSolidCube@plt>
xor    %eax,%eax
call   1080 <glPopMatrix@plt>
xor    %eax,%eax
call   10b0 <glPushMatrix@plt>
mov    0x2bcb(%rip),%rbx
mov    (%rbx),%edi
call   1060 <glEnable@plt>
mov    0x2b9d(%rip),%rax
mov    (%rax),%edi
mov    0x2b9c(%rip),%rax
mov    (%rax),%esi
call   1030 <glBlendFunc@plt>
movsd  0xc55(%rip),%xmm2
xorps  %xmm1,%xmm1
movsd  0xc22(%rip),%xmm0
call   10e0 <glTranslated@plt>
mov    $0xffffffa6,%edi
xor    %esi,%esi
xor    %edx,%edx
mov    $0x1,%ecx
call   1120 <glRotatef@plt>
movsd  0xc32(%rip),%xmm1
movsd  0xc32(%rip),%xmm2
mov    %r14,%rdi
movsd  0xb9f(%rip),%xmm0
mov    $0x1e,%esi
mov    $0x1e,%edx
call   10c0 <gluCylinder@plt>
mov    (%rbx),%edi
call   10f0 <glDisable@plt>
xor    %eax,%eax
call   1080 <glPopMatrix@plt>
xor    %eax,%eax
call   1080 <glPopMatrix@plt>
add    $0x48,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@__const.myDrawSofa.diffSofa = [4 x double] [double 8.300000e-01, double 4.400000e-01, double 3.000000e-02, double 1.000000e+00]
@__const.myDrawSofa.spec = [4 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00]
@GLU_FILL = global i32 0
@GLU_SMOOTH = global i32 0
@GL_FRONT = global i32 0
@GL_DIFFUSE = global i32 0
@GL_SPECULAR = global i32 0
@GL_SHININESS = global i32 0
@GL_BLEND = global i32 0
@GL_SRC_ALPHA = global i32 0
@GL_ONE = global i32 0
define void @myDrawSofa() {
%1 = alloca i32*
%2 = alloca [4 x double]
%3 = alloca [4 x double]
%4 = bitcast [4 x double]* %2 to i8*
%5 = bitcast [4 x double]* %3 to i8*
%6 = call i32* (...) @gluNewQuadric()
store i32* %6, i32** %1
%7 = load i32*, i32** %1
%8 = load i32, i32* @GLU_FILL
%9 = call i32 @gluQuadricDrawStyle(i32* %7, i32 %8)
%10 = load i32*, i32** %1
%11 = load i32, i32* @GLU_SMOOTH
%12 = call i32 @gluQuadricNormals(i32* %10, i32 %11)
%13 = load i32, i32* @GL_FRONT
%14 = load i32, i32* @GL_DIFFUSE
%15 = getelementptr inbounds [4 x double], [4 x double]* %2, i64 0, i64 0
%16 = call i32 @glMaterialfv(i32 %13, i32 %14, double* %15)
%17 = load i32, i32* @GL_FRONT
%18 = load i32, i32* @GL_SPECULAR
%19 = getelementptr inbounds [4 x double], [4 x double]* %3, i64 0, i64 0
%20 = call i32 @glMaterialfv(i32 %17, i32 %18, double* %19)
%21 = load i32, i32* @GL_FRONT
%22 = load i32, i32* @GL_SHININESS
%23 = call i32 @glMaterialf(i32 %21, i32 %22, i32 0)
%24 = call i32 @glRotated(double 9.000000e+01, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00)
%25 = call i32 (...) @glPushMatrix()
%26 = call i32 (...) @glPushMatrix()
%27 = call i32 @glScaled(double 7.000000e+00, double 1.200000e+00, double 1.500000e+00)
%28 = call i32 @glutSolidCube(double 3.000000e+00)
%29 = call i32 (...) @glPopMatrix()
%30 = call i32 (...) @glPushMatrix()
%31 = call i32 @glTranslated(double 1.200000e+01, double -1.000000e+00, double -1.100000e+00)
%32 = call i32 @glScaled(double 1.200000e+00, double 1.900000e+00, double 2.500000e+00)
%33 = call i32 @glutSolidCube(double 3.000000e+00)
%34 = call i32 (...) @glPopMatrix()
%35 = call i32 (...) @glPushMatrix()
%36 = call i32 @glTranslated(double -1.200000e+01, double -1.000000e+00, double -1.100000e+00)
%37 = call i32 @glScaled(double 1.200000e+00, double 1.900000e+00, double 2.500000e+00)
%38 = call i32 @glutSolidCube(double 3.000000e+00)
%39 = call i32 (...) @glPopMatrix()
%40 = call i32 (...) @glPushMatrix()
%41 = call i32 @glTranslated(double 0.000000e+00, double -2.600000e+00, double -4.000000e+00)
%42 = call i32 @glScaled(double 7.000000e+00, double 5.000000e-01, double 3.500000e+00)
%43 = call i32 @glutSolidCube(double 3.000000e+00)
%44 = call i32 (...) @glPopMatrix()
%45 = call i32 (...) @glPushMatrix()
%46 = load i32, i32* @GL_BLEND
%47 = call i32 @glEnable(i32 %46)
%48 = load i32, i32* @GL_SRC_ALPHA
%49 = load i32, i32* @GL_ONE
%50 = call i32 @glBlendFunc(i32 %48, i32 %49)
%51 = call i32 @glTranslated(double -1.200000e+01, double 0.000000e+00, double -6.300000e+00)
%52 = call i32 @glRotatef(i32 -90, i32 0, i32 0, i32 1)
%53 = load i32*, i32** %1
%54 = call i32 @gluCylinder(i32* %53, double 1.000000e+00, double 8.000000e-01, double 1.400000e+00, i32 30, i32 30)
%55 = load i32, i32* @GL_BLEND
%56 = call i32 @glDisable(i32 %55)
%57 = call i32 (...) @glPopMatrix()
%58 = call i32 (...) @glPopMatrix()
ret void
}

LLVM IR (-O2):
@__const.myDrawSofa.diffSofa = [4 x double] [double 8.300000e-01, double 4.400000e-01, double 3.000000e-02, double 1.000000e+00]
@__const.myDrawSofa.spec = [4 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00]
@GLU_FILL = global i32 0
@GLU_SMOOTH = global i32 0
@GL_FRONT = global i32 0
@GL_DIFFUSE = global i32 0
@GL_SPECULAR = global i32 0
@GL_SHININESS = global i32 0
@GL_BLEND = global i32 0
@GL_SRC_ALPHA = global i32 0
@GL_ONE = global i32 0
define void @myDrawSofa() {
%1 = alloca [4 x double]
%2 = alloca [4 x double]
%3 = bitcast [4 x double]* %1 to i8*
%4 = bitcast [4 x double]* %2 to i8*
%5 = tail call i32* (...) @gluNewQuadric()
%6 = load i32, i32* @GLU_FILL
%7 = tail call i32 @gluQuadricDrawStyle(i32* %5, i32 %6)
%8 = load i32, i32* @GLU_SMOOTH
%9 = tail call i32 @gluQuadricNormals(i32* %5, i32 %8)
%10 = load i32, i32* @GL_FRONT
%11 = load i32, i32* @GL_DIFFUSE
%12 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 0, i64 0
%13 = call i32 @glMaterialfv(i32 %10, i32 %11, double* %12)
%14 = load i32, i32* @GL_FRONT
%15 = load i32, i32* @GL_SPECULAR
%16 = getelementptr inbounds [4 x double], [4 x double]* %2, i64 0, i64 0
%17 = call i32 @glMaterialfv(i32 %14, i32 %15, double* %16)
%18 = load i32, i32* @GL_FRONT
%19 = load i32, i32* @GL_SHININESS
%20 = call i32 @glMaterialf(i32 %18, i32 %19, i32 0)
%21 = call i32 @glRotated(double 9.000000e+01, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00)
%22 = call i32 (...) @glPushMatrix()
%23 = call i32 (...) @glPushMatrix()
%24 = call i32 @glScaled(double 7.000000e+00, double 1.200000e+00, double 1.500000e+00)
%25 = call i32 @glutSolidCube(double 3.000000e+00)
%26 = call i32 (...) @glPopMatrix()
%27 = call i32 (...) @glPushMatrix()
%28 = call i32 @glTranslated(double 1.200000e+01, double -1.000000e+00, double -1.100000e+00)
%29 = call i32 @glScaled(double 1.200000e+00, double 1.900000e+00, double 2.500000e+00)
%30 = call i32 @glutSolidCube(double 3.000000e+00)
%31 = call i32 (...) @glPopMatrix()
%32 = call i32 (...) @glPushMatrix()
%33 = call i32 @glTranslated(double -1.200000e+01, double -1.000000e+00, double -1.100000e+00)
%34 = call i32 @glScaled(double 1.200000e+00, double 1.900000e+00, double 2.500000e+00)
%35 = call i32 @glutSolidCube(double 3.000000e+00)
%36 = call i32 (...) @glPopMatrix()
%37 = call i32 (...) @glPushMatrix()
%38 = call i32 @glTranslated(double 0.000000e+00, double -2.600000e+00, double -4.000000e+00)
%39 = call i32 @glScaled(double 7.000000e+00, double 5.000000e-01, double 3.500000e+00)
%40 = call i32 @glutSolidCube(double 3.000000e+00)
%41 = call i32 (...) @glPopMatrix()
%42 = call i32 (...) @glPushMatrix()
%43 = load i32, i32* @GL_BLEND
%44 = call i32 @glEnable(i32 %43)
%45 = load i32, i32* @GL_SRC_ALPHA
%46 = load i32, i32* @GL_ONE
%47 = call i32 @glBlendFunc(i32 %45, i32 %46)
%48 = call i32 @glTranslated(double -1.200000e+01, double 0.000000e+00, double -6.300000e+00)
%49 = call i32 @glRotatef(i32 -90, i32 0, i32 0, i32 1)
%50 = call i32 @gluCylinder(i32* %5, double 1.000000e+00, double 8.000000e-01, double 1.400000e+00, i32 30, i32 30)
%51 = load i32, i32* @GL_BLEND
%52 = call i32 @glDisable(i32 %51)
%53 = call i32 (...) @glPopMatrix()
%54 = call i32 (...) @glPopMatrix()
ret void
}