unsigned dns_dntol(const unsigned char *srcdn, unsigned char *dstdn) {
  unsigned c;
  const unsigned char *s = srcdn;
  while ((c = (*dstdn++ = *s++)) != 0) {
    do {
      *dstdn++ = ((*s) >= 'A' && (*s) <= 'Z' ? (*s) - 'A' + 'a' : (*s));
      ++s;
    } while (--c);
  }
  return (unsigned)(s - srcdn);
}


x86 assembly (clang, -O0):
<dns_dntol>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %al,(%rcx)
movzbl %al,%eax
mov    %eax,-0x14(%rbp)
cmp    $0x0,%eax
je     11c2 <dns_dntol+0xc2>
jmp    114a <dns_dntol+0x4a>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x41,%eax
jl     117f <dns_dntol+0x7f>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5a,%eax
jg     117f <dns_dntol+0x7f>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
sub    $0x41,%eax
add    $0x61,%eax
mov    %eax,-0x24(%rbp)
jmp    1189 <dns_dntol+0x89>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
cmp    $0x0,%eax
jne    114a <dns_dntol+0x4a>
jmp    1114 <dns_dntol+0x14>
mov    -0x20(%rbp),%rax
mov    -0x8(%rbp),%rcx
sub    %rcx,%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<dns_dntol>:
push   %r14
push   %rbx
lea    0x1(%rdi),%rax
mov    (%rdi),%dl
mov    %dl,(%rsi)
test   %dl,%dl
je     13df <dns_dntol+0x2df>
movdqa 0xee5(%rip),%xmm0
movdqa 0xeed(%rip),%xmm1
movdqa 0xef5(%rip),%xmm2
jmp    1155 <dns_dntol+0x55>
add    %r9,%rax
add    $0xffffffffffffffff,%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x2,%rax
mov    (%r11),%dl
mov    %dl,(%r14)
mov    %r14,%rsi
test   %dl,%dl
je     13df <dns_dntol+0x2df>
lea    0x1(%rsi),%r14
movzbl %dl,%r8d
lea    -0x1(%r8),%r10d
cmp    $0x1f,%r10d
jb     1181 <dns_dntol+0x81>
lea    (%rax,%r10,1),%rdx
add    $0x1,%rdx
cmp    %rdx,%r14
jae    11a0 <dns_dntol+0xa0>
lea    (%rsi,%r10,1),%rdx
add    $0x2,%rdx
cmp    %rdx,%rax
jae    11a0 <dns_dntol+0xa0>
test   $0x1,%r8b
jne    1340 <dns_dntol+0x240>
mov    %r8d,%r9d
mov    %rax,%r11
cmp    $0x1,%r8d
je     1140 <dns_dntol+0x40>
jmp    136c <dns_dntol+0x26c>
nopl   0x0(%rax)
add    $0x1,%r10
mov    %r10,%r9
and    $0xffffffffffffffe0,%r9
lea    -0x20(%r9),%rdx
mov    %rdx,%r11
shr    $0x5,%r11
add    $0x1,%r11
test   %rdx,%rdx
je     13ce <dns_dntol+0x2ce>
mov    %r11,%rbx
and    $0xfffffffffffffffe,%rbx
xor    %edx,%edx
nopl   0x0(%rax)
movdqu (%rax,%rdx,1),%xmm3
movdqu 0x10(%rax,%rdx,1),%xmm4
movdqa %xmm3,%xmm5
paddb  %xmm0,%xmm5
movdqa %xmm4,%xmm6
paddb  %xmm0,%xmm6
movdqa %xmm5,%xmm7
pminub %xmm1,%xmm7
pcmpeqb %xmm5,%xmm7
movdqa %xmm6,%xmm5
pminub %xmm1,%xmm5
pcmpeqb %xmm6,%xmm5
movdqa %xmm7,%xmm6
pandn  %xmm3,%xmm6
paddb  %xmm2,%xmm3
pand   %xmm7,%xmm3
por    %xmm6,%xmm3
movdqa %xmm5,%xmm6
pandn  %xmm4,%xmm6
paddb  %xmm2,%xmm4
pand   %xmm5,%xmm4
por    %xmm6,%xmm4
movdqu %xmm3,0x1(%rsi,%rdx,1)
movdqu %xmm4,0x11(%rsi,%rdx,1)
movdqu 0x20(%rax,%rdx,1),%xmm3
movdqu 0x30(%rax,%rdx,1),%xmm4
movdqa %xmm3,%xmm5
paddb  %xmm0,%xmm5
movdqa %xmm4,%xmm6
paddb  %xmm0,%xmm6
movdqa %xmm5,%xmm7
pminub %xmm1,%xmm7
pcmpeqb %xmm5,%xmm7
movdqa %xmm6,%xmm5
pminub %xmm1,%xmm5
pcmpeqb %xmm6,%xmm5
movdqa %xmm7,%xmm6
pandn  %xmm3,%xmm6
paddb  %xmm2,%xmm3
pand   %xmm7,%xmm3
por    %xmm6,%xmm3
movdqa %xmm5,%xmm6
pandn  %xmm4,%xmm6
paddb  %xmm2,%xmm4
pand   %xmm5,%xmm4
por    %xmm6,%xmm4
movdqu %xmm3,0x21(%rsi,%rdx,1)
movdqu %xmm4,0x31(%rsi,%rdx,1)
add    $0x40,%rdx
add    $0xfffffffffffffffe,%rbx
jne    11d0 <dns_dntol+0xd0>
test   $0x1,%r11b
je     131b <dns_dntol+0x21b>
movdqu (%rax,%rdx,1),%xmm3
movdqu 0x10(%rax,%rdx,1),%xmm4
movdqa %xmm3,%xmm5
paddb  %xmm0,%xmm5
movdqa %xmm4,%xmm6
paddb  %xmm0,%xmm6
movdqa %xmm5,%xmm7
pminub %xmm1,%xmm7
pcmpeqb %xmm5,%xmm7
movdqa %xmm6,%xmm5
pminub %xmm1,%xmm5
pcmpeqb %xmm6,%xmm5
movdqa %xmm7,%xmm6
pandn  %xmm3,%xmm6
paddb  %xmm2,%xmm3
pand   %xmm7,%xmm3
por    %xmm6,%xmm3
movdqa %xmm5,%xmm6
pandn  %xmm4,%xmm6
paddb  %xmm2,%xmm4
pand   %xmm5,%xmm4
por    %xmm6,%xmm4
movdqu %xmm3,(%r14,%rdx,1)
movdqu %xmm4,0x10(%r14,%rdx,1)
add    %r9,%r14
lea    (%rax,%r9,1),%r11
cmp    %r9,%r10
je     112d <dns_dntol+0x2d>
sub    %r9d,%r8d
mov    %r11,%rax
test   $0x1,%r8b
je     118b <dns_dntol+0x8b>
nopl   0x0(%rax,%rax,1)
movzbl (%rax),%edx
lea    -0x41(%rdx),%esi
lea    0x20(%rdx),%ebx
cmp    $0x1a,%sil
movzbl %bl,%esi
cmovae %edx,%esi
mov    %sil,(%r14)
add    $0x1,%r14
lea    0x1(%rax),%r11
lea    -0x1(%r8),%r9d
cmp    $0x1,%r8d
je     1140 <dns_dntol+0x40>
neg    %r9d
xor    %ebx,%ebx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%r11,%rbx,1),%esi
lea    -0x41(%rsi),%edx
lea    0x20(%rsi),%ecx
cmp    $0x1a,%dl
movzbl %cl,%ecx
cmovae %esi,%ecx
mov    %cl,(%r14)
movzbl 0x1(%r11,%rbx,1),%ecx
lea    -0x41(%rcx),%edx
lea    0x20(%rcx),%esi
cmp    $0x1a,%dl
movzbl %sil,%edx
cmovae %ecx,%edx
mov    %dl,0x1(%r14)
add    $0x2,%r14
add    $0xfffffffffffffffe,%rax
add    $0x2,%rbx
cmp    %eax,%r9d
jne    1380 <dns_dntol+0x280>
sub    %rax,%r11
lea    -0x1(%r11),%rax
jmp    1140 <dns_dntol+0x40>
xor    %edx,%edx
test   $0x1,%r11b
jne    12b3 <dns_dntol+0x1b3>
jmp    131b <dns_dntol+0x21b>
sub    %edi,%eax
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define i32 @dns_dntol(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i8*
store i8* %0, i8** %3
store i8* %1, i8** %4
%7 = load i8*, i8** %3
store i8* %7, i8** %6
br label %8
8: ; preds = %48, %2
%9 = load i8*, i8** %6
%10 = getelementptr inbounds i8, i8* %9, i32 1
store i8* %10, i8** %6
%11 = load i8, i8* %9
%12 = load i8*, i8** %4
%13 = getelementptr inbounds i8, i8* %12, i32 1
store i8* %13, i8** %4
store i8 %11, i8* %12
%14 = zext i8 %11 to i32
store i32 %14, i32* %5
%15 = icmp ne i32 %14, 0
br i1 %15, label %16, label %49
16: ; preds = %8
br label %17
17: ; preds = %44, %16
%18 = load i8*, i8** %6
%19 = load i8, i8* %18
%20 = zext i8 %19 to i32
%21 = icmp sge i32 %20, 65
br i1 %21, label %22, label %33
22: ; preds = %17
%23 = load i8*, i8** %6
%24 = load i8, i8* %23
%25 = zext i8 %24 to i32
%26 = icmp sle i32 %25, 90
br i1 %26, label %27, label %33
27: ; preds = %22
%28 = load i8*, i8** %6
%29 = load i8, i8* %28
%30 = zext i8 %29 to i32
%31 = sub nsw i32 %30, 65
%32 = add nsw i32 %31, 97
br label %37
33: ; preds = %22, %17
%34 = load i8*, i8** %6
%35 = load i8, i8* %34
%36 = zext i8 %35 to i32
br label %37
37: ; preds = %33, %27
%38 = phi i32 [ %32, %27 ], [ %36, %33 ]
%39 = trunc i32 %38 to i8
%40 = load i8*, i8** %4
%41 = getelementptr inbounds i8, i8* %40, i32 1
store i8* %41, i8** %4
store i8 %39, i8* %40
%42 = load i8*, i8** %6
%43 = getelementptr inbounds i8, i8* %42, i32 1
store i8* %43, i8** %6
br label %44
44: ; preds = %37
%45 = load i32, i32* %5
%46 = add i32 %45, -1
store i32 %46, i32* %5
%47 = icmp ne i32 %46, 0
br i1 %47, label %17, label %48
48: ; preds = %44
br label %8
49: ; preds = %8
%50 = load i8*, i8** %6
%51 = load i8*, i8** %3
%52 = ptrtoint i8* %50 to i64
%53 = ptrtoint i8* %51 to i64
%54 = sub i64 %52, %53
%55 = trunc i64 %54 to i32
ret i32 %55
}

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