int main() {
  int x = 0;
  int y = 0;
  int N;
  if (N < 0)
    return 1;
  while (1) {
    if (x <= N)
      y++;
    else if (x >= N + 1)
      y--;
    else
      return 1;
    if (y < 0)
      break;
    x++;
  }
  if (N >= 0)
    if (y == -1)
      if (x >= 2 * N + 3)
        goto ERROR;
  return 1;
ERROR:;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x0,-0x10(%rbp)
jge    112f <main+0x2f>
movl   $0x1,-0x4(%rbp)
jmp    11e3 <main+0xe3>
jmp    1134 <main+0x34>
mov    -0x8(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     114e <main+0x4e>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    117e <main+0x7e>
mov    -0x8(%rbp),%eax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jl     116d <main+0x6d>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    1179 <main+0x79>
movl   $0x1,-0x4(%rbp)
jmp    11e3 <main+0xe3>
jmp    117e <main+0x7e>
cmpl   $0x0,-0xc(%rbp)
jge    118d <main+0x8d>
jmp    119b <main+0x9b>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1134 <main+0x34>
cmpl   $0x0,-0x10(%rbp)
jl     11d2 <main+0xd2>
cmpl   $0xffffffff,-0xc(%rbp)
jne    11cd <main+0xcd>
mov    -0x8(%rbp),%eax
mov    -0x10(%rbp),%ecx
shl    $0x1,%ecx
add    $0x3,%ecx
cmp    %ecx,%eax
jl     11c8 <main+0xc8>
jmp    11de <main+0xde>
jmp    11cd <main+0xcd>
jmp    11d2 <main+0xd2>
movl   $0x1,-0x4(%rbp)
jmp    11e3 <main+0xe3>
jmp    11e3 <main+0xe3>
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
jmp    1100 <main>

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %2
store i32 0, i32* %3
%5 = load i32, i32* %4
%6 = icmp slt i32 %5, 0
br i1 %6, label %7, label %8
7: ; preds = %0
store i32 1, i32* %1
br label %50
8: ; preds = %0
br label %9
9: ; preds = %8, %30
%10 = load i32, i32* %2
%11 = load i32, i32* %4
%12 = icmp sle i32 %10, %11
br i1 %12, label %13, label %16
13: ; preds = %9
%14 = load i32, i32* %3
%15 = add nsw i32 %14, 1
store i32 %15, i32* %3
br label %26
16: ; preds = %9
%17 = load i32, i32* %2
%18 = load i32, i32* %4
%19 = add nsw i32 %18, 1
%20 = icmp sge i32 %17, %19
br i1 %20, label %21, label %24
21: ; preds = %16
%22 = load i32, i32* %3
%23 = add nsw i32 %22, -1
store i32 %23, i32* %3
br label %25
24: ; preds = %16
store i32 1, i32* %1
br label %50
25: ; preds = %21
br label %26
26: ; preds = %25, %13
%27 = load i32, i32* %3
%28 = icmp slt i32 %27, 0
br i1 %28, label %29, label %30
29: ; preds = %26
br label %33
30: ; preds = %26
%31 = load i32, i32* %2
%32 = add nsw i32 %31, 1
store i32 %32, i32* %2
br label %9
33: ; preds = %29
%34 = load i32, i32* %4
%35 = icmp sge i32 %34, 0
br i1 %35, label %36, label %48
36: ; preds = %33
%37 = load i32, i32* %3
%38 = icmp eq i32 %37, -1
br i1 %38, label %39, label %47
39: ; preds = %36
%40 = load i32, i32* %2
%41 = load i32, i32* %4
%42 = mul nsw i32 2, %41
%43 = add nsw i32 %42, 3
%44 = icmp sge i32 %40, %43
br i1 %44, label %45, label %46
45: ; preds = %39
br label %49
46: ; preds = %39
br label %47
47: ; preds = %46, %36
br label %48
48: ; preds = %47, %33
store i32 1, i32* %1
br label %50
49: ; preds = %45
br label %50
50: ; preds = %49, %48, %24, %7
%51 = load i32, i32* %1
ret i32 %51
}

LLVM IR (-O2):
define i32 @main() {
br label %1
1: ; preds = %0, %1
br label %1
}