#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, char *);
int strlen(char *);
int main(int argc, char *argv[]) {
  int i = 0;
  int len = 0;
  char str[] = "Program written on 03-19-2016";
  printf("Initial string\t: %s\n", str);
  len = strlen(str);
  for (; i < len; i++) {
    if (str[i] >= 48 && str[i] <= 57)
      str[i] = 48 + (str[i] - 48 + 07) % 10;
    else if (str[i] >= 97 && str[i] <= 122)
      str[i] = 97 + (str[i] - 97 + 07) % 26;
    else if (str[i] >= 65 && str[i] <= 90)
      str[i] = 65 + (str[i] - 65 + 07) % 26;
    else if (str[i] >= 32 && str[i] <= 47)
      str[i] = 32 + (str[i] - 32 + 07) % 16;
    else
      str[i] = '~';
  }
  printf("Final string\t: %s\n", str);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    0xeb5(%rip),%rax
mov    %rax,-0x40(%rbp)
mov    0xeb2(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    0xeaf(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0xead(%rip),%eax
mov    %eax,-0x28(%rbp)
mov    0xea7(%rip),%ax
mov    %ax,-0x24(%rbp)
lea    -0x40(%rbp),%rsi
lea    0xe9a(%rip),%rdi
call   1040 <printf@plt>
lea    -0x40(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1300 <main+0x1e0>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x30,%eax
jl     11ee <main+0xce>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x39,%eax
jg     11ee <main+0xce>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
sub    $0x30,%eax
add    $0x7,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%edx
mov    %dl,%cl
movslq -0x14(%rbp),%rax
mov    %cl,-0x40(%rbp,%rax,1)
jmp    12ed <main+0x1cd>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x61,%eax
jl     123b <main+0x11b>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x7a,%eax
jg     123b <main+0x11b>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
sub    $0x61,%eax
add    $0x7,%eax
mov    $0x1a,%ecx
cltd
idiv   %ecx
add    $0x61,%edx
mov    %dl,%cl
movslq -0x14(%rbp),%rax
mov    %cl,-0x40(%rbp,%rax,1)
jmp    12e8 <main+0x1c8>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x41,%eax
jl     1288 <main+0x168>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x5a,%eax
jg     1288 <main+0x168>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
sub    $0x41,%eax
add    $0x7,%eax
mov    $0x1a,%ecx
cltd
idiv   %ecx
add    $0x41,%edx
mov    %dl,%cl
movslq -0x14(%rbp),%rax
mov    %cl,-0x40(%rbp,%rax,1)
jmp    12e3 <main+0x1c3>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x20,%eax
jl     12d5 <main+0x1b5>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
cmp    $0x2f,%eax
jg     12d5 <main+0x1b5>
movslq -0x14(%rbp),%rax
movsbl -0x40(%rbp,%rax,1),%eax
sub    $0x20,%eax
add    $0x7,%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
add    $0x20,%edx
mov    %dl,%cl
movslq -0x14(%rbp),%rax
mov    %cl,-0x40(%rbp,%rax,1)
jmp    12de <main+0x1be>
movslq -0x14(%rbp),%rax
movb   $0x7e,-0x40(%rbp,%rax,1)
jmp    12e3 <main+0x1c3>
jmp    12e8 <main+0x1c8>
jmp    12ed <main+0x1cd>
jmp    12f2 <main+0x1d2>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1195 <main+0x75>
lea    -0x40(%rbp),%rsi
lea    0xd28(%rip),%rdi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x20,%rsp
movups 0x1182(%rip),%xmm0
movups %xmm0,0xe(%rsp)
movdqa 0x1167(%rip),%xmm0
movdqa %xmm0,(%rsp)
lea    0x1179(%rip),%rdi
mov    %rsp,%rbx
mov    %rbx,%rsi
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <strlen@plt>
test   %eax,%eax
jle    1789 <main+0x669>
mov    %eax,%ecx
cmp    $0x8,%eax
jae    116e <main+0x4e>
xor    %eax,%eax
jmp    17c9 <main+0x6a9>
cmp    $0x10,%eax
jae    117a <main+0x5a>
xor    %eax,%eax
jmp    1440 <main+0x320>
mov    %ecx,%eax
and    $0xfffffff0,%eax
xor    %edx,%edx
pxor   %xmm3,%xmm3
movdqa 0xf53(%rip),%xmm1
movdqa 0xf2b(%rip),%xmm7
movdqa 0xee2(%rip),%xmm13
xchg   %ax,%ax
movdqa (%rsp,%rdx,1),%xmm12
movdqa %xmm12,%xmm8
paddb  0xe4c(%rip),%xmm8
movdqa %xmm8,%xmm2
pminub 0xe4f(%rip),%xmm2
pcmpeqb %xmm8,%xmm2
movdqa %xmm12,%xmm0
paddb  0xe4d(%rip),%xmm0
movdqa %xmm0,%xmm14
pminub 0xe4f(%rip),%xmm14
pcmpeqb %xmm0,%xmm14
pand   %xmm2,%xmm14
movdqa %xmm12,%xmm0
paddb  0xe48(%rip),%xmm0
movdqa %xmm0,%xmm11
pmaxub 0xe4a(%rip),%xmm11
pcmpeqb %xmm0,%xmm11
movdqa %xmm0,%xmm10
movdqa 0xe48(%rip),%xmm4
pminub %xmm4,%xmm10
pcmpeqb %xmm0,%xmm10
movdqa %xmm8,%xmm0
punpckhbw %xmm3,%xmm0
movdqa 0xe7d(%rip),%xmm5
pmullw %xmm5,%xmm0
psrlw  $0x8,%xmm0
movdqa %xmm8,%xmm2
punpcklbw %xmm3,%xmm2
pmullw %xmm5,%xmm2
psrlw  $0x8,%xmm2
packuswb %xmm0,%xmm2
psrlw  $0x3,%xmm2
pand   %xmm7,%xmm2
movdqa %xmm2,%xmm0
punpckhbw %xmm0,%xmm0
movdqa 0xe65(%rip),%xmm6
pmullw %xmm6,%xmm0
pand   %xmm1,%xmm0
punpcklbw %xmm2,%xmm2
pmullw %xmm6,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm0,%xmm2
psubb  %xmm2,%xmm8
movdqa %xmm12,%xmm9
paddb  0xe6a(%rip),%xmm9
movdqa %xmm9,%xmm0
punpckhbw %xmm3,%xmm0
pmullw %xmm5,%xmm0
psrlw  $0x8,%xmm0
movdqa %xmm9,%xmm2
punpcklbw %xmm3,%xmm2
pmullw %xmm5,%xmm2
psrlw  $0x8,%xmm2
packuswb %xmm0,%xmm2
psrlw  $0x3,%xmm2
pand   %xmm7,%xmm2
movdqa %xmm2,%xmm0
punpckhbw %xmm0,%xmm0
pmullw %xmm6,%xmm0
pand   %xmm1,%xmm0
punpcklbw %xmm2,%xmm2
pmullw %xmm6,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm0,%xmm2
psubb  %xmm2,%xmm9
movdqa %xmm12,%xmm6
paddb  0xe27(%rip),%xmm6
movdqa %xmm6,%xmm0
punpckhbw %xmm3,%xmm0
movdqa 0xe27(%rip),%xmm2
pmullw %xmm2,%xmm0
psrlw  $0x8,%xmm0
movdqa %xmm6,%xmm15
punpcklbw %xmm3,%xmm15
pmullw %xmm2,%xmm15
psrlw  $0x8,%xmm15
packuswb %xmm0,%xmm15
psrlw  $0x3,%xmm15
pand   %xmm7,%xmm15
movdqa %xmm15,%xmm0
punpckhbw %xmm0,%xmm0
movdqa 0xdf8(%rip),%xmm2
pmullw %xmm2,%xmm0
pand   %xmm1,%xmm0
punpcklbw %xmm15,%xmm15
pmullw %xmm2,%xmm15
pand   %xmm1,%xmm15
packuswb %xmm0,%xmm15
movdqa %xmm12,%xmm2
pand   0xcff(%rip),%xmm2
pcmpeqb %xmm13,%xmm2
psubb  %xmm15,%xmm6
movdqa %xmm12,%xmm0
pand   %xmm14,%xmm10
pand   %xmm14,%xmm11
paddb  0xdcd(%rip),%xmm12
movdqa %xmm12,%xmm5
pminub %xmm4,%xmm5
pcmpeqb %xmm12,%xmm5
movdqa %xmm11,%xmm4
pand   %xmm2,%xmm4
pandn  %xmm11,%xmm2
paddb  0xd38(%rip),%xmm8
por    0xd90(%rip),%xmm6
pand   %xmm10,%xmm8
pandn  %xmm6,%xmm10
por    %xmm8,%xmm10
paddb  0xcb9(%rip),%xmm0
pand   0xcc1(%rip),%xmm0
por    %xmm13,%xmm0
pand   %xmm4,%xmm0
pandn  %xmm10,%xmm4
por    %xmm0,%xmm4
paddb  0xd16(%rip),%xmm9
pand   %xmm5,%xmm9
pandn  %xmm4,%xmm5
por    %xmm9,%xmm5
movdqa %xmm2,%xmm0
pandn  %xmm5,%xmm0
pand   0xd58(%rip),%xmm2
por    %xmm0,%xmm2
movdqa %xmm2,(%rsp,%rdx,1)
add    $0x10,%rdx
cmp    %rdx,%rax
jne    11a0 <main+0x80>
cmp    %rcx,%rax
je     1789 <main+0x669>
test   $0x8,%cl
je     17c9 <main+0x6a9>
mov    %rax,%rdx
mov    %ecx,%eax
and    $0xfffffff8,%eax
nopl   0x0(%rax,%rax,1)
movq   (%rsp,%rdx,1),%xmm13
movdqa %xmm13,%xmm10
paddb  0xd1c(%rip),%xmm10
movdqa %xmm10,%xmm0
pmaxub 0xd1f(%rip),%xmm0
pcmpeqb %xmm10,%xmm0
pcmpeqd %xmm5,%xmm5
pxor   %xmm5,%xmm0
punpcklbw %xmm0,%xmm0
movdqa %xmm13,%xmm2
paddb  0xd11(%rip),%xmm2
movdqa %xmm2,%xmm6
pmaxub 0xd15(%rip),%xmm6
pcmpeqb %xmm2,%xmm6
pxor   %xmm5,%xmm6
punpcklbw %xmm6,%xmm14
pand   %xmm0,%xmm14
movdqa %xmm13,%xmm0
paddb  0xd06(%rip),%xmm0
movdqa %xmm0,%xmm9
movdqa 0xd09(%rip),%xmm1
pmaxub %xmm1,%xmm9
pcmpeqb %xmm0,%xmm9
punpcklbw %xmm9,%xmm6
psraw  $0x8,%xmm6
pxor   %xmm5,%xmm9
punpcklbw %xmm9,%xmm9
movdqa %xmm13,%xmm12
pand   0xced(%rip),%xmm12
movdqa 0xcf5(%rip),%xmm0
pcmpeqb %xmm0,%xmm12
movdqa %xmm10,%xmm0
pxor   %xmm3,%xmm3
punpckhbw %xmm3,%xmm0
movdqa 0xb9b(%rip),%xmm7
pmullw %xmm7,%xmm0
psrlw  $0x8,%xmm0
movdqa %xmm10,%xmm2
punpcklbw %xmm3,%xmm2
pmullw %xmm7,%xmm2
psrlw  $0x8,%xmm2
packuswb %xmm0,%xmm2
psrlw  $0x3,%xmm2
movdqa 0xb7e(%rip),%xmm11
pand   %xmm11,%xmm2
movdqa %xmm2,%xmm0
punpckhbw %xmm0,%xmm0
movdqa 0xb79(%rip),%xmm4
pmullw %xmm4,%xmm0
movdqa 0xb7d(%rip),%xmm1
pand   %xmm1,%xmm0
punpcklbw %xmm2,%xmm2
pmullw %xmm4,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm0,%xmm2
psubb  %xmm2,%xmm10
movdqa %xmm13,%xmm8
paddb  0xca6(%rip),%xmm8
movdqa %xmm8,%xmm0
punpckhbw %xmm3,%xmm0
pmullw %xmm7,%xmm0
psrlw  $0x8,%xmm0
movdqa %xmm8,%xmm2
punpcklbw %xmm3,%xmm2
pmullw %xmm7,%xmm2
psrlw  $0x8,%xmm2
packuswb %xmm0,%xmm2
psrlw  $0x3,%xmm2
pand   %xmm11,%xmm2
movdqa %xmm2,%xmm0
punpckhbw %xmm0,%xmm0
pmullw %xmm4,%xmm0
pand   %xmm1,%xmm0
punpcklbw %xmm2,%xmm2
pmullw %xmm4,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm0,%xmm2
psubb  %xmm2,%xmm8
movdqa %xmm13,%xmm0
paddb  0xc62(%rip),%xmm0
movdqa %xmm0,%xmm2
punpckhbw %xmm3,%xmm2
movdqa 0xb32(%rip),%xmm4
pmullw %xmm4,%xmm2
psrlw  $0x8,%xmm2
movdqa %xmm0,%xmm7
punpcklbw %xmm3,%xmm7
pmullw %xmm4,%xmm7
psrlw  $0x8,%xmm7
packuswb %xmm2,%xmm7
psrlw  $0x3,%xmm7
pand   %xmm11,%xmm7
movdqa %xmm7,%xmm2
punpckhbw %xmm2,%xmm2
movdqa 0xb0a(%rip),%xmm3
pmullw %xmm3,%xmm2
pand   %xmm1,%xmm2
punpcklbw %xmm7,%xmm7
pmullw %xmm3,%xmm7
pand   %xmm1,%xmm7
packuswb %xmm2,%xmm7
movdqa %xmm12,%xmm11
punpcklbw %xmm12,%xmm12
psubb  %xmm7,%xmm0
psraw  $0x8,%xmm14
pand   %xmm1,%xmm9
pand   %xmm14,%xmm9
packuswb %xmm9,%xmm9
psllw  $0x7,%xmm9
movdqa 0xbf1(%rip),%xmm3
pand   %xmm3,%xmm9
pxor   %xmm15,%xmm15
pcmpgtb %xmm9,%xmm15
movdqa %xmm13,%xmm7
pand   %xmm6,%xmm14
pand   %xmm1,%xmm12
pand   %xmm14,%xmm12
packuswb %xmm12,%xmm12
psllw  $0x7,%xmm12
pand   %xmm3,%xmm12
pxor   %xmm6,%xmm6
pcmpgtb %xmm12,%xmm6
paddb  0xbbc(%rip),%xmm13
movdqa %xmm13,%xmm2
pmaxub 0xaff(%rip),%xmm2
pcmpeqb %xmm13,%xmm2
pxor   %xmm5,%xmm11
punpcklbw %xmm11,%xmm11
pand   %xmm1,%xmm11
pand   %xmm14,%xmm11
packuswb %xmm11,%xmm11
psllw  $0x7,%xmm11
pand   %xmm3,%xmm11
pxor   %xmm5,%xmm5
pcmpgtb %xmm11,%xmm5
paddb  0xb14(%rip),%xmm10
por    0xb4c(%rip),%xmm0
pand   %xmm15,%xmm10
pandn  %xmm0,%xmm15
por    %xmm10,%xmm15
paddb  0xad5(%rip),%xmm7
pand   0xadd(%rip),%xmm7
por    0xab5(%rip),%xmm7
pand   %xmm6,%xmm7
pandn  %xmm15,%xmm6
por    %xmm7,%xmm6
paddb  0xaef(%rip),%xmm8
pand   %xmm2,%xmm6
pandn  %xmm8,%xmm2
por    %xmm6,%xmm2
movdqa %xmm5,%xmm0
pandn  %xmm2,%xmm0
pand   0xb22(%rip),%xmm5
por    %xmm0,%xmm5
movq   %xmm5,(%rsp,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rax
jne    1450 <main+0x330>
cmp    %rcx,%rax
jne    17c9 <main+0x6a9>
lea    0xb43(%rip),%rdi
mov    %rsp,%rsi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbx
ret
add    $0xd7,%sil
movzbl %sil,%edx
imul   $0xcd,%edx,%esi
shr    $0xa,%esi
and    $0xfffffffe,%esi
lea    (%rsi,%rsi,4),%esi
sub    %sil,%dl
or     $0x30,%dl
mov    %dl,(%rsp,%rax,1)
add    $0x1,%rax
cmp    %rax,%rcx
je     1789 <main+0x669>
movzbl (%rsp,%rax,1),%esi
lea    -0x30(%rsi),%edx
cmp    $0x9,%dl
jbe    17a0 <main+0x680>
lea    -0x61(%rsi),%edx
cmp    $0x19,%dl
ja     1800 <main+0x6e0>
add    $0xa6,%sil
movzbl %sil,%edx
imul   $0x4f,%edx,%esi
shr    $0xb,%esi
lea    (%rsi,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %esi,%edi
sub    %dil,%dl
add    $0x61,%dl
jmp    17bd <main+0x69d>
nopl   0x0(%rax,%rax,1)
lea    -0x41(%rsi),%edx
cmp    $0x19,%dl
ja     1826 <main+0x706>
add    $0xc6,%sil
movzbl %sil,%edx
imul   $0x4f,%edx,%esi
shr    $0xb,%esi
lea    (%rsi,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %esi,%edi
sub    %dil,%dl
add    $0x41,%dl
jmp    17bd <main+0x69d>
mov    %esi,%ebx
and    $0xf0,%bl
mov    $0x7e,%dl
cmp    $0x20,%bl
jne    17bd <main+0x69d>
add    $0x7,%sil
and    $0xf,%sil
or     $0x20,%sil
mov    %esi,%edx
jmp    17bd <main+0x69d>

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

LLVM IR (-O2):
@__const.main.str = [30 x i8] c"Program written on 03-19-2016\00"
@.str = [21 x i8] c"Initial string\09: %s\0A\00"
@.str.1 = [19 x i8] c"Final string\09: %s\0A\00"
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = alloca [30 x i8]
%4 = getelementptr inbounds [30 x i8], [30 x i8]* %3, i64 0, i64 0
%5 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* %4)
%6 = call i32 @strlen(i8* %4)
%7 = icmp sgt i32 %6, 0
br i1 %7, label %8, label %144
8: ; preds = %2
%9 = zext i32 %6 to i64
%10 = icmp ult i32 %6, 8
br i1 %10, label %107, label %11
11: ; preds = %8
%12 = icmp ult i32 %6, 16
br i1 %12, label %61, label %13
13: ; preds = %11
%14 = and i64 %9, 4294967280
br label %15
15: ; preds = %15, %13
%16 = phi i64 [ 0, %13 ], [ %54, %15 ]
%17 = getelementptr inbounds [30 x i8], [30 x i8]* %3, i64 0, i64 %16
%18 = bitcast i8* %17 to <16 x i8>*
%19 = load <16 x i8>, <16 x i8>* %18
%20 = add <16 x i8> %19, <i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58>
%21 = icmp ult <16 x i8> %20, <i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10>
%22 = add <16 x i8> %19, <i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123>
%23 = icmp ult <16 x i8> %22, <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>
%24 = add <16 x i8> %19, <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>
%25 = icmp ult <16 x i8> %24, <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>
%26 = and <16 x i8> %19, <i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16>
%27 = icmp eq <16 x i8> %26, <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>
%28 = add <16 x i8> %19, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
%29 = and <16 x i8> %28, <i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15>
%30 = or <16 x i8> %29, <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>
%31 = add <16 x i8> %19, <i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58>
%32 = urem <16 x i8> %31, <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>
%33 = add nuw nsw <16 x i8> %32, <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>
%34 = add <16 x i8> %19, <i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90>
%35 = urem <16 x i8> %34, <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>
%36 = add nuw nsw <16 x i8> %35, <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>
%37 = add <16 x i8> %19, <i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41>
%38 = urem <16 x i8> %37, <i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10>
%39 = or <16 x i8> %38, <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>
%40 = and <16 x i1> %21, %23
%41 = select <16 x i1> %40, <16 x i1> %25, <16 x i1> zeroinitializer
%42 = xor <16 x i1> %25, <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>
%43 = select <16 x i1> %40, <16 x i1> %42, <16 x i1> zeroinitializer
%44 = select <16 x i1> %43, <16 x i1> %27, <16 x i1> zeroinitializer
%45 = add <16 x i8> %19, <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>
%46 = icmp ult <16 x i8> %45, <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>
%47 = 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>
%48 = select <16 x i1> %43, <16 x i1> %47, <16 x i1> zeroinitializer
%49 = select <16 x i1> %41, <16 x i8> %33, <16 x i8> %39
%50 = select <16 x i1> %44, <16 x i8> %30, <16 x i8> %49
%51 = select <16 x i1> %46, <16 x i8> %36, <16 x i8> %50
%52 = select <16 x i1> %48, <16 x i8> <i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126>, <16 x i8> %51
%53 = bitcast i8* %17 to <16 x i8>*
store <16 x i8> %52, <16 x i8>* %53
%54 = add nuw i64 %16, 16
%55 = icmp eq i64 %54, %14
br i1 %55, label %56, label %15
56: ; preds = %15
%57 = icmp eq i64 %14, %9
br i1 %57, label %144, label %58
58: ; preds = %56
%59 = and i64 %9, 8
%60 = icmp eq i64 %59, 0
br i1 %60, label %107, label %61
61: ; preds = %11, %58
%62 = phi i64 [ %14, %58 ], [ 0, %11 ]
%63 = and i64 %9, 4294967288
br label %64
64: ; preds = %64, %61
%65 = phi i64 [ %62, %61 ], [ %103, %64 ]
%66 = getelementptr inbounds [30 x i8], [30 x i8]* %3, i64 0, i64 %65
%67 = bitcast i8* %66 to <8 x i8>*
%68 = load <8 x i8>, <8 x i8>* %67
%69 = add <8 x i8> %68, <i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58>
%70 = icmp ult <8 x i8> %69, <i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10, i8 -10>
%71 = add <8 x i8> %68, <i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123, i8 -123>
%72 = icmp ult <8 x i8> %71, <i8 -26, i8 -26, i8 -26, i8 -26, i8 -26, i8 -26, i8 -26, i8 -26>
%73 = add <8 x i8> %68, <i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65>
%74 = icmp ult <8 x i8> %73, <i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26>
%75 = and <8 x i8> %68, <i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16, i8 -16>
%76 = icmp eq <8 x i8> %75, <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>
%77 = add <8 x i8> %68, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
%78 = and <8 x i8> %77, <i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15>
%79 = or <8 x i8> %78, <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>
%80 = add <8 x i8> %68, <i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58, i8 -58>
%81 = urem <8 x i8> %80, <i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26>
%82 = add nuw nsw <8 x i8> %81, <i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65>
%83 = add <8 x i8> %68, <i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90, i8 -90>
%84 = urem <8 x i8> %83, <i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26>
%85 = add nuw nsw <8 x i8> %84, <i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97>
%86 = add <8 x i8> %68, <i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41, i8 -41>
%87 = urem <8 x i8> %86, <i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10>
%88 = or <8 x i8> %87, <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>
%89 = and <8 x i1> %70, %72
%90 = select <8 x i1> %89, <8 x i1> %74, <8 x i1> zeroinitializer
%91 = xor <8 x i1> %74, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
%92 = select <8 x i1> %89, <8 x i1> %91, <8 x i1> zeroinitializer
%93 = select <8 x i1> %92, <8 x i1> %76, <8 x i1> zeroinitializer
%94 = add <8 x i8> %68, <i8 -97, i8 -97, i8 -97, i8 -97, i8 -97, i8 -97, i8 -97, i8 -97>
%95 = icmp ult <8 x i8> %94, <i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26>
%96 = xor <8 x i1> %76, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
%97 = select <8 x i1> %92, <8 x i1> %96, <8 x i1> zeroinitializer
%98 = select <8 x i1> %90, <8 x i8> %82, <8 x i8> %88
%99 = select <8 x i1> %93, <8 x i8> %79, <8 x i8> %98
%100 = select <8 x i1> %95, <8 x i8> %85, <8 x i8> %99
%101 = select <8 x i1> %97, <8 x i8> <i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126>, <8 x i8> %100
%102 = bitcast i8* %66 to <8 x i8>*
store <8 x i8> %101, <8 x i8>* %102
%103 = add nuw i64 %65, 8
%104 = icmp eq i64 %103, %63
br i1 %104, label %105, label %64
105: ; preds = %64
%106 = icmp eq i64 %63, %9
br i1 %106, label %144, label %107
107: ; preds = %8, %58, %105
%108 = phi i64 [ 0, %8 ], [ %14, %58 ], [ %63, %105 ]
br label %109
109: ; preds = %107, %140
%110 = phi i64 [ %142, %140 ], [ %108, %107 ]
%111 = getelementptr inbounds [30 x i8], [30 x i8]* %3, i64 0, i64 %110
%112 = load i8, i8* %111
%113 = add i8 %112, -48
%114 = icmp ult i8 %113, 10
br i1 %114, label %115, label %119
115: ; preds = %109
%116 = add i8 %112, -41
%117 = urem i8 %116, 10
%118 = or i8 %117, 48
br label %140
119: ; preds = %109
%120 = add i8 %112, -97
%121 = icmp ult i8 %120, 26
br i1 %121, label %122, label %126
122: ; preds = %119
%123 = add i8 %112, -90
%124 = urem i8 %123, 26
%125 = add nuw nsw i8 %124, 97
br label %140
126: ; preds = %119
%127 = add i8 %112, -65
%128 = icmp ult i8 %127, 26
br i1 %128, label %129, label %133
129: ; preds = %126
%130 = add i8 %112, -58
%131 = urem i8 %130, 26
%132 = add nuw nsw i8 %131, 65
br label %140
133: ; preds = %126
%134 = and i8 %112, -16
%135 = icmp eq i8 %134, 32
br i1 %135, label %136, label %140
136: ; preds = %133
%137 = add i8 %112, 7
%138 = and i8 %137, 15
%139 = or i8 %138, 32
br label %140
140: ; preds = %133, %115, %129, %136, %122
%141 = phi i8 [ %118, %115 ], [ %132, %129 ], [ %139, %136 ], [ %125, %122 ], [ 126, %133 ]
store i8 %141, i8* %111
%142 = add nuw nsw i64 %110, 1
%143 = icmp eq i64 %142, %9
br i1 %143, label %144, label %109
144: ; preds = %140, %56, %105, %2
%145 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.1, i64 0, i64 0), i8* %4)
ret i32 0
}