#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 int GLubyte;

/* Variables and functions */
int /*<<< orphan*/ GL_COLOR_BUFFER_BIT;
int /*<<< orphan*/ GL_POLYGON_STIPPLE;
int /*<<< orphan*/ glClear(int /*<<< orphan*/);
int /*<<< orphan*/ glColor3f(double, double, double);
int /*<<< orphan*/ glDisable(int /*<<< orphan*/);
int /*<<< orphan*/ glEnable(int /*<<< orphan*/);
int /*<<< orphan*/ glFlush();
int /*<<< orphan*/ glPolygonStipple(int *);
int /*<<< orphan*/ glRectf(double, double, double, double);
void polys_display(void) {
  GLubyte fly[] = {
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0xC0,
      0x06, 0xC0, 0x03, 0x60, 0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20,
      0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20, 0x04, 0x06, 0x60, 0x20,
      0x44, 0x03, 0xC0, 0x20, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
      0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
      0x44, 0x01, 0x80, 0x22, 0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC,
      0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30, 0x07, 0xe1, 0x87, 0xe0,
      0x03, 0x3f, 0xfc, 0xc0, 0x03, 0x31, 0x8c, 0xc0, 0x03, 0x33, 0xcc, 0xc0,
      0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30, 0x18, 0xcc, 0x33, 0x18,
      0x10, 0xc4, 0x23, 0x08, 0x10, 0x63, 0xc6, 0x08, 0x10, 0x30, 0x0c, 0x08,
      0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08,
  };
  GLubyte halftone[] = {
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
      0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
      0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
      0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
      0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
      0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  };
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3f(1.0, 1.0, 1.0);
  glRectf(25.0, 25.0, 125.0, 125.0);
  glEnable(GL_POLYGON_STIPPLE);
  glPolygonStipple(fly);
  glRectf(125.0, 25.0, 225.0, 125.0);
  glPolygonStipple(halftone);
  glRectf(225.0, 25.0, 325.0, 125.0);
  glDisable(GL_POLYGON_STIPPLE);
  glFlush();
}


