#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 */
scalar_t__ is_matching(char *, char *);
int is_func(char *str) {
  int i;
  int open_p;
  int close_p;
  open_p = 0;
  close_p = 0;
  i = 0;
  if (str[i] == '\n' || str[i] == ' ' || str[i] == '\0' || str[i] == '\t' ||
      str[i] == '#' || str[i] == '/' || str[i] == '*' ||
      is_matching(str, "static "))
    return (0);
  while (str[i] != '\t' && str[i] != ' ' && str[i] != '\n' && str[i]) {
    if (str[i] == '(' || str[i] == ')' || str[i] == '{' || str[i] == '}' ||
        str[i] == '=' || str[i] == '+' || str[i] == '\'' || str[i] == '\"')
      return (0);
    ++i;
  }
  while (str[i] != '{' && str[i]) {
    if (str[i] == '=' || str[i] == '+' || str[i] == '\'' || str[i] == '\"' ||
        str[i] == ';')
      return (0);
    ++i;
  }
  --i;
  while ((str[i] == '\n' || str[i] == ' ' || str[i] == '\t') && i > 0)
    --i;
  while (((str[i] != '\t' && str[i] != ' ' && str[i] != '\n') ||
          (open_p != close_p)) &&
         i > 0) {
    if (str[i] == '(')
      ++open_p;
    else if (str[i] == ')')
      --open_p;
    --i;
  }
  if ((i == 0 && open_p != 0) || str[i + 1] == '(')
    return (0);
  ++i;
  while (str[i] && str[i] != '{') {
    if (str[i] == ';' || str[i] == '=' || str[i] == '+' || str[i] == '"' ||
        str[i] == '\'')
      return (0);
    else if (str[i] == '(')
      ++open_p;
    else if (str[i] == ')')
      ++close_p;
    ++i;
  }
  if (open_p == 0 || close_p == 0 || (close_p != open_p))
    return (0);
  return (1);
}


