#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*/ drawChair(int, double, double, double, double, double, int);
int /*<<< orphan*/ drawTable(double, double, double, double, double);
int /*<<< orphan*/ glColor3f(int, int, int);
int /*<<< orphan*/ glPopMatrix();
int /*<<< orphan*/ glPushMatrix();
int /*<<< orphan*/ glRotatef(int, int, int, int);
int /*<<< orphan*/ glTranslatef(double, double, int);
int /*<<< orphan*/ glutSolidCube(double);
int /*<<< orphan*/ glutWireTeapot(double);
void drawScene(float scale, int shadow) {
  if (shadow)
    glColor3f(0., 0., 0.);
  glPushMatrix();
  glTranslatef(0.5 * scale, 0.075 * scale, 0.);
  glutSolidCube(0.1 * scale);
  glPopMatrix();
  glPushMatrix();
  glTranslatef(0., 0.05 * scale + 0.05 * scale, 0.);
  glutWireTeapot(0.1 * scale);
  glPopMatrix();
  glPushMatrix();
  glTranslatef(-0.5 * scale, 0.075 * scale, 0. * scale);
  glutSolidCube(0.1 * scale);
  glTranslatef(-0.01 * scale, 0.1 * scale, 0. * scale);
  glutSolidCube(0.1 * scale);
  glTranslatef(+0.03 * scale, 0.1 * scale, 0.);
  glutSolidCube(0.1 * scale);
  glPopMatrix();
  glPushMatrix();
  drawChair(0., -0.30 * scale, 0.75 * scale, 0.75 * scale, 0.4 * scale,
            0.05 * scale, shadow);
  glPopMatrix();
  glPushMatrix();
  glRotatef(180., 0., 1., 0.);
  drawChair(0., -0.30 * scale, 0.75 * scale, 0.75 * scale, 0.4 * scale,
            0.05 * scale, shadow);
  glPopMatrix();
  glPushMatrix();
  glRotatef(90., 0., 1., 0.);
  drawChair(0., -0.30 * scale, 0.75 * scale, 0.75 * scale, 0.4 * scale,
            0.05 * scale, shadow);
  glPopMatrix();
  glPushMatrix();
  glRotatef(-90., 0., 1., 0.);
  drawChair(0., -0.30 * scale, 0.75 * scale, 0.75 * scale, 0.4 * scale,
            0.05 * scale, shadow);
  glPopMatrix();
  glPushMatrix();
  drawTable(0.05 * scale, 1.5 * scale, 1.0 * scale, 0.1 * scale, 0.8 * scale);
  glPopMatrix();
}


