void expand(char s1[], char s2[]) {
  int i, j, prev, next;
  i = j = 0;
  while (s1[i] != '\0' && j < 1000 - 1) {
    if (i > 0 && s1[i] == '-') {
      prev = s1[i - 1];
      next = s1[i + 1];
      if (((prev >= 'a' && prev <= 'z' && next >= 'a' && next <= 'z') ||
           (prev >= 'A' && prev <= 'Z' && next >= 'A' && next <= 'Z') ||
           (prev >= '0' && prev <= '9' && next >= '0' && next <= '9')) &&
          prev <= next) {
        while (prev < next && j < 1000 - 1) {
          s2[j] = ++prev;
          ++j;
        }
        ++i;
      } else {
        s2[j] = s1[i];
        ++j;
      }
    } else {
      s2[j] = s1[i];
      ++j;
    }
    ++i;
  }
  s2[j] = '\0';
}


x86 assembly (clang, -O0):
<expand>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x21(%rbp)
je     1141 <expand+0x41>
cmpl   $0x3e7,-0x18(%rbp)
setl   %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    1151 <expand+0x51>
jmp    12d2 <expand+0x1d2>
cmpl   $0x0,-0x14(%rbp)
jle    12a5 <expand+0x1a5>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    12a5 <expand+0x1a5>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x61,-0x1c(%rbp)
jl     11c0 <expand+0xc0>
cmpl   $0x7a,-0x1c(%rbp)
jg     11c0 <expand+0xc0>
cmpl   $0x61,-0x20(%rbp)
jl     11c0 <expand+0xc0>
cmpl   $0x7a,-0x20(%rbp)
jle    1210 <expand+0x110>
cmpl   $0x41,-0x1c(%rbp)
jl     11e8 <expand+0xe8>
cmpl   $0x5a,-0x1c(%rbp)
jg     11e8 <expand+0xe8>
cmpl   $0x41,-0x20(%rbp)
jl     11e8 <expand+0xe8>
cmpl   $0x5a,-0x20(%rbp)
jle    1210 <expand+0x110>
cmpl   $0x30,-0x1c(%rbp)
jl     1281 <expand+0x181>
cmpl   $0x39,-0x1c(%rbp)
jg     1281 <expand+0x181>
cmpl   $0x30,-0x20(%rbp)
jl     1281 <expand+0x181>
cmpl   $0x39,-0x20(%rbp)
jg     1281 <expand+0x181>
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jg     1281 <expand+0x181>
jmp    1221 <expand+0x121>
mov    -0x1c(%rbp),%ecx
xor    %eax,%eax
cmp    -0x20(%rbp),%ecx
mov    %al,-0x22(%rbp)
jge    123f <expand+0x13f>
cmpl   $0x3e7,-0x18(%rbp)
setl   %al
mov    %al,-0x22(%rbp)
mov    -0x22(%rbp),%al
test   $0x1,%al
jne    124f <expand+0x14f>
jmp    1273 <expand+0x173>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1221 <expand+0x121>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12a0 <expand+0x1a0>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12c4 <expand+0x1c4>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    111a <expand+0x1a>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
pop    %rbp
ret

