#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 strlen(char const *);
int is_source_file(const char *fn) {
  int retb = 0;
  int len = 0;
  len = strlen(fn);
  if (len < 3)
    return 0;
  if ((fn[len - 2] == '.') &&
      ((fn[len - 1] == 'c') || (fn[len - 1] == 'h') || (fn[len - 1] == 'm') ||
       (fn[len - 1] == 'M') || (fn[len - 1] == 'C') || (fn[len - 1] == 'H'))) {
    return 1;
  }
  if (len < 4)
    return 0;
  if ((fn[len - 3] == '.') &&
      (((fn[len - 3] == ('m')) && (fn[len - 2] == ('m'))) ||
       ((fn[len - 3] == ('c')) && (fn[len - 2] == ('c'))) ||
       ((fn[len - 3] == ('h')) && (fn[len - 2] == ('h'))) ||
       ((fn[len - 3] == ('h')) && (fn[len - 2] == ('p'))))) {
    return 1;
  }
  if (len < 5)
    return 0;
  if ((fn[len - 4] == '.') &&
      (((fn[len - 3] == ('c')) && (fn[len - 2] == ('x')) &&
        (fn[len - 1] == ('x'))) ||
       ((fn[len - 3] == ('c')) && (fn[len - 2] == ('p')) &&
        (fn[len - 1] == ('p'))) ||
       ((fn[len - 3] == ('C')) && (fn[len - 2] == ('P')) &&
        (fn[len - 1] == ('P'))) ||
       ((fn[len - 3] == ('c')) && (fn[len - 2] == ('+')) &&
        (fn[len - 1] == ('+'))) ||
       ((fn[len - 3] == ('h')) && (fn[len - 2] == ('x')) &&
        (fn[len - 1] == ('x'))) ||
       ((fn[len - 3] == ('h')) && (fn[len - 2] == ('p')) &&
        (fn[len - 1] == ('p'))) ||
       ((fn[len - 3] == ('H')) && (fn[len - 2] == ('P')) &&
        (fn[len - 1] == ('P'))) ||
       ((fn[len - 3] == ('h')) && (fn[len - 2] == ('+')) &&
        (fn[len - 1] == ('+'))) ||
       ((fn[len - 3] == ('t')) && (fn[len - 2] == ('c')) &&
        (fn[len - 1] == ('c'))) ||
       ((fn[len - 3] == ('i')) && (fn[len - 2] == ('n')) &&
        (fn[len - 1] == ('c'))))) {
    return 1;
  }
  return retb;
}


