#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*/ printn(int);
int /*<<< orphan*/ putchar(char);
void main() {
  int x;
  int y = 4;
  for (x = 0; x != 8; x++) {
    if (x < y)
      putchar('<');
    printn(x);
  }
  putchar('\n');
  for (x = 0; x != 8; x++) {
    if (x >= y) {
      putchar('>');
      putchar('=');
    }
    printn(x);
  }
  putchar('\n');
  for (x = 0; x != 8; x++) {
    if (x > y) {
      putchar('>');
    }
    printn(x);
  }
  putchar('\n');
  for (x = 0; x != 8; x++) {
    if (x <= y) {
      putchar('<');
      putchar('=');
    }
    printn(x);
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x4,-0x8(%rbp)
movl   $0x0,-0x4(%rbp)
cmpl   $0x8,-0x4(%rbp)
je     116c <main+0x4c>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1156 <main+0x36>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    -0x4(%rbp),%edi
call   1030 <printn@plt>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1136 <main+0x16>
mov    $0xa,%edi
call   1040 <putchar@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x8,-0x4(%rbp)
je     11bd <main+0x9d>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jl     11a7 <main+0x87>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    -0x4(%rbp),%edi
call   1030 <printn@plt>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    117d <main+0x5d>
mov    $0xa,%edi
call   1040 <putchar@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x8,-0x4(%rbp)
je     1204 <main+0xe4>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    11ee <main+0xce>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    -0x4(%rbp),%edi
call   1030 <printn@plt>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    11ce <main+0xae>
mov    $0xa,%edi
call   1040 <putchar@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x8,-0x4(%rbp)
je     1255 <main+0x135>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jg     123f <main+0x11f>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    -0x4(%rbp),%edi
call   1030 <printn@plt>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1215 <main+0xf5>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
mov    $0x3c,%edi
call   1040 <putchar@plt>
xor    %edi,%edi
call   1030 <printn@plt>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x1,%edi
call   1030 <printn@plt>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x2,%edi
call   1030 <printn@plt>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x3,%edi
call   1030 <printn@plt>
mov    $0x4,%edi
call   1030 <printn@plt>
mov    $0x5,%edi
call   1030 <printn@plt>
mov    $0x6,%edi
call   1030 <printn@plt>
mov    $0x7,%edi
call   1030 <printn@plt>
mov    $0xa,%edi
call   1040 <putchar@plt>
xor    %edi,%edi
call   1030 <printn@plt>
mov    $0x1,%edi
call   1030 <printn@plt>
mov    $0x2,%edi
call   1030 <printn@plt>
mov    $0x3,%edi
call   1030 <printn@plt>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    $0x4,%edi
call   1030 <printn@plt>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    $0x5,%edi
call   1030 <printn@plt>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    $0x6,%edi
call   1030 <printn@plt>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    $0x7,%edi
call   1030 <printn@plt>
mov    $0xa,%edi
call   1040 <putchar@plt>
xor    %edi,%edi
call   1030 <printn@plt>
mov    $0x1,%edi
call   1030 <printn@plt>
mov    $0x2,%edi
call   1030 <printn@plt>
mov    $0x3,%edi
call   1030 <printn@plt>
mov    $0x4,%edi
call   1030 <printn@plt>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    $0x5,%edi
call   1030 <printn@plt>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    $0x6,%edi
call   1030 <printn@plt>
mov    $0x3e,%edi
call   1040 <putchar@plt>
mov    $0x7,%edi
call   1030 <printn@plt>
mov    $0xa,%edi
call   1040 <putchar@plt>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
xor    %edi,%edi
call   1030 <printn@plt>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    $0x1,%edi
call   1030 <printn@plt>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    $0x2,%edi
call   1030 <printn@plt>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    $0x3,%edi
call   1030 <printn@plt>
mov    $0x3c,%edi
call   1040 <putchar@plt>
mov    $0x3d,%edi
call   1040 <putchar@plt>
mov    $0x4,%edi
call   1030 <printn@plt>
mov    $0x5,%edi
call   1030 <printn@plt>
mov    $0x6,%edi
call   1030 <printn@plt>
mov    $0x7,%edi
pop    %rax
jmp    1030 <printn@plt>

LLVM IR (-O0):
define void @main() {
%1 = alloca i32
%2 = alloca i32
store i32 4, i32* %2
store i32 0, i32* %1
br label %3
3: ; preds = %15, %0
%4 = load i32, i32* %1
%5 = icmp ne i32 %4, 8
br i1 %5, label %6, label %18
6: ; preds = %3
%7 = load i32, i32* %1
%8 = load i32, i32* %2
%9 = icmp slt i32 %7, %8
br i1 %9, label %10, label %12
10: ; preds = %6
%11 = call i32 @putchar(i8 signext 60)
br label %12
12: ; preds = %10, %6
%13 = load i32, i32* %1
%14 = call i32 @printn(i32 %13)
br label %15
15: ; preds = %12
%16 = load i32, i32* %1
%17 = add nsw i32 %16, 1
store i32 %17, i32* %1
br label %3
18: ; preds = %3
%19 = call i32 @putchar(i8 signext 10)
store i32 0, i32* %1
br label %20
20: ; preds = %33, %18
%21 = load i32, i32* %1
%22 = icmp ne i32 %21, 8
br i1 %22, label %23, label %36
23: ; preds = %20
%24 = load i32, i32* %1
%25 = load i32, i32* %2
%26 = icmp sge i32 %24, %25
br i1 %26, label %27, label %30
27: ; preds = %23
%28 = call i32 @putchar(i8 signext 62)
%29 = call i32 @putchar(i8 signext 61)
br label %30
30: ; preds = %27, %23
%31 = load i32, i32* %1
%32 = call i32 @printn(i32 %31)
br label %33
33: ; preds = %30
%34 = load i32, i32* %1
%35 = add nsw i32 %34, 1
store i32 %35, i32* %1
br label %20
36: ; preds = %20
%37 = call i32 @putchar(i8 signext 10)
store i32 0, i32* %1
br label %38
38: ; preds = %50, %36
%39 = load i32, i32* %1
%40 = icmp ne i32 %39, 8
br i1 %40, label %41, label %53
41: ; preds = %38
%42 = load i32, i32* %1
%43 = load i32, i32* %2
%44 = icmp sgt i32 %42, %43
br i1 %44, label %45, label %47
45: ; preds = %41
%46 = call i32 @putchar(i8 signext 62)
br label %47
47: ; preds = %45, %41
%48 = load i32, i32* %1
%49 = call i32 @printn(i32 %48)
br label %50
50: ; preds = %47
%51 = load i32, i32* %1
%52 = add nsw i32 %51, 1
store i32 %52, i32* %1
br label %38
53: ; preds = %38
%54 = call i32 @putchar(i8 signext 10)
store i32 0, i32* %1
br label %55
55: ; preds = %68, %53
%56 = load i32, i32* %1
%57 = icmp ne i32 %56, 8
br i1 %57, label %58, label %71
58: ; preds = %55
%59 = load i32, i32* %1
%60 = load i32, i32* %2
%61 = icmp sle i32 %59, %60
br i1 %61, label %62, label %65
62: ; preds = %58
%63 = call i32 @putchar(i8 signext 60)
%64 = call i32 @putchar(i8 signext 61)
br label %65
65: ; preds = %62, %58
%66 = load i32, i32* %1
%67 = call i32 @printn(i32 %66)
br label %68
68: ; preds = %65
%69 = load i32, i32* %1
%70 = add nsw i32 %69, 1
store i32 %70, i32* %1
br label %55
71: ; preds = %55
ret void
}

LLVM IR (-O2):
define void @main() {
%1 = tail call i32 @putchar(i8 signext 60)
%2 = tail call i32 @printn(i32 0)
%3 = tail call i32 @putchar(i8 signext 60)
%4 = tail call i32 @printn(i32 1)
%5 = tail call i32 @putchar(i8 signext 60)
%6 = tail call i32 @printn(i32 2)
%7 = tail call i32 @putchar(i8 signext 60)
%8 = tail call i32 @printn(i32 3)
%9 = tail call i32 @printn(i32 4)
%10 = tail call i32 @printn(i32 5)
%11 = tail call i32 @printn(i32 6)
%12 = tail call i32 @printn(i32 7)
%13 = tail call i32 @putchar(i8 signext 10)
%14 = tail call i32 @printn(i32 0)
%15 = tail call i32 @printn(i32 1)
%16 = tail call i32 @printn(i32 2)
%17 = tail call i32 @printn(i32 3)
%18 = tail call i32 @putchar(i8 signext 62)
%19 = tail call i32 @putchar(i8 signext 61)
%20 = tail call i32 @printn(i32 4)
%21 = tail call i32 @putchar(i8 signext 62)
%22 = tail call i32 @putchar(i8 signext 61)
%23 = tail call i32 @printn(i32 5)
%24 = tail call i32 @putchar(i8 signext 62)
%25 = tail call i32 @putchar(i8 signext 61)
%26 = tail call i32 @printn(i32 6)
%27 = tail call i32 @putchar(i8 signext 62)
%28 = tail call i32 @putchar(i8 signext 61)
%29 = tail call i32 @printn(i32 7)
%30 = tail call i32 @putchar(i8 signext 10)
%31 = tail call i32 @printn(i32 0)
%32 = tail call i32 @printn(i32 1)
%33 = tail call i32 @printn(i32 2)
%34 = tail call i32 @printn(i32 3)
%35 = tail call i32 @printn(i32 4)
%36 = tail call i32 @putchar(i8 signext 62)
%37 = tail call i32 @printn(i32 5)
%38 = tail call i32 @putchar(i8 signext 62)
%39 = tail call i32 @printn(i32 6)
%40 = tail call i32 @putchar(i8 signext 62)
%41 = tail call i32 @printn(i32 7)
%42 = tail call i32 @putchar(i8 signext 10)
%43 = tail call i32 @putchar(i8 signext 60)
%44 = tail call i32 @putchar(i8 signext 61)
%45 = tail call i32 @printn(i32 0)
%46 = tail call i32 @putchar(i8 signext 60)
%47 = tail call i32 @putchar(i8 signext 61)
%48 = tail call i32 @printn(i32 1)
%49 = tail call i32 @putchar(i8 signext 60)
%50 = tail call i32 @putchar(i8 signext 61)
%51 = tail call i32 @printn(i32 2)
%52 = tail call i32 @putchar(i8 signext 60)
%53 = tail call i32 @putchar(i8 signext 61)
%54 = tail call i32 @printn(i32 3)
%55 = tail call i32 @putchar(i8 signext 60)
%56 = tail call i32 @putchar(i8 signext 61)
%57 = tail call i32 @printn(i32 4)
%58 = tail call i32 @printn(i32 5)
%59 = tail call i32 @printn(i32 6)
%60 = tail call i32 @printn(i32 7)
ret void
}