x86 assembly (clang, -O2):
<expand>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    (%rdi),%cl
test   %cl,%cl
je     13eb <expand+0x2eb>
lea    0x30(%rsi),%r9
xor    %r13d,%r13d
mov    $0x1,%r10d
movabs $0x1ffffffe0,%r8
movdqa 0xedc(%rip),%xmm9
movdqa 0xee3(%rip),%xmm10
movdqa 0xeea(%rip),%xmm11
movdqa 0xef2(%rip),%xmm4
pcmpeqd %xmm14,%xmm14
movdqa 0xef4(%rip),%xmm15
movdqa 0xefb(%rip),%xmm12
movdqa 0xf02(%rip),%xmm13
movdqa 0xf0a(%rip),%xmm1
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
test   %r13d,%r13d
jle    11e0 <expand+0xe0>
cmp    $0x2d,%cl
jne    11e0 <expand+0xe0>
lea    -0x1(%r13),%ecx
movsbl (%rdi,%rcx,1),%ecx
mov    %r13d,%edx
mov    0x1(%rdi,%rdx,1),%bl
lea    -0x61(%rcx),%ebp
cmp    $0x19,%bpl
ja     11ac <expand+0xac>
cmp    $0x61,%bl
jl     11ac <expand+0xac>
cmp    $0x7b,%bl
jl     11bf <expand+0xbf>
lea    -0x41(%rcx),%ebp
cmp    $0x19,%bpl
ja     11ed <expand+0xed>
cmp    $0x41,%bl
jl     11ed <expand+0xed>
cmp    $0x5b,%bl
jge    11ed <expand+0xed>
cmp    %bl,%cl
jbe    1204 <expand+0x104>
movslq %eax,%rcx
movb   $0x2d,(%rsi,%rcx,1)
add    $0x1,%eax
jmp    13c0 <expand+0x2c0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cltq
mov    %cl,(%rsi,%rax,1)
add    $0x1,%eax
jmp    13c0 <expand+0x2c0>
lea    -0x3a(%rcx),%ebp
cmp    $0xf6,%bpl
jb     11c3 <expand+0xc3>
cmp    $0x30,%bl
jl     11c3 <expand+0xc3>
cmp    $0x39,%bl
jg     11c3 <expand+0xc3>
cmp    %bl,%cl
jg     11c3 <expand+0xc3>
add    $0x1,%rdx
mov    %edx,%r13d
cmp    %bl,%cl
jae    13c0 <expand+0x2c0>
movsbl %bl,%r11d
lea    0x1(%rcx),%edx
cmp    %r11d,%edx
cmovle %r11d,%edx
cltq
mov    %ecx,%ebx
not    %ebx
add    %edx,%ebx
cmp    $0x3e7,%rax
mov    $0x3e6,%r15d
cmovge %rax,%r15
sub    %rax,%r15
cmp    %rbx,%r15
cmovae %rbx,%r15
add    $0x1,%r15
test   %ebx,%ebx
cmove  %r10,%r15
cmp    $0x20,%r15
jb     138e <expand+0x28e>
mov    %r15,%r14
and    %r8,%r14
movd   %ecx,%xmm0
pshufd $0x0,%xmm0,%xmm8
movdqa %xmm8,%xmm6
paddd  0xd8c(%rip),%xmm6
movdqa %xmm8,%xmm2
paddd  %xmm9,%xmm2
movdqa %xmm8,%xmm5
paddd  %xmm10,%xmm5
paddd  %xmm11,%xmm8
lea    -0x20(%r14),%rdx
mov    %rdx,%r12
shr    $0x5,%r12
add    $0x1,%r12
test   %rdx,%rdx
je     13dd <expand+0x2dd>
mov    %r12,%rdx
and    $0xfffffffffffffffe,%rdx
lea    (%r9,%rax,1),%rbp
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm8,%xmm0
pand   %xmm4,%xmm0
movdqa %xmm5,%xmm7
pand   %xmm4,%xmm7
packuswb %xmm7,%xmm0
movdqa %xmm2,%xmm7
pand   %xmm4,%xmm7
movdqa %xmm6,%xmm3
pand   %xmm4,%xmm3
packuswb %xmm3,%xmm7
packuswb %xmm7,%xmm0
movdqa %xmm0,%xmm3
psubb  %xmm14,%xmm3
movdqa %xmm0,%xmm7
paddb  %xmm15,%xmm7
movdqu %xmm3,-0x30(%rbp,%rbx,1)
movdqu %xmm7,-0x20(%rbp,%rbx,1)
movdqa %xmm0,%xmm3
paddb  %xmm12,%xmm3
paddb  %xmm13,%xmm0
movdqu %xmm3,-0x10(%rbp,%rbx,1)
movdqu %xmm0,0x0(%rbp,%rbx,1)
add    $0x40,%rbx
paddd  %xmm1,%xmm8
paddd  %xmm1,%xmm5
paddd  %xmm1,%xmm2
paddd  %xmm1,%xmm6
add    $0xfffffffffffffffe,%rdx
jne    12c0 <expand+0x1c0>
test   $0x1,%r12b
je     1383 <expand+0x283>
add    %rax,%rbx
pand   %xmm4,%xmm8
pand   %xmm4,%xmm5
packuswb %xmm5,%xmm8
pand   %xmm4,%xmm2
pand   %xmm4,%xmm6
packuswb %xmm6,%xmm2
packuswb %xmm2,%xmm8
movdqa %xmm8,%xmm0
psubb  %xmm14,%xmm0
paddb  %xmm15,%xmm8
movdqu %xmm0,(%rsi,%rbx,1)
movdqu %xmm8,0x10(%rsi,%rbx,1)
add    %r14,%rax
cmp    %r14,%r15
je     13c0 <expand+0x2c0>
add    %r14d,%ecx
add    $0x1,%ecx
mov    %rax,%rdx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %cl,(%rsi,%rdx,1)
lea    0x1(%rdx),%rax
cmp    %r11d,%ecx
jge    13c0 <expand+0x2c0>
add    $0x1,%ecx
cmp    $0x3e6,%rdx
mov    %rax,%rdx
jl     13a0 <expand+0x2a0>
nopl   0x0(%rax,%rax,1)
movslq %r13d,%r13
mov    0x1(%rdi,%r13,1),%cl
test   %cl,%cl
je     13ed <expand+0x2ed>
add    $0x1,%r13
cmp    $0x3e7,%eax
jl     1180 <expand+0x80>
jmp    13ed <expand+0x2ed>
xor    %ebx,%ebx
test   $0x1,%r12b
jne    1346 <expand+0x246>
jmp    1383 <expand+0x283>
xor    %eax,%eax
cltq
movb   $0x0,(%rsi,%rax,1)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @expand(i8* nocapture %0, i8* nocapture writeonly %1) {
%3 = load i8, i8* %0
%4 = icmp eq i8 %3, 0
br i1 %4, label %156, label %5
5: ; preds = %2, %146
%6 = phi i8 [ %152, %146 ], [ %3, %2 ]
%7 = phi i32 [ %149, %146 ], [ 0, %2 ]
%8 = phi i32 [ %147, %146 ], [ 0, %2 ]
%9 = icmp sgt i32 %7, 0
%10 = icmp eq i8 %6, 45
%11 = select i1 %9, i1 %10, i1 false
br i1 %11, label %12, label %139
12: ; preds = %5
%13 = add nsw i32 %7, -1
%14 = zext i32 %13 to i64
%15 = getelementptr inbounds i8, i8* %0, i64 %14
%16 = load i8, i8* %15
%17 = sext i8 %16 to i32
%18 = add nuw nsw i32 %7, 1
%19 = zext i32 %18 to i64
%20 = getelementptr inbounds i8, i8* %0, i64 %19
%21 = load i8, i8* %20
%22 = sext i8 %21 to i32
%23 = add i8 %16, -97
%24 = icmp ult i8 %23, 26
%25 = icmp sgt i8 %21, 96
%26 = select i1 %24, i1 %25, i1 false
%27 = icmp slt i8 %21, 123
%28 = select i1 %26, i1 %27, i1 false
br i1 %28, label %45, label %29
29: ; preds = %12
%30 = add i8 %16, -65
%31 = icmp ult i8 %30, 26
%32 = icmp sgt i8 %21, 64
%33 = select i1 %31, i1 %32, i1 false
%34 = icmp slt i8 %21, 91
%35 = select i1 %33, i1 %34, i1 false
br i1 %35, label %45, label %36
36: ; preds = %29
%37 = add i8 %16, -58
%38 = icmp ult i8 %37, -10
%39 = icmp slt i8 %21, 48
%40 = select i1 %38, i1 true, i1 %39
%41 = icmp sgt i8 %21, 57
%42 = select i1 %40, i1 true, i1 %41
%43 = icmp sgt i8 %16, %21
%44 = select i1 %42, i1 true, i1 %43
br i1 %44, label %135, label %47
45: ; preds = %29, %12
%46 = icmp ugt i8 %16, %21
br i1 %46, label %135, label %47
47: ; preds = %45, %36
%48 = icmp ult i8 %16, %21
br i1 %48, label %49, label %146
49: ; preds = %47
%50 = sext i32 %8 to i64
%51 = add nsw i32 %17, 1
%52 = call i32 @llvm.smax.i32(i32 %51, i32 %22)
%53 = xor i32 %17, -1
%54 = add i32 %52, %53
%55 = zext i32 %54 to i64
%56 = call i64 @llvm.smax.i64(i64 %50, i64 998)
%57 = sub i64 %56, %50
%58 = icmp eq i32 %54, 0
%59 = call i64 @llvm.umin.i64(i64 %57, i64 %55)
%60 = add nuw nsw i64 %59, 1
%61 = select i1 %58, i64 1, i64 %60
%62 = icmp ult i64 %61, 32
br i1 %62, label %122, label %63
63: ; preds = %49
%64 = and i64 %61, 8589934560
%65 = add nsw i64 %64, %50
%66 = trunc i64 %64 to i32
%67 = add i32 %17, %66
%68 = insertelement <16 x i32> poison, i32 %17, i64 0
%69 = shufflevector <16 x i32> %68, <16 x i32> poison, <16 x i32> zeroinitializer
%70 = add <16 x i32> %69, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
%71 = add nsw i64 %64, -32
%72 = lshr exact i64 %71, 5
%73 = add nuw nsw i64 %72, 1
%74 = and i64 %73, 1
%75 = icmp eq i64 %71, 0
br i1 %75, label %106, label %76
76: ; preds = %63
%77 = and i64 %73, 1152921504606846974
br label %78
78: ; preds = %78, %76
%79 = phi i64 [ 0, %76 ], [ %102, %78 ]
%80 = phi <16 x i32> [ %70, %76 ], [ %103, %78 ]
%81 = phi i64 [ 0, %76 ], [ %104, %78 ]
%82 = add i64 %79, %50
%83 = trunc <16 x i32> %80 to <16 x i8>
%84 = add <16 x i8> %83, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
%85 = trunc <16 x i32> %80 to <16 x i8>
%86 = add <16 x i8> %85, <i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17>
%87 = getelementptr inbounds i8, i8* %1, i64 %82
%88 = bitcast i8* %87 to <16 x i8>*
store <16 x i8> %84, <16 x i8>* %88
%89 = getelementptr inbounds i8, i8* %87, i64 16
%90 = bitcast i8* %89 to <16 x i8>*
store <16 x i8> %86, <16 x i8>* %90
%91 = or i64 %79, 32
%92 = add <16 x i32> %80, <i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32>
%93 = add i64 %91, %50
%94 = trunc <16 x i32> %92 to <16 x i8>
%95 = add <16 x i8> %94, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
%96 = trunc <16 x i32> %92 to <16 x i8>
%97 = add <16 x i8> %96, <i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17>
%98 = getelementptr inbounds i8, i8* %1, i64 %93
%99 = bitcast i8* %98 to <16 x i8>*
store <16 x i8> %95, <16 x i8>* %99
%100 = getelementptr inbounds i8, i8* %98, i64 16
%101 = bitcast i8* %100 to <16 x i8>*
store <16 x i8> %97, <16 x i8>* %101
%102 = add nuw i64 %79, 64
%103 = add <16 x i32> %80, <i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64>
%104 = add i64 %81, 2
%105 = icmp eq i64 %104, %77
br i1 %105, label %106, label %78
106: ; preds = %78, %63
%107 = phi i64 [ 0, %63 ], [ %102, %78 ]
%108 = phi <16 x i32> [ %70, %63 ], [ %103, %78 ]
%109 = icmp eq i64 %74, 0
br i1 %109, label %120, label %110
110: ; preds = %106
%111 = add i64 %107, %50
%112 = trunc <16 x i32> %108 to <16 x i8>
%113 = add <16 x i8> %112, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
%114 = trunc <16 x i32> %108 to <16 x i8>
%115 = add <16 x i8> %114, <i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17>
%116 = getelementptr inbounds i8, i8* %1, i64 %111
%117 = bitcast i8* %116 to <16 x i8>*
store <16 x i8> %113, <16 x i8>* %117
%118 = getelementptr inbounds i8, i8* %116, i64 16
%119 = bitcast i8* %118 to <16 x i8>*
store <16 x i8> %115, <16 x i8>* %119
br label %120
120: ; preds = %106, %110
%121 = icmp eq i64 %61, %64
br i1 %121, label %143, label %122
122: ; preds = %49, %120
%123 = phi i64 [ %50, %49 ], [ %65, %120 ]
%124 = phi i32 [ %17, %49 ], [ %67, %120 ]
br label %125
125: ; preds = %122, %125
%126 = phi i64 [ %131, %125 ], [ %123, %122 ]
%127 = phi i32 [ %128, %125 ], [ %124, %122 ]
%128 = add nsw i32 %127, 1
%129 = trunc i32 %128 to i8
%130 = getelementptr inbounds i8, i8* %1, i64 %126
store i8 %129, i8* %130
%131 = add nsw i64 %126, 1
%132 = icmp slt i32 %128, %22
%133 = icmp slt i64 %126, 998
%134 = select i1 %132, i1 %133, i1 false
br i1 %134, label %125, label %143
135: ; preds = %45, %36
%136 = sext i32 %8 to i64
%137 = getelementptr inbounds i8, i8* %1, i64 %136
store i8 45, i8* %137
%138 = add nsw i32 %8, 1
br label %146
139: ; preds = %5
%140 = sext i32 %8 to i64
%141 = getelementptr inbounds i8, i8* %1, i64 %140
store i8 %6, i8* %141
%142 = add nsw i32 %8, 1
br label %146
143: ; preds = %125, %120
%144 = phi i64 [ %65, %120 ], [ %131, %125 ]
%145 = trunc i64 %144 to i32
br label %146
146: ; preds = %143, %47, %135, %139
%147 = phi i32 [ %138, %135 ], [ %142, %139 ], [ %8, %47 ], [ %145, %143 ]
%148 = phi i32 [ %7, %135 ], [ %7, %139 ], [ %18, %47 ], [ %18, %143 ]
%149 = add nsw i32 %148, 1
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds i8, i8* %0, i64 %150
%152 = load i8, i8* %151
%153 = icmp ne i8 %152, 0
%154 = icmp slt i32 %147, 999
%155 = select i1 %153, i1 %154, i1 false
br i1 %155, label %5, label %156
156: ; preds = %146, %2
%157 = phi i32 [ 0, %2 ], [ %147, %146 ]
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds i8, i8* %1, i64 %158
store i8 0, i8* %159
ret void
}