x86 assembly (clang, -O0):
<is_func>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     11de <is_func+0xce>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     11de <is_func+0xce>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     11de <is_func+0xce>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     11de <is_func+0xce>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
je     11de <is_func+0xce>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
je     11de <is_func+0xce>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
je     11de <is_func+0xce>
mov    -0x10(%rbp),%rdi
lea    0xe31(%rip),%rsi
call   1030 <is_matching@plt>
cmp    $0x0,%rax
je     11ea <is_func+0xda>
movl   $0x0,-0x4(%rbp)
jmp    16a6 <is_func+0x596>
jmp    11ef <is_func+0xdf>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x9,%ecx
mov    %al,-0x1d(%rbp)
je     1252 <is_func+0x142>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0x1d(%rbp)
je     1252 <is_func+0x142>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x1d(%rbp)
je     1252 <is_func+0x142>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
test   $0x1,%al
jne    1262 <is_func+0x152>
jmp    1324 <is_func+0x214>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x28,%eax
je     130a <is_func+0x1fa>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x29,%eax
je     130a <is_func+0x1fa>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7b,%eax
je     130a <is_func+0x1fa>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7d,%eax
je     130a <is_func+0x1fa>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3d,%eax
je     130a <is_func+0x1fa>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     130a <is_func+0x1fa>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
je     130a <is_func+0x1fa>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    1316 <is_func+0x206>
movl   $0x0,-0x4(%rbp)
jmp    16a6 <is_func+0x596>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11ef <is_func+0xdf>
jmp    1329 <is_func+0x219>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x7b,%ecx
mov    %al,-0x1e(%rbp)
je     1358 <is_func+0x248>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x1e(%rbp)
mov    -0x1e(%rbp),%al
test   $0x1,%al
jne    1368 <is_func+0x258>
jmp    13eb <is_func+0x2db>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3d,%eax
je     13d1 <is_func+0x2c1>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     13d1 <is_func+0x2c1>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
je     13d1 <is_func+0x2c1>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
je     13d1 <is_func+0x2c1>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3b,%eax
jne    13dd <is_func+0x2cd>
movl   $0x0,-0x4(%rbp)
jmp    16a6 <is_func+0x596>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1329 <is_func+0x219>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     1438 <is_func+0x328>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     1438 <is_func+0x328>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x9,%ecx
mov    %al,-0x1f(%rbp)
jne    1442 <is_func+0x332>
cmpl   $0x0,-0x14(%rbp)
setg   %al
mov    %al,-0x1f(%rbp)
mov    -0x1f(%rbp),%al
test   $0x1,%al
jne    1452 <is_func+0x342>
jmp    1460 <is_func+0x350>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    13f4 <is_func+0x2e4>
jmp    1465 <is_func+0x355>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     14a4 <is_func+0x394>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     14a4 <is_func+0x394>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    14b5 <is_func+0x3a5>
mov    -0x18(%rbp),%ecx
xor    %eax,%eax
cmp    -0x1c(%rbp),%ecx
mov    %al,-0x20(%rbp)
je     14bf <is_func+0x3af>
cmpl   $0x0,-0x14(%rbp)
setg   %al
mov    %al,-0x20(%rbp)
mov    -0x20(%rbp),%al
test   $0x1,%al
jne    14cf <is_func+0x3bf>
jmp    1523 <is_func+0x413>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x28,%eax
jne    14f2 <is_func+0x3e2>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1515 <is_func+0x405>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x29,%eax
jne    1510 <is_func+0x400>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    1515 <is_func+0x405>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1465 <is_func+0x355>
cmpl   $0x0,-0x14(%rbp)
jne    1537 <is_func+0x427>
cmpl   $0x0,-0x18(%rbp)
jne    1551 <is_func+0x441>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x28,%eax
jne    155d <is_func+0x44d>
movl   $0x0,-0x4(%rbp)
jmp    16a6 <is_func+0x596>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x21(%rbp)
je     1595 <is_func+0x485>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7b,%eax
setne  %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    15a5 <is_func+0x495>
jmp    1673 <is_func+0x563>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3b,%eax
je     160e <is_func+0x4fe>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3d,%eax
je     160e <is_func+0x4fe>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     160e <is_func+0x4fe>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
je     160e <is_func+0x4fe>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    161a <is_func+0x50a>
movl   $0x0,-0x4(%rbp)
jmp    16a6 <is_func+0x596>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x28,%eax
jne    163d <is_func+0x52d>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1660 <is_func+0x550>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x29,%eax
jne    165b <is_func+0x54b>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1660 <is_func+0x550>
jmp    1665 <is_func+0x555>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1566 <is_func+0x456>
cmpl   $0x0,-0x18(%rbp)
je     1693 <is_func+0x583>
cmpl   $0x0,-0x1c(%rbp)
je     1693 <is_func+0x583>
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     169f <is_func+0x58f>
movl   $0x0,-0x4(%rbp)
jmp    16a6 <is_func+0x596>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_func>:
push   %rbp
push   %rbx
push   %rax
mov    %rdi,%rbx
movzbl (%rdi),%eax
xor    %ebp,%ebp
cmp    $0x2f,%rax
ja     113a <is_func+0x2a>
movabs $0x840900000601,%rcx
bt     %rax,%rcx
jae    113a <is_func+0x2a>
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret
lea    0xfb7(%rip),%rsi
mov    %rbx,%rdi
call   1030 <is_matching@plt>
test   %rax,%rax
jne    1131 <is_func+0x21>
xor    %eax,%eax
movabs $0x20000b8400000000,%rcx
movabs $0x100000601,%rdx
movzbl (%rbx,%rax,1),%esi
cmp    $0x3d,%rsi
ja     117e <is_func+0x6e>
bt     %rsi,%rcx
jb     12c0 <is_func+0x1b0>
bt     %rsi,%rdx
jb     1198 <is_func+0x88>
cmp    $0x7b,%sil
je     12c0 <is_func+0x1b0>
cmp    $0x7d,%sil
je     12c0 <is_func+0x1b0>
add    $0x1,%rax
jmp    1164 <is_func+0x54>
mov    %eax,%ecx
movabs $0x2800088400000000,%rax
movzbl (%rbx,%rcx,1),%edx
cmp    $0x3d,%rdx
ja     11bd <is_func+0xad>
bt     %rdx,%rax
jb     12c0 <is_func+0x1b0>
test   %rdx,%rdx
je     11c8 <is_func+0xb8>
cmp    $0x7b,%dl
je     11c8 <is_func+0xb8>
add    $0x1,%rcx
jmp    11a4 <is_func+0x94>
movabs $0xffffffff00000000,%r9
ff ff ff
mov    %ecx,%esi
mov    %rcx,%rdx
shl    $0x20,%rdx
add    %r9,%rdx
add    $0xffffffff,%ecx
jmp    11f3 <is_func+0xe3>
cmp    $0x1,%rsi
jbe    120a <is_func+0xfa>
add    $0xffffffff,%ecx
add    %r9,%rdx
add    $0xffffffffffffffff,%rsi
movzbl -0x1(%rbx,%rsi,1),%eax
cmp    $0xa,%al
je     11e3 <is_func+0xd3>
cmp    $0x20,%al
je     11e3 <is_func+0xd3>
cmp    $0x9,%al
jne    120a <is_func+0xfa>
cmp    $0x2,%rsi
jae    11e9 <is_func+0xd9>
movabs $0x100000000,%rsi
sar    $0x20,%rdx
movslq %ecx,%rdi
imul   %rdi,%r9
neg    %edi
xor    %ecx,%ecx
movabs $0x100000600,%r8
jmp    123c <is_func+0x12c>
add    $0xffffffff,%ecx
add    $0xffffffffffffffff,%rdx
add    $0x1,%edi
add    %rsi,%r9
movzbl (%rbx,%rdx,1),%ebp
cmp    $0x20,%rbp
ja     1250 <is_func+0x140>
bt     %rbp,%r8
jae    1250 <is_func+0x140>
test   %ecx,%ecx
je     1266 <is_func+0x156>
test   %rdx,%rdx
jle    1266 <is_func+0x156>
cmp    $0x29,%bpl
je     122f <is_func+0x11f>
cmp    $0x28,%bpl
jne    1232 <is_func+0x122>
add    $0x1,%ecx
jmp    1232 <is_func+0x122>
xor    %ebp,%ebp
test   %edi,%edi
jne    1274 <is_func+0x164>
test   %ecx,%ecx
jne    1131 <is_func+0x21>
sub    %r9,%rsi
sar    $0x20,%rsi
cmpb   $0x28,(%rbx,%rsi,1)
je     1131 <is_func+0x21>
neg    %r9
sar    $0x20,%r9
xor    %edx,%edx
lea    0xd6b(%rip),%rsi
jmp    129d <is_func+0x18d>
cmp    $0x7b,%dil
je     12c7 <is_func+0x1b7>
movzbl 0x1(%rbx,%r9,1),%edi
add    $0x1,%r9
cmp    $0x3d,%rdi
ja     1297 <is_func+0x187>
movslq (%rsi,%rdi,4),%rax
add    %rsi,%rax
jmp    *%rax
add    $0x1,%ecx
jmp    129d <is_func+0x18d>
add    $0x1,%edx
jmp    129d <is_func+0x18d>
xor    %ebp,%ebp
jmp    1131 <is_func+0x21>
test   %ecx,%ecx
setne  %al
test   %edx,%edx
setne  %bl
and    %al,%bl
cmp    %ecx,%edx
sete   %al
and    %bl,%al
movzbl %al,%ebp
jmp    1131 <is_func+0x21>

