#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*/ abort();
int ieq(int x, int y, int ok) {
  if ((x <= y) && (x >= y)) {
    if (!ok)
      abort();
  } else if (ok)
    abort();
  if ((x <= y) && (x == y)) {
    if (!ok)
      abort();
  } else if (ok)
    abort();
  if ((x <= y) && (y <= x)) {
    if (!ok)
      abort();
  } else if (ok)
    abort();
  if ((y == x) && (x <= y)) {
    if (!ok)
      abort();
  } else if (ok)
    abort();
}


x86 assembly (clang, -O0):
<ieq>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     114f <ieq+0x3f>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jl     114f <ieq+0x3f>
cmpl   $0x0,-0x10(%rbp)
jne    114a <ieq+0x3a>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1165 <ieq+0x55>
cmpl   $0x0,-0x10(%rbp)
je     1160 <ieq+0x50>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1165 <ieq+0x55>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1193 <ieq+0x83>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    1193 <ieq+0x83>
cmpl   $0x0,-0x10(%rbp)
jne    118e <ieq+0x7e>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    11a9 <ieq+0x99>
cmpl   $0x0,-0x10(%rbp)
je     11a4 <ieq+0x94>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    11a9 <ieq+0x99>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     11d7 <ieq+0xc7>
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jg     11d7 <ieq+0xc7>
cmpl   $0x0,-0x10(%rbp)
jne    11d2 <ieq+0xc2>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    11ed <ieq+0xdd>
cmpl   $0x0,-0x10(%rbp)
je     11e8 <ieq+0xd8>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    11ed <ieq+0xdd>
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    121b <ieq+0x10b>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     121b <ieq+0x10b>
cmpl   $0x0,-0x10(%rbp)
jne    1216 <ieq+0x106>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1231 <ieq+0x121>
cmpl   $0x0,-0x10(%rbp)
je     122c <ieq+0x11c>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1231 <ieq+0x121>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ieq>:
push   %rax
cmp    %esi,%edi
jne    1120 <ieq+0x10>
test   %edx,%edx
jne    1124 <ieq+0x14>
xor    %eax,%eax
call   1030 <abort@plt>
test   %edx,%edx
jne    1119 <ieq+0x9>
pop    %rcx
ret

LLVM IR (-O0):
define i32 @ieq(i32 %0, i32 %1, i32 %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
%8 = load i32, i32* %5
%9 = load i32, i32* %6
%10 = icmp sle i32 %8, %9
br i1 %10, label %11, label %21
11: ; preds = %3
%12 = load i32, i32* %5
%13 = load i32, i32* %6
%14 = icmp sge i32 %12, %13
br i1 %14, label %15, label %21
15: ; preds = %11
%16 = load i32, i32* %7
%17 = icmp ne i32 %16, 0
br i1 %17, label %20, label %18
18: ; preds = %15
%19 = call i32 (...) @abort()
unreachable
20: ; preds = %15
br label %27
21: ; preds = %11, %3
%22 = load i32, i32* %7
%23 = icmp ne i32 %22, 0
br i1 %23, label %24, label %26
24: ; preds = %21
%25 = call i32 (...) @abort()
unreachable
26: ; preds = %21
br label %27
27: ; preds = %26, %20
%28 = load i32, i32* %5
%29 = load i32, i32* %6
%30 = icmp sle i32 %28, %29
br i1 %30, label %31, label %41
31: ; preds = %27
%32 = load i32, i32* %5
%33 = load i32, i32* %6
%34 = icmp eq i32 %32, %33
br i1 %34, label %35, label %41
35: ; preds = %31
%36 = load i32, i32* %7
%37 = icmp ne i32 %36, 0
br i1 %37, label %40, label %38
38: ; preds = %35
%39 = call i32 (...) @abort()
unreachable
40: ; preds = %35
br label %47
41: ; preds = %31, %27
%42 = load i32, i32* %7
%43 = icmp ne i32 %42, 0
br i1 %43, label %44, label %46
44: ; preds = %41
%45 = call i32 (...) @abort()
unreachable
46: ; preds = %41
br label %47
47: ; preds = %46, %40
%48 = load i32, i32* %5
%49 = load i32, i32* %6
%50 = icmp sle i32 %48, %49
br i1 %50, label %51, label %61
51: ; preds = %47
%52 = load i32, i32* %6
%53 = load i32, i32* %5
%54 = icmp sle i32 %52, %53
br i1 %54, label %55, label %61
55: ; preds = %51
%56 = load i32, i32* %7
%57 = icmp ne i32 %56, 0
br i1 %57, label %60, label %58
58: ; preds = %55
%59 = call i32 (...) @abort()
unreachable
60: ; preds = %55
br label %67
61: ; preds = %51, %47
%62 = load i32, i32* %7
%63 = icmp ne i32 %62, 0
br i1 %63, label %64, label %66
64: ; preds = %61
%65 = call i32 (...) @abort()
unreachable
66: ; preds = %61
br label %67
67: ; preds = %66, %60
%68 = load i32, i32* %6
%69 = load i32, i32* %5
%70 = icmp eq i32 %68, %69
br i1 %70, label %71, label %81
71: ; preds = %67
%72 = load i32, i32* %5
%73 = load i32, i32* %6
%74 = icmp sle i32 %72, %73
br i1 %74, label %75, label %81
75: ; preds = %71
%76 = load i32, i32* %7
%77 = icmp ne i32 %76, 0
br i1 %77, label %80, label %78
78: ; preds = %75
%79 = call i32 (...) @abort()
unreachable
80: ; preds = %75
br label %87
81: ; preds = %71, %67
%82 = load i32, i32* %7
%83 = icmp ne i32 %82, 0
br i1 %83, label %84, label %86
84: ; preds = %81
%85 = call i32 (...) @abort()
unreachable
86: ; preds = %81
br label %87
87: ; preds = %86, %80
%88 = load i32, i32* %4
ret i32 %88
}

LLVM IR (-O2):
define i32 @ieq(i32 %0, i32 %1, i32 %2) {
%4 = icmp eq i32 %0, %1
%5 = icmp eq i32 %2, 0
br i1 %4, label %6, label %9
6: ; preds = %3
br i1 %5, label %7, label %12
7: ; preds = %6
%8 = tail call i32 (...) @abort()
unreachable
9: ; preds = %3
br i1 %5, label %12, label %10
10: ; preds = %9
%11 = tail call i32 (...) @abort()
unreachable
12: ; preds = %9, %6
ret i32 undef
}