#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*/ block();
int /*<<< orphan*/ expr();
int /*<<< orphan*/ get_lexval();
int yyselect();
cond_statement() {
  switch (yyselect()) {
  case 94: {
    get_lexval();
    get_lexval();
    expr();
    get_lexval();
    block();
    switch (yyselect()) {
    case 121: {
      get_lexval();
      block();
    } break;
    default:;
    }
  } break;
  case 95: {
    get_lexval();
    get_lexval();
    get_lexval();
    get_lexval();
    get_lexval();
    get_lexval();
    get_lexval();
    while (1) {
      switch (yyselect()) {
      case 122: {
        get_lexval();
        get_lexval();
        get_lexval();
        block();
      } break;
      default:
        goto yy2;
      }
    }
  yy2:;
    get_lexval();
    get_lexval();
    block();
    get_lexval();
  } break;
  }
}


x86 assembly (clang, -O0):
<cond_statement>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
xor    %eax,%eax
call   1030 <yyselect@plt>
mov    %eax,%ecx
mov    %ecx,-0x8(%rbp)
sub    $0x5e,%eax
je     1173 <cond_statement+0x33>
jmp    1162 <cond_statement+0x22>
mov    -0x8(%rbp),%eax
sub    $0x5f,%eax
je     11d0 <cond_statement+0x90>
jmp    125d <cond_statement+0x11d>
xor    %eax,%eax
mov    %al,-0x9(%rbp)
call   1040 <get_lexval@plt>
mov    -0x9(%rbp),%al
call   1040 <get_lexval@plt>
mov    -0x9(%rbp),%al
call   1050 <expr@plt>
mov    -0x9(%rbp),%al
call   1040 <get_lexval@plt>
mov    -0x9(%rbp),%al
call   1060 <block@plt>
mov    -0x9(%rbp),%al
call   1030 <yyselect@plt>
sub    $0x79,%eax
jne    11c6 <cond_statement+0x86>
jmp    11b3 <cond_statement+0x73>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1060 <block@plt>
jmp    11cb <cond_statement+0x8b>
jmp    11cb <cond_statement+0x8b>
jmp    125d <cond_statement+0x11d>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1030 <yyselect@plt>
sub    $0x7a,%eax
jne    1237 <cond_statement+0xf7>
jmp    1216 <cond_statement+0xd6>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1060 <block@plt>
jmp    123c <cond_statement+0xfc>
jmp    1241 <cond_statement+0x101>
jmp    1201 <cond_statement+0xc1>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    $0x0,%al
call   1060 <block@plt>
mov    $0x0,%al
call   1040 <get_lexval@plt>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cond_statement>:
push   %rax
xor    %eax,%eax
call   1030 <yyselect@plt>
cmp    $0x5f,%eax
je     1199 <cond_statement+0x59>
cmp    $0x5e,%eax
jne    1216 <cond_statement+0xd6>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1050 <expr@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1060 <block@plt>
xor    %eax,%eax
call   1030 <yyselect@plt>
cmp    $0x79,%eax
jne    1216 <cond_statement+0xd6>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1060 <block@plt>
pop    %rcx
ret
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
nopw   0x0(%rax,%rax,1)
xor    %eax,%eax
call   1030 <yyselect@plt>
cmp    $0x7a,%eax
jne    11fa <cond_statement+0xba>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1060 <block@plt>
jmp    11d0 <cond_statement+0x90>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
xor    %eax,%eax
call   1060 <block@plt>
xor    %eax,%eax
call   1040 <get_lexval@plt>
pop    %rcx
ret

LLVM IR (-O0):
define i32 @cond_statement() {
%1 = alloca i32
%2 = call i32 (...) @yyselect()
switch i32 %2, label %37 [
i32 94, label %3
i32 95, label %15
]
3: ; preds = %0
%4 = call i32 (...) @get_lexval()
%5 = call i32 (...) @get_lexval()
%6 = call i32 (...) @expr()
%7 = call i32 (...) @get_lexval()
%8 = call i32 (...) @block()
%9 = call i32 (...) @yyselect()
switch i32 %9, label %13 [
i32 121, label %10
]
10: ; preds = %3
%11 = call i32 (...) @get_lexval()
%12 = call i32 (...) @block()
br label %14
13: ; preds = %3
br label %14
14: ; preds = %13, %10
br label %37
15: ; preds = %0
%16 = call i32 (...) @get_lexval()
%17 = call i32 (...) @get_lexval()
%18 = call i32 (...) @get_lexval()
%19 = call i32 (...) @get_lexval()
%20 = call i32 (...) @get_lexval()
%21 = call i32 (...) @get_lexval()
%22 = call i32 (...) @get_lexval()
br label %23
23: ; preds = %15, %31
%24 = call i32 (...) @yyselect()
switch i32 %24, label %30 [
i32 122, label %25
]
25: ; preds = %23
%26 = call i32 (...) @get_lexval()
%27 = call i32 (...) @get_lexval()
%28 = call i32 (...) @get_lexval()
%29 = call i32 (...) @block()
br label %31
30: ; preds = %23
br label %32
31: ; preds = %25
br label %23
32: ; preds = %30
%33 = call i32 (...) @get_lexval()
%34 = call i32 (...) @get_lexval()
%35 = call i32 (...) @block()
%36 = call i32 (...) @get_lexval()
br label %37
37: ; preds = %0, %32, %14
%38 = load i32, i32* %1
ret i32 %38
}

LLVM IR (-O2):
define i32 @cond_statement() {
%1 = tail call i32 (...) @yyselect()
switch i32 %1, label %35 [
i32 94, label %2
i32 95, label %13
]
2: ; preds = %0
%3 = tail call i32 (...) @get_lexval()
%4 = tail call i32 (...) @get_lexval()
%5 = tail call i32 (...) @expr()
%6 = tail call i32 (...) @get_lexval()
%7 = tail call i32 (...) @block()
%8 = tail call i32 (...) @yyselect()
%9 = icmp eq i32 %8, 121
br i1 %9, label %10, label %35
10: ; preds = %2
%11 = tail call i32 (...) @get_lexval()
%12 = tail call i32 (...) @block()
br label %35
13: ; preds = %0
%14 = tail call i32 (...) @get_lexval()
%15 = tail call i32 (...) @get_lexval()
%16 = tail call i32 (...) @get_lexval()
%17 = tail call i32 (...) @get_lexval()
%18 = tail call i32 (...) @get_lexval()
%19 = tail call i32 (...) @get_lexval()
%20 = tail call i32 (...) @get_lexval()
%21 = tail call i32 (...) @yyselect()
%22 = icmp eq i32 %21, 122
br i1 %22, label %23, label %30
23: ; preds = %13, %23
%24 = tail call i32 (...) @get_lexval()
%25 = tail call i32 (...) @get_lexval()
%26 = tail call i32 (...) @get_lexval()
%27 = tail call i32 (...) @block()
%28 = tail call i32 (...) @yyselect()
%29 = icmp eq i32 %28, 122
br i1 %29, label %23, label %30
30: ; preds = %23, %13
%31 = tail call i32 (...) @get_lexval()
%32 = tail call i32 (...) @get_lexval()
%33 = tail call i32 (...) @block()
%34 = tail call i32 (...) @get_lexval()
br label %35
35: ; preds = %10, %2, %0, %30
ret i32 undef
}