LLVM IR (-O0):
@.str = [8 x i8] c"static \00"
define i32 @is_func(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i8* %0, i8** %3
store i32 0, i32* %5
store i32 0, i32* %6
store i32 0, i32* %4
%7 = load i8*, i8** %3
%8 = load i32, i32* %4
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds i8, i8* %7, i64 %9
%11 = load i8, i8* %10
%12 = sext i8 %11 to i32
%13 = icmp eq i32 %12, 10
br i1 %13, label %66, label %14
14: ; preds = %1
%15 = load i8*, i8** %3
%16 = load i32, i32* %4
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i8, i8* %15, i64 %17
%19 = load i8, i8* %18
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 32
br i1 %21, label %66, label %22
22: ; preds = %14
%23 = load i8*, i8** %3
%24 = load i32, i32* %4
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds i8, i8* %23, i64 %25
%27 = load i8, i8* %26
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 0
br i1 %29, label %66, label %30
30: ; preds = %22
%31 = load i8*, i8** %3
%32 = load i32, i32* %4
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i8, i8* %31, i64 %33
%35 = load i8, i8* %34
%36 = sext i8 %35 to i32
%37 = icmp eq i32 %36, 9
br i1 %37, label %66, label %38
38: ; preds = %30
%39 = load i8*, i8** %3
%40 = load i32, i32* %4
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %39, i64 %41
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = icmp eq i32 %44, 35
br i1 %45, label %66, label %46
46: ; preds = %38
%47 = load i8*, i8** %3
%48 = load i32, i32* %4
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds i8, i8* %47, i64 %49
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
%53 = icmp eq i32 %52, 47
br i1 %53, label %66, label %54
54: ; preds = %46
%55 = load i8*, i8** %3
%56 = load i32, i32* %4
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8, i8* %55, i64 %57
%59 = load i8, i8* %58
%60 = sext i8 %59 to i32
%61 = icmp eq i32 %60, 42
br i1 %61, label %66, label %62
62: ; preds = %54
%63 = load i8*, i8** %3
%64 = call i64 @is_matching(i8* %63, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0))
%65 = icmp ne i64 %64, 0
br i1 %65, label %66, label %67
66: ; preds = %62, %54, %46, %38, %30, %22, %14, %1
store i32 0, i32* %2
br label %445
67: ; preds = %62
br label %68
68: ; preds = %167, %67
%69 = load i8*, i8** %3
%70 = load i32, i32* %4
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i8, i8* %69, i64 %71
%73 = load i8, i8* %72
%74 = sext i8 %73 to i32
%75 = icmp ne i32 %74, 9
br i1 %75, label %76, label %100
76: ; preds = %68
%77 = load i8*, i8** %3
%78 = load i32, i32* %4
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i8, i8* %77, i64 %79
%81 = load i8, i8* %80
%82 = sext i8 %81 to i32
%83 = icmp ne i32 %82, 32
br i1 %83, label %84, label %100
84: ; preds = %76
%85 = load i8*, i8** %3
%86 = load i32, i32* %4
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds i8, i8* %85, i64 %87
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
%91 = icmp ne i32 %90, 10
br i1 %91, label %92, label %100
92: ; preds = %84
%93 = load i8*, i8** %3
%94 = load i32, i32* %4
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds i8, i8* %93, i64 %95
%97 = load i8, i8* %96
%98 = sext i8 %97 to i32
%99 = icmp ne i32 %98, 0
br label %100
100: ; preds = %92, %84, %76, %68
%101 = phi i1 [ false, %84 ], [ false, %76 ], [ false, %68 ], [ %99, %92 ]
br i1 %101, label %102, label %170
102: ; preds = %100
%103 = load i8*, i8** %3
%104 = load i32, i32* %4
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds i8, i8* %103, i64 %105
%107 = load i8, i8* %106
%108 = sext i8 %107 to i32
%109 = icmp eq i32 %108, 40
br i1 %109, label %166, label %110
110: ; preds = %102
%111 = load i8*, i8** %3
%112 = load i32, i32* %4
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i8, i8* %111, i64 %113
%115 = load i8, i8* %114
%116 = sext i8 %115 to i32
%117 = icmp eq i32 %116, 41
br i1 %117, label %166, label %118
118: ; preds = %110
%119 = load i8*, i8** %3
%120 = load i32, i32* %4
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i8, i8* %119, i64 %121
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = icmp eq i32 %124, 123
br i1 %125, label %166, label %126
126: ; preds = %118
%127 = load i8*, i8** %3
%128 = load i32, i32* %4
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds i8, i8* %127, i64 %129
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = icmp eq i32 %132, 125
br i1 %133, label %166, label %134
134: ; preds = %126
%135 = load i8*, i8** %3
%136 = load i32, i32* %4
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i8, i8* %135, i64 %137
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = icmp eq i32 %140, 61
br i1 %141, label %166, label %142
142: ; preds = %134
%143 = load i8*, i8** %3
%144 = load i32, i32* %4
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i8, i8* %143, i64 %145
%147 = load i8, i8* %146
%148 = sext i8 %147 to i32
%149 = icmp eq i32 %148, 43
br i1 %149, label %166, label %150
150: ; preds = %142
%151 = load i8*, i8** %3
%152 = load i32, i32* %4
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds i8, i8* %151, i64 %153
%155 = load i8, i8* %154
%156 = sext i8 %155 to i32
%157 = icmp eq i32 %156, 39
br i1 %157, label %166, label %158
158: ; preds = %150
%159 = load i8*, i8** %3
%160 = load i32, i32* %4
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds i8, i8* %159, i64 %161
%163 = load i8, i8* %162
%164 = sext i8 %163 to i32
%165 = icmp eq i32 %164, 34
br i1 %165, label %166, label %167
166: ; preds = %158, %150, %142, %134, %126, %118, %110, %102
store i32 0, i32* %2
br label %445
167: ; preds = %158
%168 = load i32, i32* %4
%169 = add nsw i32 %168, 1
store i32 %169, i32* %4
br label %68
170: ; preds = %100
br label %171
171: ; preds = %230, %170
%172 = load i8*, i8** %3
%173 = load i32, i32* %4
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds i8, i8* %172, i64 %174
%176 = load i8, i8* %175
%177 = sext i8 %176 to i32
%178 = icmp ne i32 %177, 123
br i1 %178, label %179, label %187
179: ; preds = %171
%180 = load i8*, i8** %3
%181 = load i32, i32* %4
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i8, i8* %180, i64 %182
%184 = load i8, i8* %183
%185 = sext i8 %184 to i32
%186 = icmp ne i32 %185, 0
br label %187
187: ; preds = %179, %171
%188 = phi i1 [ false, %171 ], [ %186, %179 ]
br i1 %188, label %189, label %233
189: ; preds = %187
%190 = load i8*, i8** %3
%191 = load i32, i32* %4
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds i8, i8* %190, i64 %192
%194 = load i8, i8* %193
%195 = sext i8 %194 to i32
%196 = icmp eq i32 %195, 61
br i1 %196, label %229, label %197
197: ; preds = %189
%198 = load i8*, i8** %3
%199 = load i32, i32* %4
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds i8, i8* %198, i64 %200
%202 = load i8, i8* %201
%203 = sext i8 %202 to i32
%204 = icmp eq i32 %203, 43
br i1 %204, label %229, label %205
205: ; preds = %197
%206 = load i8*, i8** %3
%207 = load i32, i32* %4
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds i8, i8* %206, i64 %208
%210 = load i8, i8* %209
%211 = sext i8 %210 to i32
%212 = icmp eq i32 %211, 39
br i1 %212, label %229, label %213
213: ; preds = %205
%214 = load i8*, i8** %3
%215 = load i32, i32* %4
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds i8, i8* %214, i64 %216
%218 = load i8, i8* %217
%219 = sext i8 %218 to i32
%220 = icmp eq i32 %219, 34
br i1 %220, label %229, label %221
221: ; preds = %213
%222 = load i8*, i8** %3
%223 = load i32, i32* %4
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds i8, i8* %222, i64 %224
%226 = load i8, i8* %225
%227 = sext i8 %226 to i32
%228 = icmp eq i32 %227, 59
br i1 %228, label %229, label %230
229: ; preds = %221, %213, %205, %197, %189
store i32 0, i32* %2
br label %445
230: ; preds = %221
%231 = load i32, i32* %4
%232 = add nsw i32 %231, 1
store i32 %232, i32* %4
br label %171
233: ; preds = %187
%234 = load i32, i32* %4
%235 = add nsw i32 %234, -1
store i32 %235, i32* %4
br label %236
236: ; preds = %265, %233
%237 = load i8*, i8** %3
%238 = load i32, i32* %4
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds i8, i8* %237, i64 %239
%241 = load i8, i8* %240
%242 = sext i8 %241 to i32
%243 = icmp eq i32 %242, 10
br i1 %243, label %260, label %244
244: ; preds = %236
%245 = load i8*, i8** %3
%246 = load i32, i32* %4
%247 = sext i32 %246 to i64
%248 = getelementptr inbounds i8, i8* %245, i64 %247
%249 = load i8, i8* %248
%250 = sext i8 %249 to i32
%251 = icmp eq i32 %250, 32
br i1 %251, label %260, label %252
252: ; preds = %244
%253 = load i8*, i8** %3
%254 = load i32, i32* %4
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds i8, i8* %253, i64 %255
%257 = load i8, i8* %256
%258 = sext i8 %257 to i32
%259 = icmp eq i32 %258, 9
br i1 %259, label %260, label %263
260: ; preds = %252, %244, %236
%261 = load i32, i32* %4
%262 = icmp sgt i32 %261, 0
br label %263
263: ; preds = %260, %252
%264 = phi i1 [ false, %252 ], [ %262, %260 ]
br i1 %264, label %265, label %268
265: ; preds = %263
%266 = load i32, i32* %4
%267 = add nsw i32 %266, -1
store i32 %267, i32* %4
br label %236
268: ; preds = %263
br label %269
269: ; preds = %325, %268
%270 = load i8*, i8** %3
%271 = load i32, i32* %4
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds i8, i8* %270, i64 %272
%274 = load i8, i8* %273
%275 = sext i8 %274 to i32
%276 = icmp ne i32 %275, 9
br i1 %276, label %277, label %293
277: ; preds = %269
%278 = load i8*, i8** %3
%279 = load i32, i32* %4
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds i8, i8* %278, i64 %280
%282 = load i8, i8* %281
%283 = sext i8 %282 to i32
%284 = icmp ne i32 %283, 32
br i1 %284, label %285, label %293
285: ; preds = %277
%286 = load i8*, i8** %3
%287 = load i32, i32* %4
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds i8, i8* %286, i64 %288
%290 = load i8, i8* %289
%291 = sext i8 %290 to i32
%292 = icmp ne i32 %291, 10
br i1 %292, label %297, label %293
293: ; preds = %285, %277, %269
%294 = load i32, i32* %5
%295 = load i32, i32* %6
%296 = icmp ne i32 %294, %295
br i1 %296, label %297, label %300
297: ; preds = %293, %285
%298 = load i32, i32* %4
%299 = icmp sgt i32 %298, 0
br label %300
300: ; preds = %297, %293
%301 = phi i1 [ false, %293 ], [ %299, %297 ]
br i1 %301, label %302, label %328
302: ; preds = %300
%303 = load i8*, i8** %3
%304 = load i32, i32* %4
%305 = sext i32 %304 to i64
%306 = getelementptr inbounds i8, i8* %303, i64 %305
%307 = load i8, i8* %306
%308 = sext i8 %307 to i32
%309 = icmp eq i32 %308, 40
br i1 %309, label %310, label %313
310: ; preds = %302
%311 = load i32, i32* %5
%312 = add nsw i32 %311, 1
store i32 %312, i32* %5
br label %325
313: ; preds = %302
%314 = load i8*, i8** %3
%315 = load i32, i32* %4
%316 = sext i32 %315 to i64
%317 = getelementptr inbounds i8, i8* %314, i64 %316
%318 = load i8, i8* %317
%319 = sext i8 %318 to i32
%320 = icmp eq i32 %319, 41
br i1 %320, label %321, label %324
321: ; preds = %313
%322 = load i32, i32* %5
%323 = add nsw i32 %322, -1
store i32 %323, i32* %5
br label %324
324: ; preds = %321, %313
br label %325
325: ; preds = %324, %310
%326 = load i32, i32* %4
%327 = add nsw i32 %326, -1
store i32 %327, i32* %4
br label %269
328: ; preds = %300
%329 = load i32, i32* %4
%330 = icmp eq i32 %329, 0
br i1 %330, label %331, label %334
331: ; preds = %328
%332 = load i32, i32* %5
%333 = icmp ne i32 %332, 0
br i1 %333, label %343, label %334
334: ; preds = %331, %328
%335 = load i8*, i8** %3
%336 = load i32, i32* %4
%337 = add nsw i32 %336, 1
%338 = sext i32 %337 to i64
%339 = getelementptr inbounds i8, i8* %335, i64 %338
%340 = load i8, i8* %339
%341 = sext i8 %340 to i32
%342 = icmp eq i32 %341, 40
br i1 %342, label %343, label %344
343: ; preds = %334, %331
store i32 0, i32* %2
br label %445
344: ; preds = %334
%345 = load i32, i32* %4
%346 = add nsw i32 %345, 1
store i32 %346, i32* %4
br label %347
347: ; preds = %430, %344
%348 = load i8*, i8** %3
%349 = load i32, i32* %4
%350 = sext i32 %349 to i64
%351 = getelementptr inbounds i8, i8* %348, i64 %350
%352 = load i8, i8* %351
%353 = sext i8 %352 to i32
%354 = icmp ne i32 %353, 0
br i1 %354, label %355, label %363
355: ; preds = %347
%356 = load i8*, i8** %3
%357 = load i32, i32* %4
%358 = sext i32 %357 to i64
%359 = getelementptr inbounds i8, i8* %356, i64 %358
%360 = load i8, i8* %359
%361 = sext i8 %360 to i32
%362 = icmp ne i32 %361, 123
br label %363
363: ; preds = %355, %347
%364 = phi i1 [ false, %347 ], [ %362, %355 ]
br i1 %364, label %365, label %433
365: ; preds = %363
%366 = load i8*, i8** %3
%367 = load i32, i32* %4
%368 = sext i32 %367 to i64
%369 = getelementptr inbounds i8, i8* %366, i64 %368
%370 = load i8, i8* %369
%371 = sext i8 %370 to i32
%372 = icmp eq i32 %371, 59
br i1 %372, label %405, label %373
373: ; preds = %365
%374 = load i8*, i8** %3
%375 = load i32, i32* %4
%376 = sext i32 %375 to i64
%377 = getelementptr inbounds i8, i8* %374, i64 %376
%378 = load i8, i8* %377
%379 = sext i8 %378 to i32
%380 = icmp eq i32 %379, 61
br i1 %380, label %405, label %381
381: ; preds = %373
%382 = load i8*, i8** %3
%383 = load i32, i32* %4
%384 = sext i32 %383 to i64
%385 = getelementptr inbounds i8, i8* %382, i64 %384
%386 = load i8, i8* %385
%387 = sext i8 %386 to i32
%388 = icmp eq i32 %387, 43
br i1 %388, label %405, label %389
389: ; preds = %381
%390 = load i8*, i8** %3
%391 = load i32, i32* %4
%392 = sext i32 %391 to i64
%393 = getelementptr inbounds i8, i8* %390, i64 %392
%394 = load i8, i8* %393
%395 = sext i8 %394 to i32
%396 = icmp eq i32 %395, 34
br i1 %396, label %405, label %397
397: ; preds = %389
%398 = load i8*, i8** %3
%399 = load i32, i32* %4
%400 = sext i32 %399 to i64
%401 = getelementptr inbounds i8, i8* %398, i64 %400
%402 = load i8, i8* %401
%403 = sext i8 %402 to i32
%404 = icmp eq i32 %403, 39
br i1 %404, label %405, label %406
405: ; preds = %397, %389, %381, %373, %365
store i32 0, i32* %2
br label %445
406: ; preds = %397
%407 = load i8*, i8** %3
%408 = load i32, i32* %4
%409 = sext i32 %408 to i64
%410 = getelementptr inbounds i8, i8* %407, i64 %409
%411 = load i8, i8* %410
%412 = sext i8 %411 to i32
%413 = icmp eq i32 %412, 40
br i1 %413, label %414, label %417
414: ; preds = %406
%415 = load i32, i32* %5
%416 = add nsw i32 %415, 1
store i32 %416, i32* %5
br label %429
417: ; preds = %406
%418 = load i8*, i8** %3
%419 = load i32, i32* %4
%420 = sext i32 %419 to i64
%421 = getelementptr inbounds i8, i8* %418, i64 %420
%422 = load i8, i8* %421
%423 = sext i8 %422 to i32
%424 = icmp eq i32 %423, 41
br i1 %424, label %425, label %428
425: ; preds = %417
%426 = load i32, i32* %6
%427 = add nsw i32 %426, 1
store i32 %427, i32* %6
br label %428
428: ; preds = %425, %417
br label %429
429: ; preds = %428, %414
br label %430
430: ; preds = %429
%431 = load i32, i32* %4
%432 = add nsw i32 %431, 1
store i32 %432, i32* %4
br label %347
433: ; preds = %363
%434 = load i32, i32* %5
%435 = icmp eq i32 %434, 0
br i1 %435, label %443, label %436
436: ; preds = %433
%437 = load i32, i32* %6
%438 = icmp eq i32 %437, 0
br i1 %438, label %443, label %439
439: ; preds = %436
%440 = load i32, i32* %6
%441 = load i32, i32* %5
%442 = icmp ne i32 %440, %441
br i1 %442, label %443, label %444
443: ; preds = %439, %436, %433
store i32 0, i32* %2
br label %445
444: ; preds = %439
store i32 1, i32* %2
br label %445
445: ; preds = %444, %443, %405, %343, %229, %166, %66
%446 = load i32, i32* %2
ret i32 %446
}

