int compile_set(pattern, x, limit)
char *pattern;
char *x;
char *limit;
{
  char *slot;
  int size;
  char *start = pattern;
  if (*pattern == 0)
    return (-3);
  *x++ = '[';
  slot = x++;
  size = 0;
  if ((pattern[1] && pattern[2] && pattern[1] == '-' && pattern[2] != ']')) {
    if (pattern[0] > pattern[2])
      return (-4);
    *x++ = '-';
    *x++ = pattern[0];
    *x++ = pattern[2];
    pattern += 3;
    size += 3;
  } else {
    *x++ = 'M';
    *x++ = *pattern++;
    size += 2;
  }
  while (*pattern != ']' && x < limit) {
    if (*pattern == 0)
      return (-3);
    if ((pattern[1] && pattern[2] && pattern[1] == '-' && pattern[2] != ']')) {
      if (pattern[0] > pattern[2])
        return (-4);
      *x++ = '-';
      *x++ = pattern[0];
      *x++ = pattern[2];
      pattern += 3;
      size += 3;
    } else {
      *x++ = 'M';
      *x++ = *pattern++;
      size += 2;
    }
  }
  if (size > 0177)
    return (-5);
  *slot = size;
  return (pattern - start);
}


x86 assembly (clang, -O0):
<compile_set>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1134 <compile_set+0x34>
movl   $0xfffffffd,-0x4(%rbp)
jmp    13e6 <compile_set+0x2e6>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x5b,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1222 <compile_set+0x122>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1222 <compile_set+0x122>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2d,%eax
jne    1222 <compile_set+0x122>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x5d,%eax
je     1222 <compile_set+0x122>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
cmp    %ecx,%eax
jle    11c7 <compile_set+0xc7>
movl   $0xfffffffc,-0x4(%rbp)
jmp    13e6 <compile_set+0x2e6>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x2d,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    0x2(%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x10(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x2c(%rbp)
jmp    125f <compile_set+0x15f>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x4d,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1264 <compile_set+0x164>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x5d,%ecx
mov    %al,-0x39(%rbp)
je     1287 <compile_set+0x187>
mov    -0x18(%rbp),%rax
cmp    -0x20(%rbp),%rax
setb   %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    1297 <compile_set+0x197>
jmp    13b7 <compile_set+0x2b7>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    12b3 <compile_set+0x1b3>
movl   $0xfffffffd,-0x4(%rbp)
jmp    13e6 <compile_set+0x2e6>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1375 <compile_set+0x275>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1375 <compile_set+0x275>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2d,%eax
jne    1375 <compile_set+0x275>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x5d,%eax
je     1375 <compile_set+0x275>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
cmp    %ecx,%eax
jle    131a <compile_set+0x21a>
movl   $0xfffffffc,-0x4(%rbp)
jmp    13e6 <compile_set+0x2e6>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x2d,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    0x2(%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x10(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x2c(%rbp)
jmp    13b2 <compile_set+0x2b2>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x4d,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1264 <compile_set+0x164>
cmpl   $0x7f,-0x2c(%rbp)
jle    13cd <compile_set+0x2cd>
movl   $0xfffffffb,-0x4(%rbp)
jmp    13e6 <compile_set+0x2e6>
mov    -0x2c(%rbp),%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<compile_set>:
cmpb   $0x0,(%rdi)
je     11e4 <compile_set+0xe4>
movb   $0x5b,(%rsi)
mov    0x1(%rdi),%al
test   %al,%al
je     1127 <compile_set+0x27>
cmp    $0x2d,%al
jne    1127 <compile_set+0x27>
mov    0x2(%rdi),%cl
test   %cl,%cl
je     1127 <compile_set+0x27>
cmp    $0x5d,%cl
jne    1200 <compile_set+0x100>
lea    0x1(%rdi),%r8
movb   $0x4d,0x2(%rsi)
mov    (%rdi),%al
lea    0x4(%rsi),%r9
mov    %al,0x3(%rsi)
mov    $0x2,%r11d
mov    (%r8),%al
cmp    $0x5d,%al
je     11f5 <compile_set+0xf5>
cmp    %rdx,%r9
jae    11f5 <compile_set+0xf5>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
test   %al,%al
je     11e4 <compile_set+0xe4>
movzbl 0x1(%r8),%ecx
test   %cl,%cl
je     1190 <compile_set+0x90>
cmp    $0x2d,%cl
jne    1190 <compile_set+0x90>
movzbl 0x2(%r8),%r10d
test   %r10b,%r10b
je     1190 <compile_set+0x90>
cmp    $0x5d,%r10b
jne    11bb <compile_set+0xbb>
cs nopw 0x0(%rax,%rax,1)
movb   $0x4d,(%r9)
movzbl (%r8),%eax
add    $0x1,%r8
mov    %al,0x1(%r9)
add    $0x2,%r9
mov    $0x2,%eax
add    %eax,%r11d
movzbl (%r8),%eax
cmp    $0x5d,%al
je     11ea <compile_set+0xea>
cmp    %rdx,%r9
jb     1160 <compile_set+0x60>
jmp    11ea <compile_set+0xea>
cmp    %r10b,%al
jg     122b <compile_set+0x12b>
movb   $0x2d,(%r9)
movzbl (%r8),%eax
mov    %al,0x1(%r9)
movzbl 0x2(%r8),%eax
mov    %al,0x2(%r9)
add    $0x3,%r9
add    $0x3,%r8
mov    $0x3,%eax
jmp    11a9 <compile_set+0xa9>
mov    $0xfffffffd,%eax
ret
mov    $0xfffffffb,%eax
cmp    $0x7f,%r11d
ja     11ff <compile_set+0xff>
mov    %r11b,0x1(%rsi)
sub    %edi,%r8d
mov    %r8d,%eax
ret
mov    $0xfffffffc,%eax
cmp    %cl,(%rdi)
jg     11ff <compile_set+0xff>
movb   $0x2d,0x2(%rsi)
mov    (%rdi),%al
mov    %al,0x3(%rsi)
mov    0x2(%rdi),%al
lea    0x5(%rsi),%r9
mov    %al,0x4(%rsi)
lea    0x3(%rdi),%r8
mov    $0x3,%r11d
jmp    113e <compile_set+0x3e>
mov    $0xfffffffc,%eax
ret

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

LLVM IR (-O2):
define i32 @compile_set(i8* %0, i8* writeonly %1, i8* readnone %2) {
%4 = load i8, i8* %0
%5 = icmp eq i8 %4, 0
br i1 %5, label %88, label %6
6: ; preds = %3
%7 = getelementptr inbounds i8, i8* %1, i64 1
store i8 91, i8* %1
%8 = getelementptr inbounds i8, i8* %1, i64 2
%9 = getelementptr inbounds i8, i8* %0, i64 1
%10 = load i8, i8* %9
%11 = icmp eq i8 %10, 0
br i1 %11, label %28, label %12
12: ; preds = %6
%13 = getelementptr inbounds i8, i8* %0, i64 2
%14 = load i8, i8* %13
%15 = freeze i8 %10
%16 = icmp eq i8 %15, 45
br i1 %16, label %17, label %28
17: ; preds = %12
switch i8 %14, label %18 [
i8 93, label %28
i8 0, label %28
]
18: ; preds = %17
%19 = load i8, i8* %0
%20 = icmp sgt i8 %19, %14
br i1 %20, label %88, label %21
21: ; preds = %18
%22 = getelementptr inbounds i8, i8* %1, i64 3
store i8 45, i8* %8
%23 = load i8, i8* %0
%24 = getelementptr inbounds i8, i8* %1, i64 4
store i8 %23, i8* %22
%25 = load i8, i8* %13
%26 = getelementptr inbounds i8, i8* %1, i64 5
store i8 %25, i8* %24
%27 = getelementptr inbounds i8, i8* %0, i64 3
br label %32
28: ; preds = %17, %17, %12, %6
%29 = getelementptr inbounds i8, i8* %1, i64 3
store i8 77, i8* %8
%30 = load i8, i8* %0
%31 = getelementptr inbounds i8, i8* %1, i64 4
store i8 %30, i8* %29
br label %32
32: ; preds = %28, %21
%33 = phi i8* [ %26, %21 ], [ %31, %28 ]
%34 = phi i8* [ %27, %21 ], [ %9, %28 ]
%35 = phi i32 [ 3, %21 ], [ 2, %28 ]
%36 = load i8, i8* %34
%37 = icmp ne i8 %36, 93
%38 = icmp ult i8* %33, %2
%39 = select i1 %37, i1 %38, i1 false
br i1 %39, label %40, label %80
40: ; preds = %32, %69
%41 = phi i8 [ %74, %69 ], [ %36, %32 ]
%42 = phi i32 [ %73, %69 ], [ %35, %32 ]
%43 = phi i8* [ %72, %69 ], [ %34, %32 ]
%44 = phi i8* [ %71, %69 ], [ %33, %32 ]
%45 = icmp eq i8 %41, 0
br i1 %45, label %88, label %46
46: ; preds = %40
%47 = getelementptr inbounds i8, i8* %43, i64 1
%48 = load i8, i8* %47
%49 = icmp eq i8 %48, 0
br i1 %49, label %65, label %50
50: ; preds = %46
%51 = getelementptr inbounds i8, i8* %43, i64 2
%52 = load i8, i8* %51
%53 = freeze i8 %48
%54 = icmp eq i8 %53, 45
br i1 %54, label %55, label %65
55: ; preds = %50
switch i8 %52, label %56 [
i8 93, label %65
i8 0, label %65
]
56: ; preds = %55
%57 = icmp sgt i8 %41, %52
br i1 %57, label %88, label %58
58: ; preds = %56
%59 = getelementptr inbounds i8, i8* %44, i64 1
store i8 45, i8* %44
%60 = load i8, i8* %43
%61 = getelementptr inbounds i8, i8* %44, i64 2
store i8 %60, i8* %59
%62 = load i8, i8* %51
%63 = getelementptr inbounds i8, i8* %44, i64 3
store i8 %62, i8* %61
%64 = getelementptr inbounds i8, i8* %43, i64 3
br label %69
65: ; preds = %55, %55, %50, %46
%66 = getelementptr inbounds i8, i8* %44, i64 1
store i8 77, i8* %44
%67 = load i8, i8* %43
%68 = getelementptr inbounds i8, i8* %44, i64 2
store i8 %67, i8* %66
br label %69
69: ; preds = %65, %58
%70 = phi i32 [ 2, %65 ], [ 3, %58 ]
%71 = phi i8* [ %68, %65 ], [ %63, %58 ]
%72 = phi i8* [ %47, %65 ], [ %64, %58 ]
%73 = add nuw nsw i32 %42, %70
%74 = load i8, i8* %72
%75 = icmp ne i8 %74, 93
%76 = icmp ult i8* %71, %2
%77 = select i1 %75, i1 %76, i1 false
br i1 %77, label %40, label %78
78: ; preds = %69
%79 = icmp ugt i32 %73, 127
br i1 %79, label %88, label %80
80: ; preds = %32, %78
%81 = phi i32 [ %73, %78 ], [ %35, %32 ]
%82 = phi i8* [ %72, %78 ], [ %34, %32 ]
%83 = trunc i32 %81 to i8
store i8 %83, i8* %7
%84 = ptrtoint i8* %82 to i64
%85 = ptrtoint i8* %0 to i64
%86 = sub i64 %84, %85
%87 = trunc i64 %86 to i32
br label %88
88: ; preds = %56, %40, %78, %18, %3, %80
%89 = phi i32 [ %87, %80 ], [ -3, %3 ], [ -4, %18 ], [ -5, %78 ], [ -4, %56 ], [ -3, %40 ]
ret i32 %89
}