x86 assembly (clang, -O0):
<drawScene>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movss  %xmm0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
cmpl   $0x0,-0x8(%rbp)
je     11b5 <drawScene+0x25>
xor    %edx,%edx
mov    %edx,%edi
mov    %edx,%esi
call   1060 <glColor3f@plt>
mov    $0x0,%al
call   1070 <glPushMatrix@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe93(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xe6e(%rip),%xmm1
mulsd  %xmm2,%xmm1
xor    %edi,%edi
call   1080 <glTranslatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe0a(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <glutSolidCube@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    $0x0,%al
call   1070 <glPushMatrix@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xdf1(%rip),%xmm0
mulsd  %xmm2,%xmm0
movsd  0xde5(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
xor    %edi,%edi
call   1080 <glTranslatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdaa(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1090 <glutWireTeapot@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    $0x0,%al
call   1070 <glPushMatrix@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdd2(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xdb5(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
xorps  %xmm2,%xmm2
mulsd  %xmm3,%xmm2
cvttsd2si %xmm2,%edi
call   1080 <glTranslatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd3f(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <glutSolidCube@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd65(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xd10(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
xorps  %xmm2,%xmm2
mulsd  %xmm3,%xmm2
cvttsd2si %xmm2,%edi
call   1080 <glTranslatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xce2(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <glutSolidCube@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd00(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xcb3(%rip),%xmm1
mulsd  %xmm2,%xmm1
xor    %edi,%edi
call   1080 <glTranslatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc97(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <glutSolidCube@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    $0x0,%al
call   1070 <glPushMatrix@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc9f(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xc82(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xc6d(%rip),%xmm2
mulsd  %xmm3,%xmm2
movss  -0x4(%rbp),%xmm3
cvtss2sd %xmm3,%xmm4
movsd  0xc50(%rip),%xmm3
mulsd  %xmm4,%xmm3
movss  -0x4(%rbp),%xmm4
cvtss2sd %xmm4,%xmm5
movsd  0xc33(%rip),%xmm4
mulsd  %xmm5,%xmm4
mov    -0x8(%rbp),%esi
xor    %edi,%edi
call   1030 <drawChair@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    $0x0,%al
call   1070 <glPushMatrix@plt>
mov    $0xb4,%edi
xor    %ecx,%ecx
mov    $0x1,%edx
mov    %ecx,%esi
call   10b0 <glRotatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc0b(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xbee(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xbd9(%rip),%xmm2
mulsd  %xmm3,%xmm2
movss  -0x4(%rbp),%xmm3
cvtss2sd %xmm3,%xmm4
movsd  0xbbc(%rip),%xmm3
mulsd  %xmm4,%xmm3
movss  -0x4(%rbp),%xmm4
cvtss2sd %xmm4,%xmm5
movsd  0xb9f(%rip),%xmm4
mulsd  %xmm5,%xmm4
mov    -0x8(%rbp),%esi
xor    %edi,%edi
call   1030 <drawChair@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    $0x0,%al
call   1070 <glPushMatrix@plt>
mov    $0x5a,%edi
xor    %ecx,%ecx
mov    $0x1,%edx
mov    %ecx,%esi
call   10b0 <glRotatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb77(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xb5a(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xb45(%rip),%xmm2
mulsd  %xmm3,%xmm2
movss  -0x4(%rbp),%xmm3
cvtss2sd %xmm3,%xmm4
movsd  0xb28(%rip),%xmm3
mulsd  %xmm4,%xmm3
movss  -0x4(%rbp),%xmm4
cvtss2sd %xmm4,%xmm5
movsd  0xb0b(%rip),%xmm4
mulsd  %xmm5,%xmm4
mov    -0x8(%rbp),%esi
xor    %edi,%edi
call   1030 <drawChair@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    $0x0,%al
call   1070 <glPushMatrix@plt>
mov    $0xffffffa6,%edi
xor    %ecx,%ecx
mov    $0x1,%edx
mov    %ecx,%esi
call   10b0 <glRotatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xae3(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xac6(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xab1(%rip),%xmm2
mulsd  %xmm3,%xmm2
movss  -0x4(%rbp),%xmm3
cvtss2sd %xmm3,%xmm4
movsd  0xa94(%rip),%xmm3
mulsd  %xmm4,%xmm3
movss  -0x4(%rbp),%xmm4
cvtss2sd %xmm4,%xmm5
movsd  0xa77(%rip),%xmm4
mulsd  %xmm5,%xmm4
mov    -0x8(%rbp),%esi
xor    %edi,%edi
call   1030 <drawChair@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    $0x0,%al
call   1070 <glPushMatrix@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa4a(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xa2d(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xa10(%rip),%xmm2
mulsd  %xmm3,%xmm2
movss  -0x4(%rbp),%xmm3
cvtss2sd %xmm3,%xmm4
movsd  0x9f3(%rip),%xmm3
mulsd  %xmm4,%xmm3
movss  -0x4(%rbp),%xmm4
cvtss2sd %xmm4,%xmm5
movsd  0x9d6(%rip),%xmm4
mulsd  %xmm5,%xmm4
call   10a0 <drawTable@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<drawScene>:
push   %rbp
push   %rbx
sub    $0x38,%rsp
mov    %edi,%ebx
movss  %xmm0,0x8(%rsp)
test   %edi,%edi
je     11ad <drawScene+0x1d>
xor    %edi,%edi
xor    %esi,%esi
xor    %edx,%edx
call   1060 <glColor3f@plt>
xor    %eax,%eax
call   1070 <glPushMatrix@plt>
movss  0x8(%rsp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  %xmm2,0x10(%rsp)
movsd  0xe34(%rip),%xmm0
mulsd  %xmm2,%xmm0
movsd  0xe30(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  %xmm1,0x18(%rsp)
xor    %edi,%edi
call   1080 <glTranslatef@plt>
movsd  0xe1f(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1040 <glutSolidCube@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
xor    %eax,%eax
call   1070 <glPushMatrix@plt>
movsd  0xe00(%rip),%xmm1
mulsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
addsd  %xmm1,%xmm1
xorpd  %xmm0,%xmm0
xor    %edi,%edi
call   1080 <glTranslatef@plt>
movsd  0x8(%rsp),%xmm0
call   1090 <glutWireTeapot@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
xor    %eax,%eax
call   1070 <glPushMatrix@plt>
movsd  0xdcc(%rip),%xmm0
movsd  0x10(%rsp),%xmm1
mulsd  %xmm1,%xmm0
xorpd  %xmm2,%xmm2
mulsd  %xmm1,%xmm2
cvttsd2si %xmm2,%ebp
movsd  0x18(%rsp),%xmm1
mov    %ebp,%edi
call   1080 <glTranslatef@plt>
movsd  0x8(%rsp),%xmm0
call   1040 <glutSolidCube@plt>
movsd  0xd9e(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mov    %ebp,%edi
call   1080 <glTranslatef@plt>
movsd  0x8(%rsp),%xmm0
call   1040 <glutSolidCube@plt>
movsd  0xd80(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
xor    %edi,%edi
call   1080 <glTranslatef@plt>
movsd  0x8(%rsp),%xmm0
call   1040 <glutSolidCube@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
xor    %eax,%eax
call   1070 <glPushMatrix@plt>
movsd  0xd54(%rip),%xmm0
movsd  0x10(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0xd44(%rip),%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x28(%rsp)
movsd  0xd3a(%rip),%xmm3
mulsd  %xmm1,%xmm3
movsd  %xmm3,0x30(%rsp)
xor    %edi,%edi
movapd %xmm2,%xmm1
movsd  0x20(%rsp),%xmm4
mov    %ebx,%esi
call   1030 <drawChair@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
xor    %eax,%eax
call   1070 <glPushMatrix@plt>
mov    $0xb4,%edi
xor    %esi,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
call   10b0 <glRotatef@plt>
xor    %edi,%edi
movsd  0x18(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movaps %xmm1,%xmm2
movsd  0x30(%rsp),%xmm3
movsd  0x20(%rsp),%xmm4
mov    %ebx,%esi
call   1030 <drawChair@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
xor    %eax,%eax
call   1070 <glPushMatrix@plt>
mov    $0x5a,%edi
xor    %esi,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
call   10b0 <glRotatef@plt>
xor    %edi,%edi
movsd  0x18(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movaps %xmm1,%xmm2
movsd  0x30(%rsp),%xmm3
movsd  0x20(%rsp),%xmm4
mov    %ebx,%esi
call   1030 <drawChair@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
xor    %eax,%eax
call   1070 <glPushMatrix@plt>
mov    $0xffffffa6,%edi
xor    %esi,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
call   10b0 <glRotatef@plt>
xor    %edi,%edi
movsd  0x18(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movaps %xmm1,%xmm2
movsd  0x30(%rsp),%xmm3
movsd  0x20(%rsp),%xmm4
mov    %ebx,%esi
call   1030 <drawChair@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
xor    %eax,%eax
call   1070 <glPushMatrix@plt>
movsd  0xc40(%rip),%xmm1
movsd  0x10(%rsp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc36(%rip),%xmm4
mulsd  %xmm2,%xmm4
movsd  0x20(%rsp),%xmm0
movsd  0x8(%rsp),%xmm3
call   10a0 <drawTable@plt>
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %rbp
jmp    1050 <glPopMatrix@plt>

LLVM IR (-O0):
define void @drawScene(float %0, i32 %1) {
%3 = alloca float
%4 = alloca i32
store float %0, float* %3
store i32 %1, i32* %4
%5 = load i32, i32* %4
%6 = icmp ne i32 %5, 0
br i1 %6, label %7, label %9
7: ; preds = %2
%8 = call i32 @glColor3f(i32 0, i32 0, i32 0)
br label %9
9: ; preds = %7, %2
%10 = call i32 (...) @glPushMatrix()
%11 = load float, float* %3
%12 = fpext float %11 to double
%13 = fmul double 5.000000e-01, %12
%14 = load float, float* %3
%15 = fpext float %14 to double
%16 = fmul double 0x3FB3333333333333, %15
%17 = call i32 @glTranslatef(double %13, double %16, i32 0)
%18 = load float, float* %3
%19 = fpext float %18 to double
%20 = fmul double 1.000000e-01, %19
%21 = call i32 @glutSolidCube(double %20)
%22 = call i32 (...) @glPopMatrix()
%23 = call i32 (...) @glPushMatrix()
%24 = load float, float* %3
%25 = fpext float %24 to double
%26 = load float, float* %3
%27 = fpext float %26 to double
%28 = fmul double 5.000000e-02, %27
%29 = call double @llvm.fmuladd.f64(double 5.000000e-02, double %25, double %28)
%30 = call i32 @glTranslatef(double 0.000000e+00, double %29, i32 0)
%31 = load float, float* %3
%32 = fpext float %31 to double
%33 = fmul double 1.000000e-01, %32
%34 = call i32 @glutWireTeapot(double %33)
%35 = call i32 (...) @glPopMatrix()
%36 = call i32 (...) @glPushMatrix()
%37 = load float, float* %3
%38 = fpext float %37 to double
%39 = fmul double -5.000000e-01, %38
%40 = load float, float* %3
%41 = fpext float %40 to double
%42 = fmul double 0x3FB3333333333333, %41
%43 = load float, float* %3
%44 = fpext float %43 to double
%45 = fmul double 0.000000e+00, %44
%46 = fptosi double %45 to i32
%47 = call i32 @glTranslatef(double %39, double %42, i32 %46)
%48 = load float, float* %3
%49 = fpext float %48 to double
%50 = fmul double 1.000000e-01, %49
%51 = call i32 @glutSolidCube(double %50)
%52 = load float, float* %3
%53 = fpext float %52 to double
%54 = fmul double -1.000000e-02, %53
%55 = load float, float* %3
%56 = fpext float %55 to double
%57 = fmul double 1.000000e-01, %56
%58 = load float, float* %3
%59 = fpext float %58 to double
%60 = fmul double 0.000000e+00, %59
%61 = fptosi double %60 to i32
%62 = call i32 @glTranslatef(double %54, double %57, i32 %61)
%63 = load float, float* %3
%64 = fpext float %63 to double
%65 = fmul double 1.000000e-01, %64
%66 = call i32 @glutSolidCube(double %65)
%67 = load float, float* %3
%68 = fpext float %67 to double
%69 = fmul double 3.000000e-02, %68
%70 = load float, float* %3
%71 = fpext float %70 to double
%72 = fmul double 1.000000e-01, %71
%73 = call i32 @glTranslatef(double %69, double %72, i32 0)
%74 = load float, float* %3
%75 = fpext float %74 to double
%76 = fmul double 1.000000e-01, %75
%77 = call i32 @glutSolidCube(double %76)
%78 = call i32 (...) @glPopMatrix()
%79 = call i32 (...) @glPushMatrix()
%80 = load float, float* %3
%81 = fpext float %80 to double
%82 = fmul double -3.000000e-01, %81
%83 = load float, float* %3
%84 = fpext float %83 to double
%85 = fmul double 7.500000e-01, %84
%86 = load float, float* %3
%87 = fpext float %86 to double
%88 = fmul double 7.500000e-01, %87
%89 = load float, float* %3
%90 = fpext float %89 to double
%91 = fmul double 4.000000e-01, %90
%92 = load float, float* %3
%93 = fpext float %92 to double
%94 = fmul double 5.000000e-02, %93
%95 = load i32, i32* %4
%96 = call i32 @drawChair(i32 0, double %82, double %85, double %88, double %91, double %94, i32 %95)
%97 = call i32 (...) @glPopMatrix()
%98 = call i32 (...) @glPushMatrix()
%99 = call i32 @glRotatef(i32 180, i32 0, i32 1, i32 0)
%100 = load float, float* %3
%101 = fpext float %100 to double
%102 = fmul double -3.000000e-01, %101
%103 = load float, float* %3
%104 = fpext float %103 to double
%105 = fmul double 7.500000e-01, %104
%106 = load float, float* %3
%107 = fpext float %106 to double
%108 = fmul double 7.500000e-01, %107
%109 = load float, float* %3
%110 = fpext float %109 to double
%111 = fmul double 4.000000e-01, %110
%112 = load float, float* %3
%113 = fpext float %112 to double
%114 = fmul double 5.000000e-02, %113
%115 = load i32, i32* %4
%116 = call i32 @drawChair(i32 0, double %102, double %105, double %108, double %111, double %114, i32 %115)
%117 = call i32 (...) @glPopMatrix()
%118 = call i32 (...) @glPushMatrix()
%119 = call i32 @glRotatef(i32 90, i32 0, i32 1, i32 0)
%120 = load float, float* %3
%121 = fpext float %120 to double
%122 = fmul double -3.000000e-01, %121
%123 = load float, float* %3
%124 = fpext float %123 to double
%125 = fmul double 7.500000e-01, %124
%126 = load float, float* %3
%127 = fpext float %126 to double
%128 = fmul double 7.500000e-01, %127
%129 = load float, float* %3
%130 = fpext float %129 to double
%131 = fmul double 4.000000e-01, %130
%132 = load float, float* %3
%133 = fpext float %132 to double
%134 = fmul double 5.000000e-02, %133
%135 = load i32, i32* %4
%136 = call i32 @drawChair(i32 0, double %122, double %125, double %128, double %131, double %134, i32 %135)
%137 = call i32 (...) @glPopMatrix()
%138 = call i32 (...) @glPushMatrix()
%139 = call i32 @glRotatef(i32 -90, i32 0, i32 1, i32 0)
%140 = load float, float* %3
%141 = fpext float %140 to double
%142 = fmul double -3.000000e-01, %141
%143 = load float, float* %3
%144 = fpext float %143 to double
%145 = fmul double 7.500000e-01, %144
%146 = load float, float* %3
%147 = fpext float %146 to double
%148 = fmul double 7.500000e-01, %147
%149 = load float, float* %3
%150 = fpext float %149 to double
%151 = fmul double 4.000000e-01, %150
%152 = load float, float* %3
%153 = fpext float %152 to double
%154 = fmul double 5.000000e-02, %153
%155 = load i32, i32* %4
%156 = call i32 @drawChair(i32 0, double %142, double %145, double %148, double %151, double %154, i32 %155)
%157 = call i32 (...) @glPopMatrix()
%158 = call i32 (...) @glPushMatrix()
%159 = load float, float* %3
%160 = fpext float %159 to double
%161 = fmul double 5.000000e-02, %160
%162 = load float, float* %3
%163 = fpext float %162 to double
%164 = fmul double 1.500000e+00, %163
%165 = load float, float* %3
%166 = fpext float %165 to double
%167 = fmul double 1.000000e+00, %166
%168 = load float, float* %3
%169 = fpext float %168 to double
%170 = fmul double 1.000000e-01, %169
%171 = load float, float* %3
%172 = fpext float %171 to double
%173 = fmul double 8.000000e-01, %172
%174 = call i32 @drawTable(double %161, double %164, double %167, double %170, double %173)
%175 = call i32 (...) @glPopMatrix()
ret void
}

LLVM IR (-O2):
define void @drawScene(float %0, i32 %1) {
%3 = icmp eq i32 %1, 0
br i1 %3, label %6, label %4
4: ; preds = %2
%5 = tail call i32 @glColor3f(i32 0, i32 0, i32 0)
br label %6
6: ; preds = %4, %2
%7 = tail call i32 (...) @glPushMatrix()
%8 = fpext float %0 to double
%9 = fmul double %8, 5.000000e-01
%10 = fmul double %8, 0x3FB3333333333333
%11 = tail call i32 @glTranslatef(double %9, double %10, i32 0)
%12 = fmul double %8, 1.000000e-01
%13 = tail call i32 @glutSolidCube(double %12)
%14 = tail call i32 (...) @glPopMatrix()
%15 = tail call i32 (...) @glPushMatrix()
%16 = fmul double %8, 5.000000e-02
%17 = tail call double @llvm.fmuladd.f64(double %8, double 5.000000e-02, double %16)
%18 = tail call i32 @glTranslatef(double 0.000000e+00, double %17, i32 0)
%19 = tail call i32 @glutWireTeapot(double %12)
%20 = tail call i32 (...) @glPopMatrix()
%21 = tail call i32 (...) @glPushMatrix()
%22 = fmul double %8, -5.000000e-01
%23 = fmul double %8, 0.000000e+00
%24 = fptosi double %23 to i32
%25 = tail call i32 @glTranslatef(double %22, double %10, i32 %24)
%26 = tail call i32 @glutSolidCube(double %12)
%27 = fmul double %8, -1.000000e-02
%28 = tail call i32 @glTranslatef(double %27, double %12, i32 %24)
%29 = tail call i32 @glutSolidCube(double %12)
%30 = fmul double %8, 3.000000e-02
%31 = tail call i32 @glTranslatef(double %30, double %12, i32 0)
%32 = tail call i32 @glutSolidCube(double %12)
%33 = tail call i32 (...) @glPopMatrix()
%34 = tail call i32 (...) @glPushMatrix()
%35 = fmul double %8, -3.000000e-01
%36 = fmul double %8, 7.500000e-01
%37 = fmul double %8, 4.000000e-01
%38 = tail call i32 @drawChair(i32 0, double %35, double %36, double %36, double %37, double %16, i32 %1)
%39 = tail call i32 (...) @glPopMatrix()
%40 = tail call i32 (...) @glPushMatrix()
%41 = tail call i32 @glRotatef(i32 180, i32 0, i32 1, i32 0)
%42 = tail call i32 @drawChair(i32 0, double %35, double %36, double %36, double %37, double %16, i32 %1)
%43 = tail call i32 (...) @glPopMatrix()
%44 = tail call i32 (...) @glPushMatrix()
%45 = tail call i32 @glRotatef(i32 90, i32 0, i32 1, i32 0)
%46 = tail call i32 @drawChair(i32 0, double %35, double %36, double %36, double %37, double %16, i32 %1)
%47 = tail call i32 (...) @glPopMatrix()
%48 = tail call i32 (...) @glPushMatrix()
%49 = tail call i32 @glRotatef(i32 -90, i32 0, i32 1, i32 0)
%50 = tail call i32 @drawChair(i32 0, double %35, double %36, double %36, double %37, double %16, i32 %1)
%51 = tail call i32 (...) @glPopMatrix()
%52 = tail call i32 (...) @glPushMatrix()
%53 = fmul double %8, 1.500000e+00
%54 = fmul double %8, 8.000000e-01
%55 = tail call i32 @drawTable(double %16, double %53, double %8, double %12, double %54)
%56 = tail call i32 (...) @glPopMatrix()
ret void
}