const char *caesarDecrypt(char string[], int size, int key) {
  int x;
  for (x = 0; x < size; x++) {
    if (string[x] != ' ') {
      if (string[x] >= 'A' && string[x] <= 'Z') {
        if (string[x] + key > 'Z') {
          int what = string[x] + (key - 1) - 'Z' + 'A';
          string[x] = what;
        } else {
          string[x] += key;
        }
      } else if (string[x] >= 'a' && string[x] <= 'z') {
        if (string[x] + key > 'z') {
          int what = string[x] + (key - 1) - 'z' + 'a';
          string[x] = what;
        } else {
          string[x] += key;
        }
      }
    }
  }
  return string;
}


x86 assembly (clang, -O0):
<caesarDecrypt>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    126d <caesarDecrypt+0x16d>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     125a <caesarDecrypt+0x15a>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     11c3 <caesarDecrypt+0xc3>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jg     11c3 <caesarDecrypt+0xc3>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    -0x10(%rbp),%eax
cmp    $0x5a,%eax
jle    11aa <caesarDecrypt+0xaa>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
add    %ecx,%eax
sub    $0x5a,%eax
add    $0x41,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11be <caesarDecrypt+0xbe>
mov    -0x10(%rbp),%esi
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
add    %esi,%edx
mov    %dl,(%rax,%rcx,1)
jmp    1255 <caesarDecrypt+0x155>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     1250 <caesarDecrypt+0x150>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7a,%eax
jg     1250 <caesarDecrypt+0x150>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    -0x10(%rbp),%eax
cmp    $0x7a,%eax
jle    1237 <caesarDecrypt+0x137>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
add    %ecx,%eax
sub    $0x7a,%eax
add    $0x61,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    124b <caesarDecrypt+0x14b>
mov    -0x10(%rbp),%esi
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
add    %esi,%edx
mov    %dl,(%rax,%rcx,1)
jmp    1250 <caesarDecrypt+0x150>
jmp    1255 <caesarDecrypt+0x155>
jmp    125a <caesarDecrypt+0x15a>
jmp    125f <caesarDecrypt+0x15f>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1115 <caesarDecrypt+0x15>
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<caesarDecrypt>:
push   %rbx
mov    %rdi,%rax
test   %esi,%esi
jle    1469 <caesarDecrypt+0x369>
lea    -0x1a(%rdx),%r8d
mov    %esi,%r9d
cmp    $0x10,%esi
jae    111f <caesarDecrypt+0x1f>
xor    %esi,%esi
jmp    1479 <caesarDecrypt+0x379>
mov    %r9d,%esi
and    $0xfffffff0,%esi
movd   %edx,%xmm0
pshufd $0x0,%xmm0,%xmm15
movzbl %r8b,%ecx
movd   %ecx,%xmm0
punpcklbw %xmm0,%xmm0
pshuflw $0x0,%xmm0,%xmm0
pshufd $0x0,%xmm0,%xmm0
movdqa %xmm0,-0x20(%rsp)
xor    %ebx,%ebx
movdqa 0xeaa(%rip),%xmm12
pcmpeqd %xmm10,%xmm10
movdqa 0xeac(%rip),%xmm13
movdqa 0xeb3(%rip),%xmm14
jmp    117d <caesarDecrypt+0x7d>
nop
add    $0x10,%rbx
cmp    %rbx,%rsi
je     1464 <caesarDecrypt+0x364>
movdqu (%rax,%rbx,1),%xmm2
punpckhbw %xmm2,%xmm0
punpckhwd %xmm0,%xmm9
psrad  $0x18,%xmm9
punpcklwd %xmm0,%xmm3
psrad  $0x18,%xmm3
punpcklbw %xmm2,%xmm0
punpckhwd %xmm0,%xmm11
psrad  $0x18,%xmm11
punpcklwd %xmm0,%xmm6
psrad  $0x18,%xmm6
paddd  %xmm15,%xmm6
paddd  %xmm15,%xmm11
paddd  %xmm15,%xmm3
paddd  %xmm15,%xmm9
movdqa %xmm9,%xmm0
pcmpgtd %xmm12,%xmm0
movdqa %xmm3,%xmm7
pcmpgtd %xmm12,%xmm7
movdqa %xmm7,%xmm1
packssdw %xmm0,%xmm1
movdqa %xmm11,%xmm5
pcmpgtd %xmm12,%xmm5
movdqa %xmm6,%xmm4
pcmpgtd %xmm12,%xmm4
movdqa %xmm4,%xmm8
packssdw %xmm5,%xmm8
packsswb %xmm1,%xmm8
pxor   %xmm10,%xmm0
pxor   %xmm10,%xmm7
packssdw %xmm0,%xmm7
pxor   %xmm10,%xmm5
pxor   %xmm10,%xmm4
packssdw %xmm5,%xmm4
packsswb %xmm7,%xmm4
movdqa %xmm9,%xmm0
pand   %xmm13,%xmm0
movdqa %xmm3,%xmm1
pand   %xmm13,%xmm1
packuswb %xmm0,%xmm1
movdqa %xmm11,%xmm5
pand   %xmm13,%xmm5
movdqa %xmm6,%xmm0
pand   %xmm13,%xmm0
packuswb %xmm5,%xmm0
packuswb %xmm1,%xmm0
pcmpgtd %xmm14,%xmm9
pcmpgtd %xmm14,%xmm3
movdqa %xmm3,%xmm5
packssdw %xmm9,%xmm3
pxor   %xmm10,%xmm9
pxor   %xmm10,%xmm5
packssdw %xmm9,%xmm5
pcmpgtd %xmm14,%xmm11
pcmpgtd %xmm14,%xmm6
movdqa %xmm6,%xmm1
packssdw %xmm11,%xmm6
pxor   %xmm10,%xmm11
pxor   %xmm10,%xmm1
packssdw %xmm11,%xmm1
packsswb %xmm5,%xmm1
packsswb %xmm3,%xmm6
movdqa %xmm2,%xmm3
paddb  0xd83(%rip),%xmm3
movdqa %xmm3,%xmm9
movdqa 0xd85(%rip),%xmm11
pminub %xmm11,%xmm9
pcmpeqb %xmm3,%xmm9
movdqa -0x20(%rsp),%xmm5
paddb  %xmm2,%xmm5
pand   %xmm9,%xmm4
pand   %xmm8,%xmm9
paddb  0xd6f(%rip),%xmm2
movdqa %xmm2,%xmm7
pminub %xmm11,%xmm7
pcmpeqb %xmm2,%xmm7
pand   %xmm7,%xmm6
pand   %xmm7,%xmm1
movdqa %xmm5,%xmm2
pand   %xmm9,%xmm2
por    %xmm9,%xmm7
pandn  %xmm0,%xmm9
por    %xmm9,%xmm2
pand   %xmm6,%xmm5
pandn  %xmm2,%xmm6
por    %xmm5,%xmm6
pand   %xmm1,%xmm0
pandn  %xmm6,%xmm1
por    %xmm0,%xmm1
por    %xmm4,%xmm7
movdqa %xmm7,-0x10(%rsp)
testb  $0x1,-0x10(%rsp)
je     133e <caesarDecrypt+0x23e>
movd   %xmm1,%ecx
mov    %cl,(%rax,%rbx,1)
movd   %xmm7,%edi
mov    %edi,%ecx
shr    $0x8,%ecx
test   $0x1,%cl
je     1354 <caesarDecrypt+0x254>
movd   %xmm1,%ecx
mov    %ch,0x1(%rax,%rbx,1)
mov    %edi,%ecx
shr    $0x10,%ecx
test   $0x1,%cl
je     1369 <caesarDecrypt+0x269>
movd   %xmm1,%ecx
shr    $0x10,%ecx
mov    %cl,0x2(%rax,%rbx,1)
shr    $0x18,%edi
test   $0x1,%dil
je     137d <caesarDecrypt+0x27d>
movd   %xmm1,%ecx
shr    $0x18,%ecx
mov    %cl,0x3(%rax,%rbx,1)
pextrw $0x2,%xmm7,%ecx
test   $0x1,%cl
je     1391 <caesarDecrypt+0x291>
pextrw $0x2,%xmm1,%edi
mov    %dil,0x4(%rax,%rbx,1)
shr    $0x8,%ecx
test   $0x1,%cl
je     13a2 <caesarDecrypt+0x2a2>
pextrw $0x2,%xmm1,%ecx
mov    %ch,0x5(%rax,%rbx,1)
pextrw $0x3,%xmm7,%ecx
test   $0x1,%cl
je     13b6 <caesarDecrypt+0x2b6>
pextrw $0x3,%xmm1,%edi
mov    %dil,0x6(%rax,%rbx,1)
shr    $0x8,%ecx
test   $0x1,%cl
je     13c7 <caesarDecrypt+0x2c7>
pextrw $0x3,%xmm1,%ecx
mov    %ch,0x7(%rax,%rbx,1)
pextrw $0x4,%xmm7,%ecx
test   $0x1,%cl
je     13db <caesarDecrypt+0x2db>
pextrw $0x4,%xmm1,%edi
mov    %dil,0x8(%rax,%rbx,1)
shr    $0x8,%ecx
test   $0x1,%cl
je     13ec <caesarDecrypt+0x2ec>
pextrw $0x4,%xmm1,%ecx
mov    %ch,0x9(%rax,%rbx,1)
pextrw $0x5,%xmm7,%ecx
test   $0x1,%cl
je     1400 <caesarDecrypt+0x300>
pextrw $0x5,%xmm1,%edi
mov    %dil,0xa(%rax,%rbx,1)
shr    $0x8,%ecx
test   $0x1,%cl
je     1411 <caesarDecrypt+0x311>
pextrw $0x5,%xmm1,%ecx
mov    %ch,0xb(%rax,%rbx,1)
pextrw $0x6,%xmm7,%ecx
test   $0x1,%cl
je     1425 <caesarDecrypt+0x325>
pextrw $0x6,%xmm1,%edi
mov    %dil,0xc(%rax,%rbx,1)
shr    $0x8,%ecx
test   $0x1,%cl
je     1436 <caesarDecrypt+0x336>
pextrw $0x6,%xmm1,%ecx
mov    %ch,0xd(%rax,%rbx,1)
pextrw $0x7,%xmm7,%ecx
test   $0x1,%cl
je     144a <caesarDecrypt+0x34a>
pextrw $0x7,%xmm1,%edi
mov    %dil,0xe(%rax,%rbx,1)
shr    $0x8,%ecx
test   $0x1,%cl
je     1170 <caesarDecrypt+0x70>
pextrw $0x7,%xmm1,%ecx
mov    %ch,0xf(%rax,%rbx,1)
jmp    1170 <caesarDecrypt+0x70>
cmp    %r9,%rsi
jne    1479 <caesarDecrypt+0x379>
pop    %rbx
ret
mov    %ecx,%ebx
mov    %bl,(%rax,%rsi,1)
add    $0x1,%rsi
cmp    %rsi,%r9
je     1469 <caesarDecrypt+0x369>
movsbl (%rax,%rsi,1),%ebx
cmp    $0x20,%ebx
je     1470 <caesarDecrypt+0x370>
lea    -0x41(%rbx),%ecx
cmp    $0x19,%cl
ja     14a0 <caesarDecrypt+0x3a0>
lea    (%rbx,%rdx,1),%ecx
cmp    $0x5b,%ecx
jl     146b <caesarDecrypt+0x36b>
jmp    14b0 <caesarDecrypt+0x3b0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    -0x61(%rbx),%ecx
cmp    $0x19,%cl
ja     1470 <caesarDecrypt+0x370>
lea    (%rbx,%rdx,1),%ecx
cmp    $0x7b,%ecx
jl     146b <caesarDecrypt+0x36b>
add    %r8b,%bl
jmp    146d <caesarDecrypt+0x36d>

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

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