void rotate_letters(char *buf, unsigned int len) {
  unsigned int i;
  for (i = 0; i < len; ++i) {
    if (buf[i] >= 'a' && buf[i] <= 'm') {
      buf[i] += 13;
    } else if (buf[i] >= 'n' && buf[i] <= 'z') {
      buf[i] -= 13;
    } else if (buf[i] >= 'A' && buf[i] <= 'M') {
      buf[i] += 13;
    } else if (buf[i] >= 'N' && buf[i] <= 'Z') {
      buf[i] -= 13;
    }
  }
}


x86 assembly (clang, -O0):
<rotate_letters>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jae    1233 <rotate_letters+0x133>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     115c <rotate_letters+0x5c>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6d,%eax
jg     115c <rotate_letters+0x5c>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%edx
add    $0xd,%edx
mov    %dl,(%rax,%rcx,1)
jmp    1220 <rotate_letters+0x120>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6e,%eax
jl     119a <rotate_letters+0x9a>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7a,%eax
jg     119a <rotate_letters+0x9a>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%edx
sub    $0xd,%edx
mov    %dl,(%rax,%rcx,1)
jmp    121b <rotate_letters+0x11b>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     11d8 <rotate_letters+0xd8>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x4d,%eax
jg     11d8 <rotate_letters+0xd8>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%edx
add    $0xd,%edx
mov    %dl,(%rax,%rcx,1)
jmp    1216 <rotate_letters+0x116>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x4e,%eax
jl     1211 <rotate_letters+0x111>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jg     1211 <rotate_letters+0x111>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
movsbl (%rax,%rcx,1),%edx
sub    $0xd,%edx
mov    %dl,(%rax,%rcx,1)
jmp    1216 <rotate_letters+0x116>
jmp    121b <rotate_letters+0x11b>
jmp    1220 <rotate_letters+0x120>
jmp    1225 <rotate_letters+0x125>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1112 <rotate_letters+0x12>
pop    %rbp
ret