x86 assembly (clang, -O0):
<is_source_file>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    114c <is_source_file+0x3c>
movl   $0x0,-0x4(%rbp)
jmp    1668 <is_source_file+0x558>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    120e <is_source_file+0xfe>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
je     1202 <is_source_file+0xf2>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x68,%eax
je     1202 <is_source_file+0xf2>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6d,%eax
je     1202 <is_source_file+0xf2>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x4d,%eax
je     1202 <is_source_file+0xf2>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x43,%eax
je     1202 <is_source_file+0xf2>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x48,%eax
jne    120e <is_source_file+0xfe>
movl   $0x1,-0x4(%rbp)
jmp    1668 <is_source_file+0x558>
cmpl   $0x4,-0x18(%rbp)
jge    1224 <is_source_file+0x114>
movl   $0x0,-0x4(%rbp)
jmp    1668 <is_source_file+0x558>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    131a <is_source_file+0x20a>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6d,%eax
jne    1272 <is_source_file+0x162>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6d,%eax
je     130e <is_source_file+0x1fe>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
jne    12a6 <is_source_file+0x196>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
je     130e <is_source_file+0x1fe>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x68,%eax
jne    12da <is_source_file+0x1ca>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x68,%eax
je     130e <is_source_file+0x1fe>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x68,%eax
jne    131a <is_source_file+0x20a>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x70,%eax
jne    131a <is_source_file+0x20a>
movl   $0x1,-0x4(%rbp)
jmp    1668 <is_source_file+0x558>
cmpl   $0x5,-0x18(%rbp)
jge    1330 <is_source_file+0x220>
movl   $0x0,-0x4(%rbp)
jmp    1668 <is_source_file+0x558>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    1662 <is_source_file+0x552>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
jne    1398 <is_source_file+0x288>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x78,%eax
jne    1398 <is_source_file+0x288>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x78,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
jne    13e6 <is_source_file+0x2d6>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x70,%eax
jne    13e6 <is_source_file+0x2d6>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x70,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x43,%eax
jne    1434 <is_source_file+0x324>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x50,%eax
jne    1434 <is_source_file+0x324>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x50,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
jne    1482 <is_source_file+0x372>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
jne    1482 <is_source_file+0x372>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x68,%eax
jne    14d0 <is_source_file+0x3c0>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x78,%eax
jne    14d0 <is_source_file+0x3c0>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x78,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x68,%eax
jne    151e <is_source_file+0x40e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x70,%eax
jne    151e <is_source_file+0x40e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x70,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x48,%eax
jne    156c <is_source_file+0x45c>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x50,%eax
jne    156c <is_source_file+0x45c>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x50,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x68,%eax
jne    15ba <is_source_file+0x4aa>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
jne    15ba <is_source_file+0x4aa>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x74,%eax
jne    1608 <is_source_file+0x4f8>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
jne    1608 <is_source_file+0x4f8>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
je     1656 <is_source_file+0x546>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x69,%eax
jne    1662 <is_source_file+0x552>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6e,%eax
jne    1662 <is_source_file+0x552>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
jne    1662 <is_source_file+0x552>
movl   $0x1,-0x4(%rbp)
jmp    1668 <is_source_file+0x558>
mov    -0x14(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_source_file>:
push   %rbx
mov    %rdi,%rbx
call   1030 <strlen@plt>
cmp    $0x3,%eax
jl     11e2 <is_source_file+0xd2>
lea    -0x2(%rax),%ecx
mov    (%rbx,%rcx,1),%sil
cmp    $0x2e,%sil
jne    1159 <is_source_file+0x49>
lea    -0x1(%rax),%ecx
mov    (%rbx,%rcx,1),%dl
add    $0xbd,%dl
cmp    $0x2a,%dl
ja     1159 <is_source_file+0x49>
mov    $0x1,%ecx
movzbl %dl,%edx
movabs $0x42100000421,%rdi
bt     %rdx,%rdi
jb     11e4 <is_source_file+0xd4>
cmp    $0x4,%eax
jb     11e2 <is_source_file+0xd2>
je     11e2 <is_source_file+0xd2>
lea    -0x4(%rax),%ecx
cmpb   $0x2e,(%rbx,%rcx,1)
jne    11e2 <is_source_file+0xd2>
lea    -0x3(%rax),%ecx
mov    (%rbx,%rcx,1),%cl
add    $0xbd,%cl
cmp    $0x31,%cl
ja     11e2 <is_source_file+0xd2>
movzbl %cl,%ecx
lea    0xe7b(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
cmp    $0x50,%sil
jne    11e2 <is_source_file+0xd2>
add    $0xffffffff,%eax
mov    $0x1,%ecx
cmpb   $0x50,(%rbx,%rax,1)
jne    11e2 <is_source_file+0xd2>
jmp    11e4 <is_source_file+0xd4>
cmp    $0x2b,%sil
je     11e8 <is_source_file+0xd8>
cmp    $0x70,%sil
je     11f8 <is_source_file+0xe8>
cmp    $0x78,%sil
jne    11e2 <is_source_file+0xd2>
add    $0xffffffff,%eax
mov    $0x1,%ecx
cmpb   $0x78,(%rbx,%rax,1)
jne    11e2 <is_source_file+0xd2>
jmp    11e4 <is_source_file+0xd4>
cmp    $0x6e,%sil
je     11d4 <is_source_file+0xc4>
jmp    11e2 <is_source_file+0xd2>
cmp    $0x63,%sil
jne    11e2 <is_source_file+0xd2>
add    $0xffffffff,%eax
mov    $0x1,%ecx
cmpb   $0x63,(%rbx,%rax,1)
je     11e4 <is_source_file+0xd4>
xor    %ecx,%ecx
mov    %ecx,%eax
pop    %rbx
ret
add    $0xffffffff,%eax
mov    $0x1,%ecx
cmpb   $0x2b,(%rbx,%rax,1)
jne    11e2 <is_source_file+0xd2>
jmp    11e4 <is_source_file+0xd4>
add    $0xffffffff,%eax
mov    $0x1,%ecx
cmpb   $0x70,(%rbx,%rax,1)
jne    11e2 <is_source_file+0xd2>
jmp    11e4 <is_source_file+0xd4>

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

LLVM IR (-O2):
define i32 @is_source_file(i8* %0) {
%2 = tail call i32 @strlen(i8* %0)
%3 = icmp slt i32 %2, 3
br i1 %3, label %101, label %4
4: ; preds = %1
%5 = add nsw i32 %2, -2
%6 = zext i32 %5 to i64
%7 = getelementptr inbounds i8, i8* %0, i64 %6
%8 = load i8, i8* %7
%9 = icmp eq i8 %8, 46
br i1 %9, label %10, label %15
10: ; preds = %4
%11 = add nsw i32 %2, -1
%12 = zext i32 %11 to i64
%13 = getelementptr inbounds i8, i8* %0, i64 %12
%14 = load i8, i8* %13
switch i8 %14, label %15 [
i8 99, label %101
i8 104, label %101
i8 109, label %101
i8 77, label %101
i8 67, label %101
i8 72, label %101
]
15: ; preds = %10, %4
%16 = icmp ult i32 %2, 4
br i1 %16, label %101, label %17
17: ; preds = %15
%18 = add nsw i32 %2, -3
%19 = zext i32 %18 to i64
%20 = getelementptr inbounds i8, i8* %0, i64 %19
%21 = load i8, i8* %20
%22 = icmp eq i32 %2, 4
br i1 %22, label %101, label %23
23: ; preds = %17
%24 = add nsw i32 %2, -4
%25 = zext i32 %24 to i64
%26 = getelementptr inbounds i8, i8* %0, i64 %25
%27 = load i8, i8* %26
%28 = icmp eq i8 %27, 46
br i1 %28, label %29, label %100
29: ; preds = %23
switch i8 %21, label %100 [
i8 99, label %30
i8 67, label %43
i8 104, label %57
i8 72, label %70
i8 116, label %84
i8 105, label %92
]
30: ; preds = %29
switch i8 %8, label %100 [
i8 120, label %31
i8 112, label %37
i8 43, label %51
]
31: ; preds = %30
%32 = add nsw i32 %2, -1
%33 = zext i32 %32 to i64
%34 = getelementptr inbounds i8, i8* %0, i64 %33
%35 = load i8, i8* %34
%36 = icmp eq i8 %35, 120
br i1 %36, label %101, label %100
37: ; preds = %30
%38 = add nsw i32 %2, -1
%39 = zext i32 %38 to i64
%40 = getelementptr inbounds i8, i8* %0, i64 %39
%41 = load i8, i8* %40
%42 = icmp eq i8 %41, 112
br i1 %42, label %101, label %100
43: ; preds = %29
%44 = icmp eq i8 %8, 80
br i1 %44, label %45, label %100
45: ; preds = %43
%46 = add nsw i32 %2, -1
%47 = zext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %0, i64 %47
%49 = load i8, i8* %48
%50 = icmp eq i8 %49, 80
br i1 %50, label %101, label %100
51: ; preds = %30
%52 = add nsw i32 %2, -1
%53 = zext i32 %52 to i64
%54 = getelementptr inbounds i8, i8* %0, i64 %53
%55 = load i8, i8* %54
%56 = icmp eq i8 %55, 43
br i1 %56, label %101, label %100
57: ; preds = %29
switch i8 %8, label %100 [
i8 120, label %58
i8 112, label %64
i8 43, label %78
]
58: ; preds = %57
%59 = add nsw i32 %2, -1
%60 = zext i32 %59 to i64
%61 = getelementptr inbounds i8, i8* %0, i64 %60
%62 = load i8, i8* %61
%63 = icmp eq i8 %62, 120
br i1 %63, label %101, label %100
64: ; preds = %57
%65 = add nsw i32 %2, -1
%66 = zext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %0, i64 %66
%68 = load i8, i8* %67
%69 = icmp eq i8 %68, 112
br i1 %69, label %101, label %100
70: ; preds = %29
%71 = icmp eq i8 %8, 80
br i1 %71, label %72, label %100
72: ; preds = %70
%73 = add nsw i32 %2, -1
%74 = zext i32 %73 to i64
%75 = getelementptr inbounds i8, i8* %0, i64 %74
%76 = load i8, i8* %75
%77 = icmp eq i8 %76, 80
br i1 %77, label %101, label %100
78: ; preds = %57
%79 = add nsw i32 %2, -1
%80 = zext i32 %79 to i64
%81 = getelementptr inbounds i8, i8* %0, i64 %80
%82 = load i8, i8* %81
%83 = icmp eq i8 %82, 43
br i1 %83, label %101, label %100
84: ; preds = %29
%85 = icmp eq i8 %8, 99
br i1 %85, label %86, label %100
86: ; preds = %84
%87 = add nsw i32 %2, -1
%88 = zext i32 %87 to i64
%89 = getelementptr inbounds i8, i8* %0, i64 %88
%90 = load i8, i8* %89
%91 = icmp eq i8 %90, 99
br i1 %91, label %101, label %100
92: ; preds = %29
%93 = icmp eq i8 %8, 110
br i1 %93, label %94, label %100
94: ; preds = %92
%95 = add nsw i32 %2, -1
%96 = zext i32 %95 to i64
%97 = getelementptr inbounds i8, i8* %0, i64 %96
%98 = load i8, i8* %97
%99 = icmp eq i8 %98, 99
br i1 %99, label %101, label %100
100: ; preds = %29, %57, %30, %58, %70, %72, %31, %37, %51, %45, %43, %64, %78, %84, %86, %94, %92, %23
br label %101
101: ; preds = %31, %37, %45, %51, %58, %64, %72, %78, %86, %94, %17, %15, %10, %10, %10, %10, %10, %10, %1, %100
%102 = phi i32 [ 0, %100 ], [ 0, %1 ], [ 1, %10 ], [ 1, %10 ], [ 1, %10 ], [ 1, %10 ], [ 1, %10 ], [ 1, %10 ], [ 0, %15 ], [ 0, %17 ], [ 1, %94 ], [ 1, %86 ], [ 1, %78 ], [ 1, %72 ], [ 1, %64 ], [ 1, %58 ], [ 1, %51 ], [ 1, %45 ], [ 1, %37 ], [ 1, %31 ]
ret i32 %102
}