#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*/ defineStartAndEnd(int *, int *, int);
scalar_t__ editDistanceS(char *, int, char *, int);
char *getPcontent();
int strlen(char *);
scalar_t__ strncmp(char *, char *, int);
int hasSpecialKeyWordsN(int offset, int limit) {
  int i;
  int offend;
  char *content = getPcontent();
  defineStartAndEnd(&offset, &offend, limit);
  for (i = offset; i < offend; i++) {
    if (content[i - 1] == ' ') {
      {
        if (strncmp("Fig.", content + i, strlen("Fig.")) == 0)
          return i + strlen("Fig.");
      };
      {
        if (strncmp("Fig,", content + i, strlen("Fig,")) == 0)
          return i + strlen("Fig,");
      };
      {
        if (strncmp("Figure", content + i, strlen("Figure")) == 0)
          return i + strlen("Figure");
      };
      {
        if (strncmp("Here ", content + i, strlen("Here ")) == 0)
          return i + strlen("Here ");
      };
      {
        if (strncmp("We ", content + i, strlen("We ")) == 0)
          return i + strlen("We ");
      };
      {
        if (strncmp("Are ", content + i, strlen("Are ")) == 0)
          return i + strlen("Are ");
      };
      {
        if (strncmp("An ", content + i, strlen("An ")) == 0)
          return i + strlen("An ");
      };
      {
        if (strncmp("Our ", content + i, strlen("Our ")) == 0)
          return i + strlen("Our ");
      };
      {
        if (editDistanceS("Samples ", strlen("Samples "), content + i,
                          strlen("Samples ")) <= 0)
          return i + strlen("Samples ");
      };
      {
        if (editDistanceS("A Proof of ", strlen("A Proof of "), content + i,
                          strlen("A Proof of ")) <= 0)
          return i + strlen("A Proof of ");
      };
      {
        if (editDistanceS("In this ", strlen("In this "), content + i,
                          strlen("In this ")) <= 0)
          return i + strlen("In this ");
      };
      {
        if (editDistanceS("is a ", strlen("is a "), content + i,
                          strlen("is a ")) <= 0)
          return i + strlen("is a ");
      };
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<hasSpecialKeyWordsN>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    $0x0,%al
call   1060 <getPcontent@plt>
mov    %rax,-0x20(%rbp)
mov    -0xc(%rbp),%edx
lea    -0x8(%rbp),%rdi
lea    -0x14(%rbp),%rsi
call   1040 <defineStartAndEnd@plt>
mov    -0x8(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1688 <hasSpecialKeyWordsN+0x538>
mov    -0x20(%rbp),%rax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1675 <hasSpecialKeyWordsN+0x525>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
lea    0xe42(%rip),%rdi
call   1050 <strlen@plt>
mov    -0x28(%rbp),%rsi
mov    %eax,%edx
lea    0xe30(%rip),%rdi
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1200 <hasSpecialKeyWordsN+0xb0>
mov    -0x10(%rbp),%eax
mov    %eax,-0x2c(%rbp)
lea    0xe14(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
lea    0xdef(%rip),%rdi
call   1050 <strlen@plt>
mov    -0x38(%rbp),%rsi
mov    %eax,%edx
lea    0xddd(%rip),%rdi
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1258 <hasSpecialKeyWordsN+0x108>
mov    -0x10(%rbp),%eax
mov    %eax,-0x3c(%rbp)
lea    0xdc1(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x3c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
lea    0xd9c(%rip),%rdi
call   1050 <strlen@plt>
mov    -0x48(%rbp),%rsi
mov    %eax,%edx
lea    0xd8a(%rip),%rdi
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    12b0 <hasSpecialKeyWordsN+0x160>
mov    -0x10(%rbp),%eax
mov    %eax,-0x4c(%rbp)
lea    0xd6e(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x4c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
lea    0xd4b(%rip),%rdi
call   1050 <strlen@plt>
mov    -0x58(%rbp),%rsi
mov    %eax,%edx
lea    0xd39(%rip),%rdi
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1308 <hasSpecialKeyWordsN+0x1b8>
mov    -0x10(%rbp),%eax
mov    %eax,-0x5c(%rbp)
lea    0xd1d(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x5c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x68(%rbp)
lea    0xcf9(%rip),%rdi
call   1050 <strlen@plt>
mov    -0x68(%rbp),%rsi
mov    %eax,%edx
lea    0xce7(%rip),%rdi
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1360 <hasSpecialKeyWordsN+0x210>
mov    -0x10(%rbp),%eax
mov    %eax,-0x6c(%rbp)
lea    0xccb(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x6c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x78(%rbp)
lea    0xca5(%rip),%rdi
call   1050 <strlen@plt>
mov    -0x78(%rbp),%rsi
mov    %eax,%edx
lea    0xc93(%rip),%rdi
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    13b8 <hasSpecialKeyWordsN+0x268>
mov    -0x10(%rbp),%eax
mov    %eax,-0x7c(%rbp)
lea    0xc77(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x7c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x88(%rbp)
lea    0xc4f(%rip),%rdi
call   1050 <strlen@plt>
mov    -0x88(%rbp),%rsi
mov    %eax,%edx
lea    0xc3a(%rip),%rdi
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    141c <hasSpecialKeyWordsN+0x2cc>
mov    -0x10(%rbp),%eax
mov    %eax,-0x8c(%rbp)
lea    0xc1b(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x8c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x98(%rbp)
lea    0xbef(%rip),%rdi
call   1050 <strlen@plt>
mov    -0x98(%rbp),%rsi
mov    %eax,%edx
lea    0xbda(%rip),%rdi
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1480 <hasSpecialKeyWordsN+0x330>
mov    -0x10(%rbp),%eax
mov    %eax,-0x9c(%rbp)
lea    0xbbb(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x9c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
lea    0xba2(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xac(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0xa8(%rbp)
lea    0xb7e(%rip),%rdi
call   1050 <strlen@plt>
mov    -0xac(%rbp),%esi
mov    -0xa8(%rbp),%rdx
mov    %eax,%ecx
lea    0xb63(%rip),%rdi
call   1070 <editDistanceS@plt>
cmp    $0x0,%rax
jg     14fc <hasSpecialKeyWordsN+0x3ac>
mov    -0x10(%rbp),%eax
mov    %eax,-0xb0(%rbp)
lea    0xb44(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0xb0(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
lea    0xb2f(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xbc(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0xb8(%rbp)
lea    0xb0b(%rip),%rdi
call   1050 <strlen@plt>
mov    -0xbc(%rbp),%esi
mov    -0xb8(%rbp),%rdx
mov    %eax,%ecx
lea    0xaf0(%rip),%rdi
call   1070 <editDistanceS@plt>
cmp    $0x0,%rax
jg     1578 <hasSpecialKeyWordsN+0x428>
mov    -0x10(%rbp),%eax
mov    %eax,-0xc0(%rbp)
lea    0xad1(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0xc0(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
lea    0xabf(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xcc(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0xc8(%rbp)
lea    0xa9b(%rip),%rdi
call   1050 <strlen@plt>
mov    -0xcc(%rbp),%esi
mov    -0xc8(%rbp),%rdx
mov    %eax,%ecx
lea    0xa80(%rip),%rdi
call   1070 <editDistanceS@plt>
cmp    $0x0,%rax
jg     15f4 <hasSpecialKeyWordsN+0x4a4>
mov    -0x10(%rbp),%eax
mov    %eax,-0xd0(%rbp)
lea    0xa61(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0xd0(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
lea    0xa4c(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xdc(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0xd8(%rbp)
lea    0xa28(%rip),%rdi
call   1050 <strlen@plt>
mov    -0xdc(%rbp),%esi
mov    -0xd8(%rbp),%rdx
mov    %eax,%ecx
lea    0xa0d(%rip),%rdi
call   1070 <editDistanceS@plt>
cmp    $0x0,%rax
jg     1670 <hasSpecialKeyWordsN+0x520>
mov    -0x10(%rbp),%eax
mov    %eax,-0xe0(%rbp)
lea    0x9ee(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0xe0(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    168f <hasSpecialKeyWordsN+0x53f>
jmp    1675 <hasSpecialKeyWordsN+0x525>
jmp    167a <hasSpecialKeyWordsN+0x52a>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1182 <hasSpecialKeyWordsN+0x32>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hasSpecialKeyWordsN>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %esi,%ebx
mov    %edi,0x4(%rsp)
xor    %ebp,%ebp
xor    %eax,%eax
call   1060 <getPcontent@plt>
mov    %rax,%r13
lea    0x4(%rsp),%rdi
mov    %rsp,%rsi
mov    %ebx,%edx
call   1040 <defineStartAndEnd@plt>
movslq 0x4(%rsp),%r14
mov    (%rsp),%eax
cmp    %eax,%r14d
jge    141f <hasSpecialKeyWordsN+0x2cf>
lea    0xe6c(%rip),%rbp
jmp    11b0 <hasSpecialKeyWordsN+0x60>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r14
movslq %eax,%rcx
cmp    %rcx,%r14
jge    13ad <hasSpecialKeyWordsN+0x25d>
cmpb   $0x20,-0x1(%r13,%r14,1)
jne    11a0 <hasSpecialKeyWordsN+0x50>
lea    (%r14,%r13,1),%r15
mov    %rbp,%rdi
call   1050 <strlen@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
mov    %eax,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xe24(%rip),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
mov    %eax,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13b1 <hasSpecialKeyWordsN+0x261>
lea    0xe04(%rip),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
mov    %eax,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13ba <hasSpecialKeyWordsN+0x26a>
lea    0xde6(%rip),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
mov    %eax,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13c3 <hasSpecialKeyWordsN+0x273>
lea    0xdc7(%rip),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
mov    %eax,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13cc <hasSpecialKeyWordsN+0x27c>
lea    0xda6(%rip),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
mov    %eax,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13d5 <hasSpecialKeyWordsN+0x285>
lea    0xd86(%rip),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
mov    %eax,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13de <hasSpecialKeyWordsN+0x28e>
lea    0xd65(%rip),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
mov    %eax,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13e7 <hasSpecialKeyWordsN+0x297>
lea    0xd45(%rip),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %eax,%r12d
mov    %rbx,%rdi
call   1050 <strlen@plt>
mov    %rbx,%rdi
mov    %r12d,%esi
mov    %r15,%rdx
mov    %eax,%ecx
call   1070 <editDistanceS@plt>
test   %rax,%rax
jle    13f0 <hasSpecialKeyWordsN+0x2a0>
mov    %rbp,%r12
lea    0xd18(%rip),%rbp
mov    %rbp,%rdi
call   1050 <strlen@plt>
mov    %eax,%ebx
mov    %rbp,%rdi
call   1050 <strlen@plt>
mov    %rbp,%rdi
mov    %ebx,%esi
mov    %r15,%rdx
mov    %eax,%ecx
call   1070 <editDistanceS@plt>
test   %rax,%rax
jle    13f9 <hasSpecialKeyWordsN+0x2a9>
lea    0xcf3(%rip),%rbp
mov    %rbp,%rdi
call   1050 <strlen@plt>
mov    %eax,%ebx
mov    %rbp,%rdi
call   1050 <strlen@plt>
mov    %rbp,%rdi
mov    %ebx,%esi
mov    %r15,%rdx
mov    %eax,%ecx
call   1070 <editDistanceS@plt>
test   %rax,%rax
jle    1402 <hasSpecialKeyWordsN+0x2b2>
lea    0xccb(%rip),%rbp
mov    %rbp,%rdi
call   1050 <strlen@plt>
mov    %eax,%ebx
mov    %rbp,%rdi
call   1050 <strlen@plt>
mov    %rbp,%rdi
mov    %ebx,%esi
mov    %r15,%rdx
mov    %eax,%ecx
call   1070 <editDistanceS@plt>
test   %rax,%rax
jle    140b <hasSpecialKeyWordsN+0x2bb>
mov    (%rsp),%eax
mov    %r12,%rbp
jmp    11a0 <hasSpecialKeyWordsN+0x50>
xor    %ebp,%ebp
jmp    141f <hasSpecialKeyWordsN+0x2cf>
lea    0xc4d(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc49(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc47(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc44(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc3f(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc3b(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc36(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc32(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc32(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc35(%rip),%rbp
jmp    1412 <hasSpecialKeyWordsN+0x2c2>
lea    0xc35(%rip),%rbp
mov    %rbp,%rdi
call   1050 <strlen@plt>
mov    %eax,%ebp
add    %r14d,%ebp
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [5 x i8] c"Fig.\00"
@.str.1 = [5 x i8] c"Fig,\00"
@.str.2 = [7 x i8] c"Figure\00"
@.str.3 = [6 x i8] c"Here \00"
@.str.4 = [4 x i8] c"We \00"
@.str.5 = [5 x i8] c"Are \00"
@.str.6 = [4 x i8] c"An \00"
@.str.7 = [5 x i8] c"Our \00"
@.str.8 = [9 x i8] c"Samples \00"
@.str.9 = [12 x i8] c"A Proof of \00"
@.str.10 = [9 x i8] c"In this \00"
@.str.11 = [6 x i8] c"is a \00"
define i32 @hasSpecialKeyWordsN(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i8*
store i32 %0, i32* %4
store i32 %1, i32* %5
%9 = call i8* (...) @getPcontent()
store i8* %9, i8** %8
%10 = load i32, i32* %5
%11 = call i32 @defineStartAndEnd(i32* %4, i32* %7, i32 %10)
%12 = load i32, i32* %4
store i32 %12, i32* %6
br label %13
13: ; preds = %176, %2
%14 = load i32, i32* %6
%15 = load i32, i32* %7
%16 = icmp slt i32 %14, %15
br i1 %16, label %17, label %179
17: ; preds = %13
%18 = load i8*, i8** %8
%19 = load i32, i32* %6
%20 = sub nsw i32 %19, 1
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %18, i64 %21
%23 = load i8, i8* %22
%24 = sext i8 %23 to i32
%25 = icmp eq i32 %24, 32
br i1 %25, label %26, label %175
26: ; preds = %17
%27 = load i8*, i8** %8
%28 = load i32, i32* %6
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8, i8* %27, i64 %29
%31 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%32 = call i64 @strncmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i8* %30, i32 %31)
%33 = icmp eq i64 %32, 0
br i1 %33, label %34, label %38
34: ; preds = %26
%35 = load i32, i32* %6
%36 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%37 = add nsw i32 %35, %36
store i32 %37, i32* %3
br label %180
38: ; preds = %26
%39 = load i8*, i8** %8
%40 = load i32, i32* %6
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %39, i64 %41
%43 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%44 = call i64 @strncmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %42, i32 %43)
%45 = icmp eq i64 %44, 0
br i1 %45, label %46, label %50
46: ; preds = %38
%47 = load i32, i32* %6
%48 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%49 = add nsw i32 %47, %48
store i32 %49, i32* %3
br label %180
50: ; preds = %38
%51 = load i8*, i8** %8
%52 = load i32, i32* %6
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i8, i8* %51, i64 %53
%55 = call i32 @strlen(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%56 = call i64 @strncmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i8* %54, i32 %55)
%57 = icmp eq i64 %56, 0
br i1 %57, label %58, label %62
58: ; preds = %50
%59 = load i32, i32* %6
%60 = call i32 @strlen(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%61 = add nsw i32 %59, %60
store i32 %61, i32* %3
br label %180
62: ; preds = %50
%63 = load i8*, i8** %8
%64 = load i32, i32* %6
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i8, i8* %63, i64 %65
%67 = call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%68 = call i64 @strncmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %66, i32 %67)
%69 = icmp eq i64 %68, 0
br i1 %69, label %70, label %74
70: ; preds = %62
%71 = load i32, i32* %6
%72 = call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%73 = add nsw i32 %71, %72
store i32 %73, i32* %3
br label %180
74: ; preds = %62
%75 = load i8*, i8** %8
%76 = load i32, i32* %6
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds i8, i8* %75, i64 %77
%79 = call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0))
%80 = call i64 @strncmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i8* %78, i32 %79)
%81 = icmp eq i64 %80, 0
br i1 %81, label %82, label %86
82: ; preds = %74
%83 = load i32, i32* %6
%84 = call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0))
%85 = add nsw i32 %83, %84
store i32 %85, i32* %3
br label %180
86: ; preds = %74
%87 = load i8*, i8** %8
%88 = load i32, i32* %6
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds i8, i8* %87, i64 %89
%91 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
%92 = call i64 @strncmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i8* %90, i32 %91)
%93 = icmp eq i64 %92, 0
br i1 %93, label %94, label %98
94: ; preds = %86
%95 = load i32, i32* %6
%96 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
%97 = add nsw i32 %95, %96
store i32 %97, i32* %3
br label %180
98: ; preds = %86
%99 = load i8*, i8** %8
%100 = load i32, i32* %6
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds i8, i8* %99, i64 %101
%103 = call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%104 = call i64 @strncmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0), i8* %102, i32 %103)
%105 = icmp eq i64 %104, 0
br i1 %105, label %106, label %110
106: ; preds = %98
%107 = load i32, i32* %6
%108 = call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%109 = add nsw i32 %107, %108
store i32 %109, i32* %3
br label %180
110: ; preds = %98
%111 = load i8*, i8** %8
%112 = load i32, i32* %6
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i8, i8* %111, i64 %113
%115 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%116 = call i64 @strncmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8* %114, i32 %115)
%117 = icmp eq i64 %116, 0
br i1 %117, label %118, label %122
118: ; preds = %110
%119 = load i32, i32* %6
%120 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%121 = add nsw i32 %119, %120
store i32 %121, i32* %3
br label %180
122: ; preds = %110
%123 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%124 = load i8*, i8** %8
%125 = load i32, i32* %6
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds i8, i8* %124, i64 %126
%128 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%129 = call i64 @editDistanceS(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0), i32 %123, i8* %127, i32 %128)
%130 = icmp sle i64 %129, 0
br i1 %130, label %131, label %135
131: ; preds = %122
%132 = load i32, i32* %6
%133 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%134 = add nsw i32 %132, %133
store i32 %134, i32* %3
br label %180
135: ; preds = %122
%136 = call i32 @strlen(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0))
%137 = load i8*, i8** %8
%138 = load i32, i32* %6
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds i8, i8* %137, i64 %139
%141 = call i32 @strlen(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0))
%142 = call i64 @editDistanceS(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0), i32 %136, i8* %140, i32 %141)
%143 = icmp sle i64 %142, 0
br i1 %143, label %144, label %148
144: ; preds = %135
%145 = load i32, i32* %6
%146 = call i32 @strlen(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0))
%147 = add nsw i32 %145, %146
store i32 %147, i32* %3
br label %180
148: ; preds = %135
%149 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0))
%150 = load i8*, i8** %8
%151 = load i32, i32* %6
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds i8, i8* %150, i64 %152
%154 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0))
%155 = call i64 @editDistanceS(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), i32 %149, i8* %153, i32 %154)
%156 = icmp sle i64 %155, 0
br i1 %156, label %157, label %161
157: ; preds = %148
%158 = load i32, i32* %6
%159 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0))
%160 = add nsw i32 %158, %159
store i32 %160, i32* %3
br label %180
161: ; preds = %148
%162 = call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0))
%163 = load i8*, i8** %8
%164 = load i32, i32* %6
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds i8, i8* %163, i64 %165
%167 = call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0))
%168 = call i64 @editDistanceS(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i32 %162, i8* %166, i32 %167)
%169 = icmp sle i64 %168, 0
br i1 %169, label %170, label %174
170: ; preds = %161
%171 = load i32, i32* %6
%172 = call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0))
%173 = add nsw i32 %171, %172
store i32 %173, i32* %3
br label %180
174: ; preds = %161
br label %175
175: ; preds = %174, %17
br label %176
176: ; preds = %175
%177 = load i32, i32* %6
%178 = add nsw i32 %177, 1
store i32 %178, i32* %6
br label %13
179: ; preds = %13
store i32 0, i32* %3
br label %180
180: ; preds = %179, %170, %157, %144, %131, %118, %106, %94, %82, %70, %58, %46, %34
%181 = load i32, i32* %3
ret i32 %181
}

LLVM IR (-O2):
@.str = [5 x i8] c"Fig.\00"
@.str.1 = [5 x i8] c"Fig,\00"
@.str.2 = [7 x i8] c"Figure\00"
@.str.3 = [6 x i8] c"Here \00"
@.str.4 = [4 x i8] c"We \00"
@.str.5 = [5 x i8] c"Are \00"
@.str.6 = [4 x i8] c"An \00"
@.str.7 = [5 x i8] c"Our \00"
@.str.8 = [9 x i8] c"Samples \00"
@.str.9 = [12 x i8] c"A Proof of \00"
@.str.10 = [9 x i8] c"In this \00"
@.str.11 = [6 x i8] c"is a \00"
define i32 @hasSpecialKeyWordsN(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
store i32 %0, i32* %3
%5 = bitcast i32* %4 to i8*
%6 = tail call i8* (...) @getPcontent()
%7 = call i32 @defineStartAndEnd(i32* %3, i32* %4, i32 %1)
%8 = load i32, i32* %3
%9 = load i32, i32* %4
%10 = icmp slt i32 %8, %9
br i1 %10, label %11, label %85
11: ; preds = %2
%12 = sext i32 %8 to i64
br label %13
13: ; preds = %11, %75
%14 = phi i32 [ %9, %11 ], [ %76, %75 ]
%15 = phi i64 [ %12, %11 ], [ %77, %75 ]
%16 = add nsw i64 %15, -1
%17 = getelementptr inbounds i8, i8* %6, i64 %16
%18 = load i8, i8* %17
%19 = icmp eq i8 %18, 32
br i1 %19, label %20, label %75
20: ; preds = %13
%21 = getelementptr inbounds i8, i8* %6, i64 %15
%22 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%23 = call i64 @strncmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i8* %21, i32 %22)
%24 = icmp eq i64 %23, 0
br i1 %24, label %80, label %25
25: ; preds = %20
%26 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%27 = call i64 @strncmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %21, i32 %26)
%28 = icmp eq i64 %27, 0
br i1 %28, label %80, label %29
29: ; preds = %25
%30 = call i32 @strlen(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%31 = call i64 @strncmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i8* %21, i32 %30)
%32 = icmp eq i64 %31, 0
br i1 %32, label %80, label %33
33: ; preds = %29
%34 = call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%35 = call i64 @strncmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %21, i32 %34)
%36 = icmp eq i64 %35, 0
br i1 %36, label %80, label %37
37: ; preds = %33
%38 = call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0))
%39 = call i64 @strncmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i8* %21, i32 %38)
%40 = icmp eq i64 %39, 0
br i1 %40, label %80, label %41
41: ; preds = %37
%42 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
%43 = call i64 @strncmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i8* %21, i32 %42)
%44 = icmp eq i64 %43, 0
br i1 %44, label %80, label %45
45: ; preds = %41
%46 = call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%47 = call i64 @strncmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0), i8* %21, i32 %46)
%48 = icmp eq i64 %47, 0
br i1 %48, label %80, label %49
49: ; preds = %45
%50 = call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%51 = call i64 @strncmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8* %21, i32 %50)
%52 = icmp eq i64 %51, 0
br i1 %52, label %80, label %53
53: ; preds = %49
%54 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%55 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%56 = call i64 @editDistanceS(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0), i32 %54, i8* %21, i32 %55)
%57 = icmp slt i64 %56, 1
br i1 %57, label %80, label %58
58: ; preds = %53
%59 = call i32 @strlen(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0))
%60 = call i32 @strlen(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0))
%61 = call i64 @editDistanceS(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0), i32 %59, i8* %21, i32 %60)
%62 = icmp slt i64 %61, 1
br i1 %62, label %80, label %63
63: ; preds = %58
%64 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0))
%65 = call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0))
%66 = call i64 @editDistanceS(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), i32 %64, i8* %21, i32 %65)
%67 = icmp slt i64 %66, 1
br i1 %67, label %80, label %68
68: ; preds = %63
%69 = call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0))
%70 = call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0))
%71 = call i64 @editDistanceS(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i32 %69, i8* %21, i32 %70)
%72 = icmp slt i64 %71, 1
br i1 %72, label %80, label %73
73: ; preds = %68
%74 = load i32, i32* %4
br label %75
75: ; preds = %73, %13
%76 = phi i32 [ %74, %73 ], [ %14, %13 ]
%77 = add nsw i64 %15, 1
%78 = sext i32 %76 to i64
%79 = icmp slt i64 %77, %78
br i1 %79, label %13, label %85
80: ; preds = %68, %63, %58, %53, %49, %45, %41, %37, %33, %29, %25, %20
%81 = phi i8* [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), %20 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), %25 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), %29 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), %33 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), %37 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), %41 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0), %45 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), %49 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0), %53 ], [ getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0), %58 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), %63 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), %68 ]
%82 = trunc i64 %15 to i32
%83 = call i32 @strlen(i8* %81)
%84 = add nsw i32 %83, %82
br label %85
85: ; preds = %75, %80, %2
%86 = phi i32 [ 0, %2 ], [ %84, %80 ], [ 0, %75 ]
ret i32 %86
}