x86 assembly (clang, -O2):
<rotate_letters>:
test   %esi,%esi
je     13ee <rotate_letters+0x2ee>
mov    %esi,%r8d
cmp    $0x8,%esi
jae    1117 <rotate_letters+0x17>
xor    %ecx,%ecx
jmp    13a0 <rotate_letters+0x2a0>
mov    %r8d,%ecx
and    $0xfffffff8,%ecx
xor    %edx,%edx
movdqa 0xee8(%rip),%xmm9
pcmpeqd %xmm2,%xmm2
movdqa 0xf0b(%rip),%xmm15
movdqa 0xf12(%rip),%xmm11
movdqa 0xf19(%rip),%xmm12
movdqa 0xf20(%rip),%xmm13
movdqa 0xf27(%rip),%xmm14
jmp    116d <rotate_letters+0x6d>
nopl   0x0(%rax,%rax,1)
add    $0x8,%rdx
cmp    %rdx,%rcx
je     1393 <rotate_letters+0x293>
movq   (%rdi,%rdx,1),%xmm10
movdqa %xmm10,%xmm3
paddb  0xe80(%rip),%xmm3
movdqa %xmm3,%xmm0
pmaxub %xmm9,%xmm0
pcmpeqb %xmm3,%xmm0
punpcklbw %xmm0,%xmm5
movdqa %xmm10,%xmm6
paddb  0xe82(%rip),%xmm6
movdqa %xmm6,%xmm3
pmaxub %xmm9,%xmm3
pcmpeqb %xmm6,%xmm3
movdqa %xmm3,%xmm6
pxor   %xmm2,%xmm6
punpcklbw %xmm6,%xmm7
pand   %xmm5,%xmm7
movdqa %xmm10,%xmm5
paddb  0xe68(%rip),%xmm5
movdqa %xmm5,%xmm6
pmaxub %xmm15,%xmm6
pcmpeqb %xmm5,%xmm6
pxor   %xmm2,%xmm6
punpcklbw %xmm6,%xmm1
movdqa %xmm5,%xmm6
pmaxub %xmm9,%xmm6
pcmpeqb %xmm5,%xmm6
pxor   %xmm2,%xmm6
punpcklbw %xmm6,%xmm5
psraw  $0x8,%xmm7
pandn  %xmm0,%xmm3
movdqa %xmm10,%xmm4
paddb  %xmm11,%xmm4
movdqa %xmm4,%xmm6
pmaxub %xmm12,%xmm6
pcmpeqb %xmm4,%xmm6
pxor   %xmm2,%xmm6
punpcklbw %xmm6,%xmm6
pand   %xmm1,%xmm6
pand   %xmm5,%xmm6
movdqa %xmm10,%xmm1
paddb  %xmm13,%xmm1
movdqa %xmm1,%xmm5
pmaxub %xmm9,%xmm5
pcmpeqb %xmm1,%xmm5
movdqa %xmm5,%xmm1
pxor   %xmm2,%xmm1
punpcklbw %xmm1,%xmm8
psraw  $0x8,%xmm8
por    %xmm7,%xmm8
psraw  $0x8,%xmm6
movdqa %xmm6,%xmm1
packsswb %xmm1,%xmm1
psllw  $0x7,%xmm1
pand   %xmm14,%xmm1
pxor   %xmm7,%xmm7
pcmpgtb %xmm1,%xmm7
movdqa %xmm3,%xmm1
pandn  %xmm9,%xmm1
pand   %xmm15,%xmm3
por    %xmm1,%xmm3
pand   %xmm5,%xmm3
pandn  %xmm9,%xmm5
por    %xmm3,%xmm5
movdqa %xmm7,%xmm1
pandn  %xmm5,%xmm1
pand   %xmm15,%xmm7
por    %xmm1,%xmm7
por    %xmm8,%xmm6
pxor   %xmm2,%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
por    %xmm0,%xmm6
movd   %xmm6,%eax
test   $0x1,%al
je     12cf <rotate_letters+0x1cf>
movdqa %xmm10,%xmm0
paddb  %xmm7,%xmm0
movd   %xmm0,%esi
mov    %sil,(%rdi,%rdx,1)
shr    $0x10,%eax
test   $0x1,%al
je     12e7 <rotate_letters+0x1e7>
movdqa %xmm10,%xmm0
paddb  %xmm7,%xmm0
movd   %xmm0,%eax
mov    %ah,0x1(%rdi,%rdx,1)
pextrw $0x2,%xmm6,%eax
test   $0x1,%al
je     1304 <rotate_letters+0x204>
movdqa %xmm10,%xmm0
paddb  %xmm7,%xmm0
movd   %xmm0,%eax
shr    $0x10,%eax
mov    %al,0x2(%rdi,%rdx,1)
pextrw $0x3,%xmm6,%eax
test   $0x1,%al
je     1321 <rotate_letters+0x221>
movdqa %xmm10,%xmm0
paddb  %xmm7,%xmm0
movd   %xmm0,%eax
shr    $0x18,%eax
mov    %al,0x3(%rdi,%rdx,1)
pextrw $0x4,%xmm6,%eax
test   $0x1,%al
je     133c <rotate_letters+0x23c>
movdqa %xmm10,%xmm0
paddb  %xmm7,%xmm0
pextrw $0x2,%xmm0,%eax
mov    %al,0x4(%rdi,%rdx,1)
pextrw $0x5,%xmm6,%eax
test   $0x1,%al
je     1357 <rotate_letters+0x257>
movdqa %xmm10,%xmm0
paddb  %xmm7,%xmm0
pextrw $0x2,%xmm0,%eax
mov    %ah,0x5(%rdi,%rdx,1)
pextrw $0x6,%xmm6,%eax
test   $0x1,%al
je     1372 <rotate_letters+0x272>
movdqa %xmm10,%xmm0
paddb  %xmm7,%xmm0
pextrw $0x3,%xmm0,%eax
mov    %al,0x6(%rdi,%rdx,1)
pextrw $0x7,%xmm6,%eax
test   $0x1,%al
je     1160 <rotate_letters+0x60>
paddb  %xmm7,%xmm10
pextrw $0x3,%xmm10,%eax
mov    %ah,0x7(%rdi,%rdx,1)
jmp    1160 <rotate_letters+0x60>
cmp    %r8,%rcx
je     13ee <rotate_letters+0x2ee>
nopl   0x0(%rax,%rax,1)
movzbl (%rdi,%rcx,1),%edx
lea    -0x61(%rdx),%esi
mov    $0xd,%al
cmp    $0xd,%sil
jb     13e0 <rotate_letters+0x2e0>
lea    -0x6e(%rdx),%esi
cmp    $0xd,%sil
jae    13c0 <rotate_letters+0x2c0>
mov    $0xf3,%al
jmp    13e0 <rotate_letters+0x2e0>
nopl   0x0(%rax)
lea    -0x41(%rdx),%esi
cmp    $0xd,%sil
jb     13e0 <rotate_letters+0x2e0>
lea    -0x4e(%rdx),%esi
mov    $0xf3,%al
cmp    $0xc,%sil
ja     13e5 <rotate_letters+0x2e5>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    %al,%dl
mov    %dl,(%rdi,%rcx,1)
add    $0x1,%rcx
cmp    %rcx,%r8
jne    13a0 <rotate_letters+0x2a0>
ret

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

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