int romanToInt(char *s) {
  int r = 0;
  while ('M' == *s) {
    r += 1000;
    ++s;
  }
  if ('C' == s[0] && 'M' == s[1]) {
    r += 900;
    s += 2;
  } else if ('C' == s[0] && 'D' == s[1]) {
    r += 400;
    s += 2;
  } else if ('D' == *s) {
    r += 500;
    ++s;
  }
  while ('C' == *s) {
    r += 100;
    ++s;
  }
  if ('X' == s[0] && 'C' == s[1]) {
    r += 90;
    s += 2;
  } else if ('X' == s[0] && 'L' == s[1]) {
    r += 40;
    s += 2;
  } else if ('L' == *s) {
    r += 50;
    ++s;
  }
  while ('X' == *s) {
    r += 10;
    ++s;
  }
  if ('I' == s[0] && 'X' == s[1]) {
    r += 9;
    s += 2;
  } else if ('I' == s[0] && 'V' == s[1]) {
    r += 4;
    s += 2;
  } else if ('V' == *s) {
    r += 5;
    ++s;
  }
  while ('I' == *s) {
    r += 1;
    ++s;
  }
  return r;
}


x86 assembly (clang, -O0):
<romanToInt>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x4d,%eax
cmp    %ecx,%eax
jne    113f <romanToInt+0x3f>
mov    -0xc(%rbp),%eax
add    $0x3e8,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    110f <romanToInt+0xf>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    1184 <romanToInt+0x84>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x4d,%eax
cmp    %ecx,%eax
jne    1184 <romanToInt+0x84>
mov    -0xc(%rbp),%eax
add    $0x384,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    11fe <romanToInt+0xfe>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    11c9 <romanToInt+0xc9>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x44,%eax
cmp    %ecx,%eax
jne    11c9 <romanToInt+0xc9>
mov    -0xc(%rbp),%eax
add    $0x190,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    11f9 <romanToInt+0xf9>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x44,%eax
cmp    %ecx,%eax
jne    11f4 <romanToInt+0xf4>
mov    -0xc(%rbp),%eax
add    $0x1f4,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    11f9 <romanToInt+0xf9>
jmp    11fe <romanToInt+0xfe>
jmp    1203 <romanToInt+0x103>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    1231 <romanToInt+0x131>
mov    -0xc(%rbp),%eax
add    $0x64,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1203 <romanToInt+0x103>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x58,%eax
cmp    %ecx,%eax
jne    1274 <romanToInt+0x174>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x43,%eax
cmp    %ecx,%eax
jne    1274 <romanToInt+0x174>
mov    -0xc(%rbp),%eax
add    $0x5a,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    12ea <romanToInt+0x1ea>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x58,%eax
cmp    %ecx,%eax
jne    12b7 <romanToInt+0x1b7>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x4c,%eax
cmp    %ecx,%eax
jne    12b7 <romanToInt+0x1b7>
mov    -0xc(%rbp),%eax
add    $0x28,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    12e5 <romanToInt+0x1e5>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x4c,%eax
cmp    %ecx,%eax
jne    12e0 <romanToInt+0x1e0>
mov    -0xc(%rbp),%eax
add    $0x32,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    12e5 <romanToInt+0x1e5>
jmp    12ea <romanToInt+0x1ea>
jmp    12ef <romanToInt+0x1ef>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x58,%eax
cmp    %ecx,%eax
jne    131d <romanToInt+0x21d>
mov    -0xc(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    12ef <romanToInt+0x1ef>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x49,%eax
cmp    %ecx,%eax
jne    1360 <romanToInt+0x260>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x58,%eax
cmp    %ecx,%eax
jne    1360 <romanToInt+0x260>
mov    -0xc(%rbp),%eax
add    $0x9,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    13d6 <romanToInt+0x2d6>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x49,%eax
cmp    %ecx,%eax
jne    13a3 <romanToInt+0x2a3>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x56,%eax
cmp    %ecx,%eax
jne    13a3 <romanToInt+0x2a3>
mov    -0xc(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    13d1 <romanToInt+0x2d1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x56,%eax
cmp    %ecx,%eax
jne    13cc <romanToInt+0x2cc>
mov    -0xc(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    13d1 <romanToInt+0x2d1>
jmp    13d6 <romanToInt+0x2d6>
jmp    13db <romanToInt+0x2db>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x49,%eax
cmp    %ecx,%eax
jne    1409 <romanToInt+0x309>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    13db <romanToInt+0x2db>
mov    -0xc(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<romanToInt>:
add    $0x1,%rdi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
movzbl -0x1(%rdi),%ecx
cmp    $0x4d,%cl
jne    1124 <romanToInt+0x24>
add    $0x3e8,%eax
add    $0x1,%rdi
jmp    1110 <romanToInt+0x10>
cmp    $0x43,%cl
je     1135 <romanToInt+0x35>
cmp    $0x44,%cl
jne    114c <romanToInt+0x4c>
add    $0x1f4,%eax
jmp    1167 <romanToInt+0x67>
mov    (%rdi),%cl
cmp    $0x44,%cl
je     1152 <romanToInt+0x52>
cmp    $0x4d,%cl
jne    114c <romanToInt+0x4c>
add    $0x384,%eax
add    $0x1,%rdi
jmp    1167 <romanToInt+0x67>
add    $0xffffffffffffffff,%rdi
jmp    1167 <romanToInt+0x67>
add    $0x190,%eax
add    $0x1,%rdi
jmp    1167 <romanToInt+0x67>
nopl   (%rax)
add    $0x64,%eax
add    $0x1,%rdi
movzbl (%rdi),%ecx
cmp    $0x43,%cl
je     1160 <romanToInt+0x60>
cmp    $0x4c,%cl
je     118f <romanToInt+0x8f>
cmp    $0x58,%cl
jne    11a1 <romanToInt+0xa1>
mov    0x1(%rdi),%cl
cmp    $0x43,%cl
je     1194 <romanToInt+0x94>
cmp    $0x4c,%cl
jne    11a1 <romanToInt+0xa1>
add    $0x28,%eax
add    $0x2,%rdi
jmp    11a1 <romanToInt+0xa1>
add    $0x32,%eax
jmp    119d <romanToInt+0x9d>
add    $0x5a,%eax
add    $0x2,%rdi
jmp    11a1 <romanToInt+0xa1>
add    $0x1,%rdi
mov    (%rdi),%cl
cmp    $0x58,%cl
jne    11ad <romanToInt+0xad>
add    $0xa,%eax
jmp    119d <romanToInt+0x9d>
cmp    $0x49,%cl
je     11c0 <romanToInt+0xc0>
cmp    $0x56,%cl
jne    11db <romanToInt+0xdb>
add    $0x5,%eax
add    $0x1,%rdi
jmp    11d9 <romanToInt+0xd9>
mov    0x1(%rdi),%cl
cmp    $0x56,%cl
je     11d2 <romanToInt+0xd2>
cmp    $0x58,%cl
jne    11d9 <romanToInt+0xd9>
add    $0x9,%eax
jmp    11d5 <romanToInt+0xd5>
add    $0x4,%eax
add    $0x2,%rdi
mov    (%rdi),%cl
cmp    $0x49,%cl
jne    11fc <romanToInt+0xfc>
add    $0x1,%rdi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%eax
cmpb   $0x49,(%rdi)
lea    0x1(%rdi),%rdi
je     11f0 <romanToInt+0xf0>
ret

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

LLVM IR (-O2):
define i32 @romanToInt(i8* nocapture %0) {
br label %2
2: ; preds = %6, %1
%3 = phi i8* [ %0, %1 ], [ %8, %6 ]
%4 = phi i32 [ 0, %1 ], [ %7, %6 ]
%5 = load i8, i8* %3
switch i8 %5, label %21 [
i8 77, label %6
i8 67, label %9
i8 68, label %18
]
6: ; preds = %2
%7 = add nuw nsw i32 %4, 1000
%8 = getelementptr inbounds i8, i8* %3, i64 1
br label %2
9: ; preds = %2
%10 = getelementptr inbounds i8, i8* %3, i64 1
%11 = load i8, i8* %10
switch i8 %11, label %21 [
i8 77, label %12
i8 68, label %15
]
12: ; preds = %9
%13 = add nuw nsw i32 %4, 900
%14 = getelementptr inbounds i8, i8* %3, i64 2
br label %21
15: ; preds = %9
%16 = add nuw nsw i32 %4, 400
%17 = getelementptr inbounds i8, i8* %3, i64 2
br label %21
18: ; preds = %2
%19 = add nuw nsw i32 %4, 500
%20 = getelementptr inbounds i8, i8* %3, i64 1
br label %21
21: ; preds = %2, %9, %15, %18, %12
%22 = phi i8* [ %3, %9 ], [ %20, %18 ], [ %17, %15 ], [ %14, %12 ], [ %3, %2 ]
%23 = phi i32 [ %4, %9 ], [ %19, %18 ], [ %16, %15 ], [ %13, %12 ], [ %4, %2 ]
br label %24
24: ; preds = %21, %28
%25 = phi i8* [ %30, %28 ], [ %22, %21 ]
%26 = phi i32 [ %29, %28 ], [ %23, %21 ]
%27 = load i8, i8* %25
switch i8 %27, label %43 [
i8 67, label %28
i8 88, label %31
i8 76, label %40
]
28: ; preds = %24
%29 = add nsw i32 %26, 100
%30 = getelementptr inbounds i8, i8* %25, i64 1
br label %24
31: ; preds = %24
%32 = getelementptr inbounds i8, i8* %25, i64 1
%33 = load i8, i8* %32
switch i8 %33, label %43 [
i8 67, label %34
i8 76, label %37
]
34: ; preds = %31
%35 = add nsw i32 %26, 90
%36 = getelementptr inbounds i8, i8* %25, i64 2
br label %43
37: ; preds = %31
%38 = add nsw i32 %26, 40
%39 = getelementptr inbounds i8, i8* %25, i64 2
br label %43
40: ; preds = %24
%41 = add nsw i32 %26, 50
%42 = getelementptr inbounds i8, i8* %25, i64 1
br label %43
43: ; preds = %24, %31, %37, %40, %34
%44 = phi i8* [ %25, %31 ], [ %42, %40 ], [ %39, %37 ], [ %36, %34 ], [ %25, %24 ]
%45 = phi i32 [ %26, %31 ], [ %41, %40 ], [ %38, %37 ], [ %35, %34 ], [ %26, %24 ]
br label %46
46: ; preds = %43, %50
%47 = phi i8* [ %52, %50 ], [ %44, %43 ]
%48 = phi i32 [ %51, %50 ], [ %45, %43 ]
%49 = load i8, i8* %47
switch i8 %49, label %69 [
i8 88, label %50
i8 73, label %53
i8 86, label %62
]
50: ; preds = %46
%51 = add nsw i32 %48, 10
%52 = getelementptr inbounds i8, i8* %47, i64 1
br label %46
53: ; preds = %46
%54 = getelementptr inbounds i8, i8* %47, i64 1
%55 = load i8, i8* %54
switch i8 %55, label %65 [
i8 88, label %56
i8 86, label %59
]
56: ; preds = %53
%57 = add nsw i32 %48, 9
%58 = getelementptr inbounds i8, i8* %47, i64 2
br label %65
59: ; preds = %53
%60 = add nsw i32 %48, 4
%61 = getelementptr inbounds i8, i8* %47, i64 2
br label %65
62: ; preds = %46
%63 = add nsw i32 %48, 5
%64 = getelementptr inbounds i8, i8* %47, i64 1
br label %65
65: ; preds = %53, %56, %62, %59
%66 = phi i8* [ %64, %62 ], [ %61, %59 ], [ %58, %56 ], [ %47, %53 ]
%67 = phi i32 [ %63, %62 ], [ %60, %59 ], [ %57, %56 ], [ %48, %53 ]
%68 = load i8, i8* %66
br label %69
69: ; preds = %46, %65
%70 = phi i8 [ %68, %65 ], [ %49, %46 ]
%71 = phi i8* [ %66, %65 ], [ %47, %46 ]
%72 = phi i32 [ %67, %65 ], [ %48, %46 ]
%73 = icmp eq i8 %70, 73
br i1 %73, label %74, label %81
74: ; preds = %69, %74
%75 = phi i32 [ %77, %74 ], [ %72, %69 ]
%76 = phi i8* [ %78, %74 ], [ %71, %69 ]
%77 = add nsw i32 %75, 1
%78 = getelementptr inbounds i8, i8* %76, i64 1
%79 = load i8, i8* %78
%80 = icmp eq i8 %79, 73
br i1 %80, label %74, label %81
81: ; preds = %74, %69
%82 = phi i32 [ %72, %69 ], [ %77, %74 ]
ret i32 %82
}