LLVM IR (-O2):
@.str = [8 x i8] c"static \00"
define i32 @is_func(i8* %0) {
%2 = load i8, i8* %0
switch i8 %2, label %3 [
i8 10, label %94
i8 32, label %94
i8 0, label %94
i8 9, label %94
i8 35, label %94
i8 47, label %94
i8 42, label %94
]
3: ; preds = %1
%4 = tail call i64 @is_matching(i8* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0))
%5 = icmp eq i64 %4, 0
br i1 %5, label %6, label %94
6: ; preds = %3, %10
%7 = phi i64 [ %11, %10 ], [ 0, %3 ]
%8 = getelementptr inbounds i8, i8* %0, i64 %7
%9 = load i8, i8* %8
switch i8 %9, label %10 [
i8 9, label %12
i8 32, label %12
i8 10, label %12
i8 0, label %12
i8 40, label %94
i8 41, label %94
i8 123, label %94
i8 125, label %94
i8 61, label %94
i8 43, label %94
i8 39, label %94
i8 34, label %94
]
10: ; preds = %6
%11 = add nuw i64 %7, 1
br label %6
12: ; preds = %6, %6, %6, %6
%13 = and i64 %7, 4294967295
br label %14
14: ; preds = %18, %12
%15 = phi i64 [ %19, %18 ], [ %13, %12 ]
%16 = getelementptr inbounds i8, i8* %0, i64 %15
%17 = load i8, i8* %16
switch i8 %17, label %18 [
i8 123, label %20
i8 0, label %20
i8 61, label %94
i8 43, label %94
i8 39, label %94
i8 34, label %94
i8 59, label %94
]
18: ; preds = %14
%19 = add nuw i64 %15, 1
br label %14
20: ; preds = %14, %14
%21 = and i64 %15, 4294967295
br label %22
22: ; preds = %31, %20
%23 = phi i64 [ %21, %20 ], [ %24, %31 ]
%24 = add nsw i64 %23, -1
%25 = getelementptr inbounds i8, i8* %0, i64 %24
%26 = load i8, i8* %25
switch i8 %26, label %27 [
i8 10, label %32
i8 32, label %32
]
27: ; preds = %22
%28 = icmp eq i8 %26, 9
%29 = icmp ugt i64 %23, 1
%30 = select i1 %28, i1 %29, i1 false
br i1 %30, label %31, label %34
31: ; preds = %27, %32
br label %22
32: ; preds = %22, %22
%33 = icmp ugt i64 %23, 1
br i1 %33, label %31, label %34
34: ; preds = %27, %32
%35 = shl i64 %24, 32
%36 = ashr exact i64 %35, 32
br label %37
37: ; preds = %53, %34
%38 = phi i64 [ %55, %53 ], [ %36, %34 ]
%39 = phi i32 [ %54, %53 ], [ 0, %34 ]
%40 = getelementptr inbounds i8, i8* %0, i64 %38
%41 = load i8, i8* %40
switch i8 %41, label %46 [
i8 9, label %42
i8 32, label %42
i8 10, label %42
]
42: ; preds = %37, %37, %37
%43 = icmp ne i32 %39, 0
%44 = icmp sgt i64 %38, 0
%45 = select i1 %43, i1 %44, i1 false
br i1 %45, label %48, label %56
46: ; preds = %37
%47 = icmp sgt i64 %38, 0
br i1 %47, label %48, label %56
48: ; preds = %42, %46
switch i8 %41, label %53 [
i8 40, label %49
i8 41, label %51
]
49: ; preds = %48
%50 = add nsw i32 %39, 1
br label %53
51: ; preds = %48
%52 = add nsw i32 %39, -1
br label %53
53: ; preds = %48, %51, %49
%54 = phi i32 [ %50, %49 ], [ %52, %51 ], [ %39, %48 ]
%55 = add nsw i64 %38, -1
br label %37
56: ; preds = %42, %46
%57 = trunc i64 %38 to i32
%58 = icmp eq i32 %57, 0
%59 = icmp ne i32 %39, 0
%60 = select i1 %58, i1 %59, i1 false
br i1 %60, label %94, label %61
61: ; preds = %56
%62 = shl i64 %38, 32
%63 = add i64 %62, 4294967296
%64 = ashr exact i64 %63, 32
%65 = getelementptr inbounds i8, i8* %0, i64 %64
%66 = load i8, i8* %65
%67 = icmp eq i8 %66, 40
br i1 %67, label %94, label %68
68: ; preds = %61
%69 = shl i64 %38, 32
%70 = ashr exact i64 %69, 32
br label %71
71: ; preds = %83, %68
%72 = phi i64 [ %80, %83 ], [ %70, %68 ]
%73 = phi i32 [ %84, %83 ], [ %39, %68 ]
%74 = phi i32 [ %77, %83 ], [ 0, %68 ]
br label %75
75: ; preds = %71, %85
%76 = phi i64 [ %72, %71 ], [ %80, %85 ]
%77 = phi i32 [ %74, %71 ], [ %86, %85 ]
br label %78
78: ; preds = %75, %78
%79 = phi i64 [ %80, %78 ], [ %76, %75 ]
%80 = add i64 %79, 1
%81 = getelementptr inbounds i8, i8* %0, i64 %80
%82 = load i8, i8* %81
switch i8 %82, label %78 [
i8 0, label %87
i8 123, label %87
i8 59, label %94
i8 61, label %94
i8 43, label %94
i8 34, label %94
i8 39, label %94
i8 40, label %83
i8 41, label %85
]
83: ; preds = %78
%84 = add nsw i32 %73, 1
br label %71
85: ; preds = %78
%86 = add nsw i32 %77, 1
br label %75
87: ; preds = %78, %78
%88 = icmp ne i32 %73, 0
%89 = icmp ne i32 %77, 0
%90 = select i1 %88, i1 %89, i1 false
%91 = icmp eq i32 %77, %73
%92 = select i1 %90, i1 %91, i1 false
%93 = zext i1 %92 to i32
br label %94
94: ; preds = %6, %6, %6, %6, %6, %6, %6, %6, %14, %14, %14, %14, %14, %78, %78, %78, %78, %78, %87, %61, %56, %3, %1, %1, %1, %1, %1, %1, %1
%95 = phi i32 [ 0, %1 ], [ 0, %1 ], [ 0, %1 ], [ 0, %1 ], [ 0, %1 ], [ 0, %1 ], [ 0, %1 ], [ 0, %3 ], [ 0, %56 ], [ 0, %61 ], [ %93, %87 ], [ 0, %78 ], [ 0, %78 ], [ 0, %78 ], [ 0, %78 ], [ 0, %78 ], [ 0, %14 ], [ 0, %14 ], [ 0, %14 ], [ 0, %14 ], [ 0, %14 ], [ 0, %6 ], [ 0, %6 ], [ 0, %6 ], [ 0, %6 ], [ 0, %6 ], [ 0, %6 ], [ 0, %6 ], [ 0, %6 ]
ret i32 %95
}