x86 assembly (clang, -O0):
<polys_display>:
push   %rbp
mov    %rsp,%rbp
sub    $0x400,%rsp
lea    -0x200(%rbp),%rdi
lea    0xe97(%rip),%rsi
mov    $0x200,%edx
call   1070 <memcpy@plt>
lea    -0x400(%rbp),%rdi
lea    0x107f(%rip),%rsi
mov    $0x200,%edx
call   1070 <memcpy@plt>
mov    0x2e16(%rip),%rax
mov    (%rax),%edi
call   1040 <glClear@plt>
movsd  0xe4f(%rip),%xmm2
movaps %xmm2,%xmm0
movaps %xmm2,%xmm1
call   1080 <glColor3f@plt>
movsd  0xe24(%rip),%xmm1
movsd  0xe2c(%rip),%xmm3
movaps %xmm1,%xmm0
movaps %xmm3,%xmm2
call   1060 <glRectf@plt>
mov    0x2dfa(%rip),%rax
mov    (%rax),%edi
call   1050 <glEnable@plt>
lea    -0x200(%rbp),%rdi
call   1030 <glPolygonStipple@plt>
movsd  0xdff(%rip),%xmm3
movsd  0xde7(%rip),%xmm1
movsd  0xdd7(%rip),%xmm2
movaps %xmm3,%xmm0
call   1060 <glRectf@plt>
lea    -0x400(%rbp),%rdi
call   1030 <glPolygonStipple@plt>
movsd  0xdbb(%rip),%xmm0
movsd  0xdbb(%rip),%xmm1
movsd  0xdbb(%rip),%xmm2
movsd  0xdbb(%rip),%xmm3
call   1060 <glRectf@plt>
mov    0x2d8f(%rip),%rax
mov    (%rax),%edi
call   10a0 <glDisable@plt>
mov    $0x0,%al
call   1090 <glFlush@plt>
add    $0x400,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<polys_display>:
push   %r15
push   %r14
push   %rbx
sub    $0x400,%rsp
lea    0xe9d(%rip),%rsi
lea    0x200(%rsp),%r15
mov    $0x200,%edx
mov    %r15,%rdi
call   1070 <memcpy@plt>
lea    0x1081(%rip),%rsi
mov    %rsp,%r14
mov    $0x200,%edx
mov    %r14,%rdi
call   1070 <memcpy@plt>
mov    0x2e12(%rip),%rax
mov    (%rax),%edi
call   1040 <glClear@plt>
movsd  0xe2b(%rip),%xmm0
movaps %xmm0,%xmm1
movaps %xmm0,%xmm2
call   1080 <glColor3f@plt>
movsd  0xe20(%rip),%xmm0
movsd  0xe20(%rip),%xmm2
movaps %xmm0,%xmm1
movaps %xmm2,%xmm3
call   1060 <glRectf@plt>
mov    0x2df6(%rip),%rbx
mov    (%rbx),%edi
call   1050 <glEnable@plt>
mov    %r15,%rdi
call   1030 <glPolygonStipple@plt>
movsd  0xdff(%rip),%xmm2
movsd  0xdef(%rip),%xmm0
movsd  0xddf(%rip),%xmm1
movaps %xmm0,%xmm3
call   1060 <glRectf@plt>
mov    %r14,%rdi
call   1030 <glPolygonStipple@plt>
movsd  0xddf(%rip),%xmm2
movsd  0xdcf(%rip),%xmm0
movsd  0xdb7(%rip),%xmm1
movsd  0xdb7(%rip),%xmm3
call   1060 <glRectf@plt>
mov    (%rbx),%edi
call   10a0 <glDisable@plt>
xor    %eax,%eax
call   1090 <glFlush@plt>
add    $0x400,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@__const.polys_display.fly = [128 x i32] [i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 128, i32 1, i32 192, i32 6, i32 192, i32 3, i32 96, i32 4, i32 96, i32 6, i32 32, i32 4, i32 48, i32 12, i32 32, i32 4, i32 24, i32 24, i32 32, i32 4, i32 12, i32 48, i32 32, i32 4, i32 6, i32 96, i32 32, i32 68, i32 3, i32 192, i32 32, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 102, i32 1, i32 128, i32 102, i32 51, i32 1, i32 128, i32 204, i32 25, i32 129, i32 129, i32 152, i32 12, i32 193, i32 131, i32 48, i32 7, i32 225, i32 135, i32 224, i32 3, i32 63, i32 252, i32 192, i32 3, i32 49, i32 140, i32 192, i32 3, i32 51, i32 204, i32 192, i32 6, i32 100, i32 38, i32 96, i32 12, i32 204, i32 51, i32 48, i32 24, i32 204, i32 51, i32 24, i32 16, i32 196, i32 35, i32 8, i32 16, i32 99, i32 198, i32 8, i32 16, i32 48, i32 12, i32 8, i32 16, i32 24, i32 24, i32 8, i32 16, i32 0, i32 0, i32 8]
@__const.polys_display.halftone = [128 x i32] [i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85]
@GL_COLOR_BUFFER_BIT = global i32 0
@GL_POLYGON_STIPPLE = global i32 0
define void @polys_display() {
%1 = alloca [128 x i32]
%2 = alloca [128 x i32]
%3 = bitcast [128 x i32]* %1 to i8*
%4 = bitcast [128 x i32]* %2 to i8*
%5 = load i32, i32* @GL_COLOR_BUFFER_BIT
%6 = call i32 @glClear(i32 %5)
%7 = call i32 @glColor3f(double 1.000000e+00, double 1.000000e+00, double 1.000000e+00)
%8 = call i32 @glRectf(double 2.500000e+01, double 2.500000e+01, double 1.250000e+02, double 1.250000e+02)
%9 = load i32, i32* @GL_POLYGON_STIPPLE
%10 = call i32 @glEnable(i32 %9)
%11 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 0
%12 = call i32 @glPolygonStipple(i32* %11)
%13 = call i32 @glRectf(double 1.250000e+02, double 2.500000e+01, double 2.250000e+02, double 1.250000e+02)
%14 = getelementptr inbounds [128 x i32], [128 x i32]* %2, i64 0, i64 0
%15 = call i32 @glPolygonStipple(i32* %14)
%16 = call i32 @glRectf(double 2.250000e+02, double 2.500000e+01, double 3.250000e+02, double 1.250000e+02)
%17 = load i32, i32* @GL_POLYGON_STIPPLE
%18 = call i32 @glDisable(i32 %17)
%19 = call i32 (...) @glFlush()
ret void
}

