#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 scalar_t__ GLint;

/* Variables and functions */
int /*<<< orphan*/ Circle_draw(scalar_t__, scalar_t__, scalar_t__);
void Globe_Wireframe() {
  GLint xc = 100, yc = 200, r = 50;
  GLint i, n = 50;
  for (i = 0; i < n; i += 5) {
    Circle_draw(xc, yc + i, r - i);
  }
  for (i = 0; i < n; i += 5) {
    Circle_draw(xc, yc - i, r - i);
  }
}


x86 assembly (clang, -O0):
<Globe_Wireframe>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movq   $0x64,-0x8(%rbp)
movq   $0xc8,-0x10(%rbp)
movq   $0x32,-0x18(%rbp)
movq   $0x32,-0x28(%rbp)
movq   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    1178 <Globe_Wireframe+0x68>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rdx
sub    -0x20(%rbp),%rdx
call   1030 <Circle_draw@plt>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    1140 <Globe_Wireframe+0x30>
movq   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    11b8 <Globe_Wireframe+0xa8>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
sub    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rdx
sub    -0x20(%rbp),%rdx
call   1030 <Circle_draw@plt>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    1180 <Globe_Wireframe+0x70>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Globe_Wireframe>:
push   %rax
mov    $0x64,%edi
mov    $0xc8,%esi
mov    $0x32,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xcd,%esi
mov    $0x2d,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xd2,%esi
mov    $0x28,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xd7,%esi
mov    $0x23,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xdc,%esi
mov    $0x1e,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xe1,%esi
mov    $0x19,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xe6,%esi
mov    $0x14,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xeb,%esi
mov    $0xf,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xf0,%esi
mov    $0xa,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xf5,%esi
mov    $0x5,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xc8,%esi
mov    $0x32,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xc3,%esi
mov    $0x2d,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xbe,%esi
mov    $0x28,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xb9,%esi
mov    $0x23,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xb4,%esi
mov    $0x1e,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xaf,%esi
mov    $0x19,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xaa,%esi
mov    $0x14,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xa5,%esi
mov    $0xf,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0xa0,%esi
mov    $0xa,%edx
call   1030 <Circle_draw@plt>
mov    $0x64,%edi
mov    $0x9b,%esi
mov    $0x5,%edx
pop    %rax
jmp    1030 <Circle_draw@plt>

LLVM IR (-O0):
define void @Globe_Wireframe() {
%1 = alloca i64
%2 = alloca i64
%3 = alloca i64
%4 = alloca i64
%5 = alloca i64
store i64 100, i64* %1
store i64 200, i64* %2
store i64 50, i64* %3
store i64 50, i64* %5
store i64 0, i64* %4
br label %6
6: ; preds = %19, %0
%7 = load i64, i64* %4
%8 = load i64, i64* %5
%9 = icmp slt i64 %7, %8
br i1 %9, label %10, label %22
10: ; preds = %6
%11 = load i64, i64* %1
%12 = load i64, i64* %2
%13 = load i64, i64* %4
%14 = add nsw i64 %12, %13
%15 = load i64, i64* %3
%16 = load i64, i64* %4
%17 = sub nsw i64 %15, %16
%18 = call i32 @Circle_draw(i64 %11, i64 %14, i64 %17)
br label %19
19: ; preds = %10
%20 = load i64, i64* %4
%21 = add nsw i64 %20, 5
store i64 %21, i64* %4
br label %6
22: ; preds = %6
store i64 0, i64* %4
br label %23
23: ; preds = %36, %22
%24 = load i64, i64* %4
%25 = load i64, i64* %5
%26 = icmp slt i64 %24, %25
br i1 %26, label %27, label %39
27: ; preds = %23
%28 = load i64, i64* %1
%29 = load i64, i64* %2
%30 = load i64, i64* %4
%31 = sub nsw i64 %29, %30
%32 = load i64, i64* %3
%33 = load i64, i64* %4
%34 = sub nsw i64 %32, %33
%35 = call i32 @Circle_draw(i64 %28, i64 %31, i64 %34)
br label %36
36: ; preds = %27
%37 = load i64, i64* %4
%38 = add nsw i64 %37, 5
store i64 %38, i64* %4
br label %23
39: ; preds = %23
ret void
}

LLVM IR (-O2):
define void @Globe_Wireframe() {
%1 = tail call i32 @Circle_draw(i64 100, i64 200, i64 50)
%2 = tail call i32 @Circle_draw(i64 100, i64 205, i64 45)
%3 = tail call i32 @Circle_draw(i64 100, i64 210, i64 40)
%4 = tail call i32 @Circle_draw(i64 100, i64 215, i64 35)
%5 = tail call i32 @Circle_draw(i64 100, i64 220, i64 30)
%6 = tail call i32 @Circle_draw(i64 100, i64 225, i64 25)
%7 = tail call i32 @Circle_draw(i64 100, i64 230, i64 20)
%8 = tail call i32 @Circle_draw(i64 100, i64 235, i64 15)
%9 = tail call i32 @Circle_draw(i64 100, i64 240, i64 10)
%10 = tail call i32 @Circle_draw(i64 100, i64 245, i64 5)
%11 = tail call i32 @Circle_draw(i64 100, i64 200, i64 50)
%12 = tail call i32 @Circle_draw(i64 100, i64 195, i64 45)
%13 = tail call i32 @Circle_draw(i64 100, i64 190, i64 40)
%14 = tail call i32 @Circle_draw(i64 100, i64 185, i64 35)
%15 = tail call i32 @Circle_draw(i64 100, i64 180, i64 30)
%16 = tail call i32 @Circle_draw(i64 100, i64 175, i64 25)
%17 = tail call i32 @Circle_draw(i64 100, i64 170, i64 20)
%18 = tail call i32 @Circle_draw(i64 100, i64 165, i64 15)
%19 = tail call i32 @Circle_draw(i64 100, i64 160, i64 10)
%20 = tail call i32 @Circle_draw(i64 100, i64 155, i64 5)
ret void
}