#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 */
size_t find_emph_char(char *data, size_t size, char c) {
  size_t i = 1;
  while (i < size) {
    while (i < size && data[i] != c && data[i] != '`' && data[i] != '[')
      i += 1;
    if (data[i] == c)
      return i;
    if (i && data[i - 1] == '\\') {
      i += 1;
      continue;
    }
    if (data[i] == '`') {
      size_t tmp_i = 0;
      i += 1;
      while (i < size && data[i] != '`') {
        if (!tmp_i && data[i] == c)
          tmp_i = i;
        i += 1;
      }
      if (i >= size)
        return tmp_i;
      i += 1;
    } else if (data[i] == '[') {
      size_t tmp_i = 0;
      char cc;
      i += 1;
      while (i < size && data[i] != ']') {
        if (!tmp_i && data[i] == c)
          tmp_i = i;
        i += 1;
      }
      i += 1;
      while (i < size && (data[i] == ' ' || data[i] == '\t' || data[i] == '\n'))
        i += 1;
      if (i >= size)
        return tmp_i;
      if (data[i] != '[' && data[i] != '(') {
        if (tmp_i)
          return tmp_i;
        else
          continue;
      }
      cc = data[i];
      i += 1;
      while (i < size && data[i] != cc) {
        if (!tmp_i && data[i] == c)
          tmp_i = i;
        i += 1;
      }
      if (i >= size)
        return tmp_i;
      i += 1;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<find_emph_char>:
push   %rbp
mov    %rsp,%rbp
mov    %dl,%al
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %al,-0x19(%rbp)
movq   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    151f <find_emph_char+0x41f>
jmp    112c <find_emph_char+0x2c>
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x3a(%rbp)
jae    118b <find_emph_char+0x8b>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
movsbl -0x19(%rbp),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x3a(%rbp)
je     118b <find_emph_char+0x8b>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x60,%ecx
mov    %al,-0x3a(%rbp)
je     118b <find_emph_char+0x8b>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
setne  %al
mov    %al,-0x3a(%rbp)
mov    -0x3a(%rbp),%al
test   $0x1,%al
jne    119b <find_emph_char+0x9b>
jmp    11ac <find_emph_char+0xac>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    112c <find_emph_char+0x2c>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x19(%rbp),%ecx
cmp    %ecx,%eax
jne    11d1 <find_emph_char+0xd1>
mov    -0x28(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1527 <find_emph_char+0x427>
cmpq   $0x0,-0x28(%rbp)
je     1206 <find_emph_char+0x106>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5c,%eax
jne    1206 <find_emph_char+0x106>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1119 <find_emph_char+0x19>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x60,%eax
jne    12cf <find_emph_char+0x1cf>
movq   $0x0,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x3b(%rbp)
jae    1257 <find_emph_char+0x157>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x60,%eax
setne  %al
mov    %al,-0x3b(%rbp)
mov    -0x3b(%rbp),%al
test   $0x1,%al
jne    1267 <find_emph_char+0x167>
jmp    12a3 <find_emph_char+0x1a3>
cmpq   $0x0,-0x30(%rbp)
jne    1292 <find_emph_char+0x192>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x19(%rbp),%ecx
cmp    %ecx,%eax
jne    1292 <find_emph_char+0x192>
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    122f <find_emph_char+0x12f>
mov    -0x28(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     12be <find_emph_char+0x1be>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1527 <find_emph_char+0x427>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    151a <find_emph_char+0x41a>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
jne    1515 <find_emph_char+0x415>
movq   $0x0,-0x38(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x3c(%rbp)
jae    1320 <find_emph_char+0x220>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5d,%eax
setne  %al
mov    %al,-0x3c(%rbp)
mov    -0x3c(%rbp),%al
test   $0x1,%al
jne    1330 <find_emph_char+0x230>
jmp    136c <find_emph_char+0x26c>
cmpq   $0x0,-0x38(%rbp)
jne    135b <find_emph_char+0x25b>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x19(%rbp),%ecx
cmp    %ecx,%eax
jne    135b <find_emph_char+0x25b>
mov    -0x28(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    12f8 <find_emph_char+0x1f8>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x3d(%rbp)
jae    13da <find_emph_char+0x2da>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x3e(%rbp)
je     13d4 <find_emph_char+0x2d4>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x3e(%rbp)
je     13d4 <find_emph_char+0x2d4>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
sete   %al
mov    %al,-0x3e(%rbp)
mov    -0x3e(%rbp),%al
mov    %al,-0x3d(%rbp)
mov    -0x3d(%rbp),%al
test   $0x1,%al
jne    13ea <find_emph_char+0x2ea>
jmp    13fb <find_emph_char+0x2fb>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1378 <find_emph_char+0x278>
mov    -0x28(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     1416 <find_emph_char+0x316>
mov    -0x38(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1527 <find_emph_char+0x427>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
je     145d <find_emph_char+0x35d>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x28,%eax
je     145d <find_emph_char+0x35d>
cmpq   $0x0,-0x38(%rbp)
je     1458 <find_emph_char+0x358>
mov    -0x38(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1527 <find_emph_char+0x427>
jmp    1119 <find_emph_char+0x19>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x39(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x3f(%rbp)
jae    14a2 <find_emph_char+0x3a2>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x39(%rbp),%ecx
cmp    %ecx,%eax
setne  %al
mov    %al,-0x3f(%rbp)
mov    -0x3f(%rbp),%al
test   $0x1,%al
jne    14b2 <find_emph_char+0x3b2>
jmp    14ee <find_emph_char+0x3ee>
cmpq   $0x0,-0x38(%rbp)
jne    14dd <find_emph_char+0x3dd>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x19(%rbp),%ecx
cmp    %ecx,%eax
jne    14dd <find_emph_char+0x3dd>
mov    -0x28(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1477 <find_emph_char+0x377>
mov    -0x28(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     1509 <find_emph_char+0x409>
mov    -0x38(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1527 <find_emph_char+0x427>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    151a <find_emph_char+0x41a>
jmp    1119 <find_emph_char+0x19>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<find_emph_char>:
push   %rbp
push   %r14
push   %rbx
cmp    $0x2,%rsi
jb     1304 <find_emph_char+0x204>
lea    -0x1(%rsi),%r8
lea    -0x2(%rsi),%r10
mov    $0x4,%r9d
sub    %rsi,%r9
mov    $0x1,%ecx
jmp    113d <find_emph_char+0x3d>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%rcx
cmp    %rsi,%rcx
jae    1304 <find_emph_char+0x204>
cmp    %rsi,%rcx
jae    1170 <find_emph_char+0x70>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rdi,%rcx,1),%eax
cmp    %dl,%al
je     1170 <find_emph_char+0x70>
cmp    $0x5b,%al
je     1170 <find_emph_char+0x70>
cmp    $0x60,%al
je     1170 <find_emph_char+0x70>
add    $0x1,%rcx
cmp    %rcx,%rsi
jne    1150 <find_emph_char+0x50>
mov    %rsi,%rcx
nopl   0x0(%rax)
mov    (%rdi,%rcx,1),%al
cmp    %dl,%al
je     130b <find_emph_char+0x20b>
test   %rcx,%rcx
je     1187 <find_emph_char+0x87>
cmpb   $0x5c,-0x1(%rcx,%rdi,1)
je     1130 <find_emph_char+0x30>
cmp    $0x60,%al
je     1260 <find_emph_char+0x160>
cmp    $0x5b,%al
jne    1134 <find_emph_char+0x34>
lea    0x1(%rcx),%rax
cmp    %rsi,%rax
jae    11a8 <find_emph_char+0xa8>
mov    (%rdi,%rax,1),%bl
cmp    $0x5d,%bl
jne    12b7 <find_emph_char+0x1b7>
xor    %eax,%eax
add    $0x2,%rcx
cmp    %rsi,%rcx
jb     11db <find_emph_char+0xdb>
jmp    1306 <find_emph_char+0x206>
nopl   0x0(%rax,%rax,1)
add    $0xf7,%r11b
cmp    $0x2,%r11b
jae    12f1 <find_emph_char+0x1f1>
add    $0x1,%rcx
cmp    %rcx,%rsi
je     1306 <find_emph_char+0x206>
movzbl (%rdi,%rcx,1),%r11d
cmp    $0x1f,%r11b
jle    11c0 <find_emph_char+0xc0>
cmp    $0x20,%r11b
je     11ce <find_emph_char+0xce>
cmp    $0x28,%r11b
je     11fc <find_emph_char+0xfc>
cmp    $0x5b,%r11b
jne    12f1 <find_emph_char+0x1f1>
lea    0x1(%rcx),%rbx
cmp    %rsi,%rbx
jae    1306 <find_emph_char+0x206>
mov    0x1(%rdi,%rcx,1),%bpl
cmp    %r11b,%bpl
je     1255 <find_emph_char+0x155>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rax,%r14
lea    0x1(%rcx),%rbx
cmp    %dl,%bpl
mov    $0x0,%eax
cmove  %rbx,%rax
test   %r14,%r14
cmovne %r14,%rax
lea    (%r9,%rcx,1),%rbp
cmp    $0x2,%rbp
je     1306 <find_emph_char+0x206>
movzbl 0x2(%rdi,%rcx,1),%ebp
mov    %rbx,%rcx
cmp    %r11b,%bpl
jne    1220 <find_emph_char+0x120>
add    $0x2,%rcx
jmp    1134 <find_emph_char+0x34>
xchg   %ax,%ax
lea    0x1(%rcx),%rax
cmp    %rsi,%rax
jae    1304 <find_emph_char+0x204>
mov    (%rdi,%rax,1),%bl
cmp    $0x60,%bl
jne    127a <find_emph_char+0x17a>
mov    %rcx,%r11
jmp    12ab <find_emph_char+0x1ab>
xor    %eax,%eax
nopl   0x0(%rax)
mov    %rax,%rbp
lea    0x1(%rcx),%r11
cmp    %dl,%bl
mov    $0x0,%eax
cmove  %r11,%rax
test   %rbp,%rbp
cmovne %rbp,%rax
cmp    %rcx,%r10
je     1306 <find_emph_char+0x206>
movzbl 0x2(%rdi,%rcx,1),%ebx
mov    %r11,%rcx
cmp    $0x60,%bl
jne    1280 <find_emph_char+0x180>
add    $0x2,%r11
mov    %r11,%rcx
jmp    1134 <find_emph_char+0x34>
mov    %rcx,%r11
xor    %eax,%eax
nopl   0x0(%rax)
mov    %rax,%rbp
lea    0x1(%r11),%rcx
cmp    %dl,%bl
mov    $0x0,%eax
cmove  %rcx,%rax
test   %rbp,%rbp
cmovne %rbp,%rax
cmp    %r11,%r10
je     12fc <find_emph_char+0x1fc>
movzbl 0x2(%rdi,%r11,1),%ebx
mov    %rcx,%r11
cmp    $0x5d,%bl
jne    12c0 <find_emph_char+0x1c0>
jmp    11aa <find_emph_char+0xaa>
test   %rax,%rax
je     1134 <find_emph_char+0x34>
jmp    1306 <find_emph_char+0x206>
mov    %r8,%rcx
jmp    11aa <find_emph_char+0xaa>
xor    %eax,%eax
pop    %rbx
pop    %r14
pop    %rbp
ret
mov    %rcx,%rax
jmp    1306 <find_emph_char+0x206>

LLVM IR (-O0):
define i64 @find_emph_char(i8* %0, i64 %1, i8 signext %2) {
%4 = alloca i64
%5 = alloca i8*
%6 = alloca i64
%7 = alloca i8
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i8
store i8* %0, i8** %5
store i64 %1, i64* %6
store i8 %2, i8* %7
store i64 1, i64* %8
br label %12
12: ; preds = %273, %223, %71, %3
%13 = load i64, i64* %8
%14 = load i64, i64* %6
%15 = icmp ult i64 %13, %14
br i1 %15, label %16, label %274
16: ; preds = %12
br label %17
17: ; preds = %46, %16
%18 = load i64, i64* %8
%19 = load i64, i64* %6
%20 = icmp ult i64 %18, %19
br i1 %20, label %21, label %44
21: ; preds = %17
%22 = load i8*, i8** %5
%23 = load i64, i64* %8
%24 = getelementptr inbounds i8, i8* %22, i64 %23
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
%27 = load i8, i8* %7
%28 = sext i8 %27 to i32
%29 = icmp ne i32 %26, %28
br i1 %29, label %30, label %44
30: ; preds = %21
%31 = load i8*, i8** %5
%32 = load i64, i64* %8
%33 = getelementptr inbounds i8, i8* %31, i64 %32
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = icmp ne i32 %35, 96
br i1 %36, label %37, label %44
37: ; preds = %30
%38 = load i8*, i8** %5
%39 = load i64, i64* %8
%40 = getelementptr inbounds i8, i8* %38, i64 %39
%41 = load i8, i8* %40
%42 = sext i8 %41 to i32
%43 = icmp ne i32 %42, 91
br label %44
44: ; preds = %37, %30, %21, %17
%45 = phi i1 [ false, %30 ], [ false, %21 ], [ false, %17 ], [ %43, %37 ]
br i1 %45, label %46, label %49
46: ; preds = %44
%47 = load i64, i64* %8
%48 = add i64 %47, 1
store i64 %48, i64* %8
br label %17
49: ; preds = %44
%50 = load i8*, i8** %5
%51 = load i64, i64* %8
%52 = getelementptr inbounds i8, i8* %50, i64 %51
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = load i8, i8* %7
%56 = sext i8 %55 to i32
%57 = icmp eq i32 %54, %56
br i1 %57, label %58, label %60
58: ; preds = %49
%59 = load i64, i64* %8
store i64 %59, i64* %4
br label %275
60: ; preds = %49
%61 = load i64, i64* %8
%62 = icmp ne i64 %61, 0
br i1 %62, label %63, label %74
63: ; preds = %60
%64 = load i8*, i8** %5
%65 = load i64, i64* %8
%66 = sub i64 %65, 1
%67 = getelementptr inbounds i8, i8* %64, i64 %66
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = icmp eq i32 %69, 92
br i1 %70, label %71, label %74
71: ; preds = %63
%72 = load i64, i64* %8
%73 = add i64 %72, 1
store i64 %73, i64* %8
br label %12
74: ; preds = %63, %60
%75 = load i8*, i8** %5
%76 = load i64, i64* %8
%77 = getelementptr inbounds i8, i8* %75, i64 %76
%78 = load i8, i8* %77
%79 = sext i8 %78 to i32
%80 = icmp eq i32 %79, 96
br i1 %80, label %81, label %123
81: ; preds = %74
store i64 0, i64* %9
%82 = load i64, i64* %8
%83 = add i64 %82, 1
store i64 %83, i64* %8
br label %84
84: ; preds = %111, %81
%85 = load i64, i64* %8
%86 = load i64, i64* %6
%87 = icmp ult i64 %85, %86
br i1 %87, label %88, label %95
88: ; preds = %84
%89 = load i8*, i8** %5
%90 = load i64, i64* %8
%91 = getelementptr inbounds i8, i8* %89, i64 %90
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = icmp ne i32 %93, 96
br label %95
95: ; preds = %88, %84
%96 = phi i1 [ false, %84 ], [ %94, %88 ]
br i1 %96, label %97, label %114
97: ; preds = %95
%98 = load i64, i64* %9
%99 = icmp ne i64 %98, 0
br i1 %99, label %111, label %100
100: ; preds = %97
%101 = load i8*, i8** %5
%102 = load i64, i64* %8
%103 = getelementptr inbounds i8, i8* %101, i64 %102
%104 = load i8, i8* %103
%105 = sext i8 %104 to i32
%106 = load i8, i8* %7
%107 = sext i8 %106 to i32
%108 = icmp eq i32 %105, %107
br i1 %108, label %109, label %111
109: ; preds = %100
%110 = load i64, i64* %8
store i64 %110, i64* %9
br label %111
111: ; preds = %109, %100, %97
%112 = load i64, i64* %8
%113 = add i64 %112, 1
store i64 %113, i64* %8
br label %84
114: ; preds = %95
%115 = load i64, i64* %8
%116 = load i64, i64* %6
%117 = icmp uge i64 %115, %116
br i1 %117, label %118, label %120
118: ; preds = %114
%119 = load i64, i64* %9
store i64 %119, i64* %4
br label %275
120: ; preds = %114
%121 = load i64, i64* %8
%122 = add i64 %121, 1
store i64 %122, i64* %8
br label %273
123: ; preds = %74
%124 = load i8*, i8** %5
%125 = load i64, i64* %8
%126 = getelementptr inbounds i8, i8* %124, i64 %125
%127 = load i8, i8* %126
%128 = sext i8 %127 to i32
%129 = icmp eq i32 %128, 91
br i1 %129, label %130, label %272
130: ; preds = %123
store i64 0, i64* %10
%131 = load i64, i64* %8
%132 = add i64 %131, 1
store i64 %132, i64* %8
br label %133
133: ; preds = %160, %130
%134 = load i64, i64* %8
%135 = load i64, i64* %6
%136 = icmp ult i64 %134, %135
br i1 %136, label %137, label %144
137: ; preds = %133
%138 = load i8*, i8** %5
%139 = load i64, i64* %8
%140 = getelementptr inbounds i8, i8* %138, i64 %139
%141 = load i8, i8* %140
%142 = sext i8 %141 to i32
%143 = icmp ne i32 %142, 93
br label %144
144: ; preds = %137, %133
%145 = phi i1 [ false, %133 ], [ %143, %137 ]
br i1 %145, label %146, label %163
146: ; preds = %144
%147 = load i64, i64* %10
%148 = icmp ne i64 %147, 0
br i1 %148, label %160, label %149
149: ; preds = %146
%150 = load i8*, i8** %5
%151 = load i64, i64* %8
%152 = getelementptr inbounds i8, i8* %150, i64 %151
%153 = load i8, i8* %152
%154 = sext i8 %153 to i32
%155 = load i8, i8* %7
%156 = sext i8 %155 to i32
%157 = icmp eq i32 %154, %156
br i1 %157, label %158, label %160
158: ; preds = %149
%159 = load i64, i64* %8
store i64 %159, i64* %10
br label %160
160: ; preds = %158, %149, %146
%161 = load i64, i64* %8
%162 = add i64 %161, 1
store i64 %162, i64* %8
br label %133
163: ; preds = %144
%164 = load i64, i64* %8
%165 = add i64 %164, 1
store i64 %165, i64* %8
br label %166
166: ; preds = %195, %163
%167 = load i64, i64* %8
%168 = load i64, i64* %6
%169 = icmp ult i64 %167, %168
br i1 %169, label %170, label %193
170: ; preds = %166
%171 = load i8*, i8** %5
%172 = load i64, i64* %8
%173 = getelementptr inbounds i8, i8* %171, i64 %172
%174 = load i8, i8* %173
%175 = sext i8 %174 to i32
%176 = icmp eq i32 %175, 32
br i1 %176, label %191, label %177
177: ; preds = %170
%178 = load i8*, i8** %5
%179 = load i64, i64* %8
%180 = getelementptr inbounds i8, i8* %178, i64 %179
%181 = load i8, i8* %180
%182 = sext i8 %181 to i32
%183 = icmp eq i32 %182, 9
br i1 %183, label %191, label %184
184: ; preds = %177
%185 = load i8*, i8** %5
%186 = load i64, i64* %8
%187 = getelementptr inbounds i8, i8* %185, i64 %186
%188 = load i8, i8* %187
%189 = sext i8 %188 to i32
%190 = icmp eq i32 %189, 10
br label %191
191: ; preds = %184, %177, %170
%192 = phi i1 [ true, %177 ], [ true, %170 ], [ %190, %184 ]
br label %193
193: ; preds = %191, %166
%194 = phi i1 [ false, %166 ], [ %192, %191 ]
br i1 %194, label %195, label %198
195: ; preds = %193
%196 = load i64, i64* %8
%197 = add i64 %196, 1
store i64 %197, i64* %8
br label %166
198: ; preds = %193
%199 = load i64, i64* %8
%200 = load i64, i64* %6
%201 = icmp uge i64 %199, %200
br i1 %201, label %202, label %204
202: ; preds = %198
%203 = load i64, i64* %10
store i64 %203, i64* %4
br label %275
204: ; preds = %198
%205 = load i8*, i8** %5
%206 = load i64, i64* %8
%207 = getelementptr inbounds i8, i8* %205, i64 %206
%208 = load i8, i8* %207
%209 = sext i8 %208 to i32
%210 = icmp ne i32 %209, 91
br i1 %210, label %211, label %224
211: ; preds = %204
%212 = load i8*, i8** %5
%213 = load i64, i64* %8
%214 = getelementptr inbounds i8, i8* %212, i64 %213
%215 = load i8, i8* %214
%216 = sext i8 %215 to i32
%217 = icmp ne i32 %216, 40
br i1 %217, label %218, label %224
218: ; preds = %211
%219 = load i64, i64* %10
%220 = icmp ne i64 %219, 0
br i1 %220, label %221, label %223
221: ; preds = %218
%222 = load i64, i64* %10
store i64 %222, i64* %4
br label %275
223: ; preds = %218
br label %12
224: ; preds = %211, %204
%225 = load i8*, i8** %5
%226 = load i64, i64* %8
%227 = getelementptr inbounds i8, i8* %225, i64 %226
%228 = load i8, i8* %227
store i8 %228, i8* %11
%229 = load i64, i64* %8
%230 = add i64 %229, 1
store i64 %230, i64* %8
br label %231
231: ; preds = %260, %224
%232 = load i64, i64* %8
%233 = load i64, i64* %6
%234 = icmp ult i64 %232, %233
br i1 %234, label %235, label %244
235: ; preds = %231
%236 = load i8*, i8** %5
%237 = load i64, i64* %8
%238 = getelementptr inbounds i8, i8* %236, i64 %237
%239 = load i8, i8* %238
%240 = sext i8 %239 to i32
%241 = load i8, i8* %11
%242 = sext i8 %241 to i32
%243 = icmp ne i32 %240, %242
br label %244
244: ; preds = %235, %231
%245 = phi i1 [ false, %231 ], [ %243, %235 ]
br i1 %245, label %246, label %263
246: ; preds = %244
%247 = load i64, i64* %10
%248 = icmp ne i64 %247, 0
br i1 %248, label %260, label %249
249: ; preds = %246
%250 = load i8*, i8** %5
%251 = load i64, i64* %8
%252 = getelementptr inbounds i8, i8* %250, i64 %251
%253 = load i8, i8* %252
%254 = sext i8 %253 to i32
%255 = load i8, i8* %7
%256 = sext i8 %255 to i32
%257 = icmp eq i32 %254, %256
br i1 %257, label %258, label %260
258: ; preds = %249
%259 = load i64, i64* %8
store i64 %259, i64* %10
br label %260
260: ; preds = %258, %249, %246
%261 = load i64, i64* %8
%262 = add i64 %261, 1
store i64 %262, i64* %8
br label %231
263: ; preds = %244
%264 = load i64, i64* %8
%265 = load i64, i64* %6
%266 = icmp uge i64 %264, %265
br i1 %266, label %267, label %269
267: ; preds = %263
%268 = load i64, i64* %10
store i64 %268, i64* %4
br label %275
269: ; preds = %263
%270 = load i64, i64* %8
%271 = add i64 %270, 1
store i64 %271, i64* %8
br label %272
272: ; preds = %269, %123
br label %273
273: ; preds = %272, %120
br label %12
274: ; preds = %12
store i64 0, i64* %4
br label %275
275: ; preds = %274, %267, %221, %202, %118, %58
%276 = load i64, i64* %4
ret i64 %276
}

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