LLVM IR (-O2):
@__const.polys_display.fly = [128 x i32] [i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 128, i32 1, i32 192, i32 6, i32 192, i32 3, i32 96, i32 4, i32 96, i32 6, i32 32, i32 4, i32 48, i32 12, i32 32, i32 4, i32 24, i32 24, i32 32, i32 4, i32 12, i32 48, i32 32, i32 4, i32 6, i32 96, i32 32, i32 68, i32 3, i32 192, i32 32, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 68, i32 1, i32 128, i32 34, i32 102, i32 1, i32 128, i32 102, i32 51, i32 1, i32 128, i32 204, i32 25, i32 129, i32 129, i32 152, i32 12, i32 193, i32 131, i32 48, i32 7, i32 225, i32 135, i32 224, i32 3, i32 63, i32 252, i32 192, i32 3, i32 49, i32 140, i32 192, i32 3, i32 51, i32 204, i32 192, i32 6, i32 100, i32 38, i32 96, i32 12, i32 204, i32 51, i32 48, i32 24, i32 204, i32 51, i32 24, i32 16, i32 196, i32 35, i32 8, i32 16, i32 99, i32 198, i32 8, i32 16, i32 48, i32 12, i32 8, i32 16, i32 24, i32 24, i32 8, i32 16, i32 0, i32 0, i32 8]
@__const.polys_display.halftone = [128 x i32] [i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85, i32 170, i32 170, i32 170, i32 170, i32 85, i32 85, i32 85, i32 85]
@GL_COLOR_BUFFER_BIT = global i32 0
@GL_POLYGON_STIPPLE = global i32 0
define void @polys_display() {
%1 = alloca [128 x i32]
%2 = alloca [128 x i32]
%3 = bitcast [128 x i32]* %1 to i8*
%4 = bitcast [128 x i32]* %2 to i8*
%5 = load i32, i32* @GL_COLOR_BUFFER_BIT
%6 = tail call i32 @glClear(i32 %5)
%7 = tail call i32 @glColor3f(double 1.000000e+00, double 1.000000e+00, double 1.000000e+00)
%8 = tail call i32 @glRectf(double 2.500000e+01, double 2.500000e+01, double 1.250000e+02, double 1.250000e+02)
%9 = load i32, i32* @GL_POLYGON_STIPPLE
%10 = tail call i32 @glEnable(i32 %9)
%11 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 0
%12 = call i32 @glPolygonStipple(i32* %11)
%13 = call i32 @glRectf(double 1.250000e+02, double 2.500000e+01, double 2.250000e+02, double 1.250000e+02)
%14 = getelementptr inbounds [128 x i32], [128 x i32]* %2, i64 0, i64 0
%15 = call i32 @glPolygonStipple(i32* %14)
%16 = call i32 @glRectf(double 2.250000e+02, double 2.500000e+01, double 3.250000e+02, double 1.250000e+02)
%17 = load i32, i32* @GL_POLYGON_STIPPLE
%18 = call i32 @glDisable(i32 %17)
%19 = call i32 (...) @glFlush()
ret void
}