#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 *, ...);
int /*<<< orphan*/ scanf(char *, ...);
int strlen(char *);
int main() {
  int count;
  int x;
  int ex;
  char parola[50];
  int i;
  int lunghezza;
  char risultato[50];
  printf("                           ---CriptoVale---    \n");
  printf("       A simple encryption and decryption software based on caesar "
         "cipher                   \n");
  printf("                   Copyright(C) 2014 - 2016 Valerio Besozzi    ");
  printf("\n");
  printf("\n");
  while (1) {
    printf("\n");
    printf("1) Encrypt\n");
    printf("2) Decrypt\n");
    while (1) {
      printf("Make your selection: ");
      scanf("%d", &x);
      if ((x == 1) || (x == 2)) {
        break;
      } else {
        printf("\nError: Insert 1 or 2\n");
      }
    }
    switch (x) {
    case 1:
      printf("\nEnter the word to be encrypted: ");
      scanf("%s", parola);
      lunghezza = strlen(parola);
      printf("\nWord length = %d\n", lunghezza);
      printf("_________________________________________________________________"
             "____");
      printf("\n");
      for (i = 0; i < lunghezza; i++) {
        risultato[i] = parola[i] + 1;
      }
      printf("%s  ", parola);
      printf("------------>  ");
      printf("ASCII : ");
      for (count = 0; count < lunghezza; count++)
        printf("%d ", risultato[count]);
      printf("------------>  ");
      for (count = 0; count < lunghezza; count++)
        printf("%c", risultato[count]);
      printf("\n");
      printf("_________________________________________________________________"
             "____");
      printf("\n");
      break;
    case 2:
      printf("\nEnter the word to decrypt : \n ");
      scanf("%s", parola);
      lunghezza = strlen(parola);
      printf("\nWord length = %d\n", lunghezza);
      printf("_________________________________________________________________"
             "____");
      printf("\n");
      for (i = 0; i < lunghezza; i++) {
        risultato[i] = parola[i] - 1;
      }
      printf("%s  ", parola);
      printf("------------>  ");
      printf("ASCII : ");
      for (count = 0; count < lunghezza; count++)
        printf("%d ", risultato[count]);
      printf("------------>  ");
      for (count = 0; count < lunghezza; count++)
        printf("%c", risultato[count]);
      printf("\n");
      printf("_________________________________________________________________"
             "____");
      printf("\n");
      break;
    }
    printf("Exit? (Yes = 0 | No = 1): ");
    scanf("%d", &ex);
    if (ex == 0) {
      break;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeb7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xeda(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf2a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf1a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf0c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xefe(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf32(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf30(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf2e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf36(%rip),%rdi
lea    -0xc(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
cmpl   $0x1,-0xc(%rbp)
je     11e6 <main+0xb6>
cmpl   $0x2,-0xc(%rbp)
jne    11eb <main+0xbb>
jmp    11fe <main+0xce>
lea    0xf0e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    11b2 <main+0x82>
mov    -0xc(%rbp),%eax
mov    %eax,-0x94(%rbp)
sub    $0x1,%eax
je     1229 <main+0xf9>
jmp    1215 <main+0xe5>
mov    -0x94(%rbp),%eax
sub    $0x2,%eax
je     139d <main+0x26d>
jmp    150c <main+0x3dc>
lea    0xee7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x50(%rbp),%rsi
lea    0xef7(%rip),%rdi
mov    $0x0,%al
call   1050 <scanf@plt>
lea    -0x50(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%esi
lea    0xedd(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xee2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe12(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    12bc <main+0x18c>
movslq -0x54(%rbp),%rax
movsbl -0x50(%rbp,%rax,1),%eax
add    $0x1,%eax
mov    %al,%cl
movslq -0x54(%rbp),%rax
mov    %cl,-0x90(%rbp,%rax,1)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1289 <main+0x159>
lea    -0x50(%rbp),%rsi
lea    0xece(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xec5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xec7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    1325 <main+0x1f5>
movslq -0x8(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%esi
ff
lea    0xea3(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12f1 <main+0x1c1>
lea    0xe6e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    136e <main+0x23e>
movslq -0x8(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%esi
ff
lea    0xe5e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    133a <main+0x20a>
lea    0xd18(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xdcc(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xcfc(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    150c <main+0x3dc>
lea    0xe16(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x50(%rbp),%rsi
lea    0xd83(%rip),%rdi
mov    $0x0,%al
call   1050 <scanf@plt>
lea    -0x50(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%esi
lea    0xd69(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd6e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xc9e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    1430 <main+0x300>
movslq -0x54(%rbp),%rax
movsbl -0x50(%rbp,%rax,1),%eax
sub    $0x1,%eax
mov    %al,%cl
movslq -0x54(%rbp),%rax
mov    %cl,-0x90(%rbp,%rax,1)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13fd <main+0x2cd>
lea    -0x50(%rbp),%rsi
lea    0xd5a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd51(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd53(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    1499 <main+0x369>
movslq -0x8(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%esi
ff
lea    0xd2f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1465 <main+0x335>
lea    0xcfa(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    14e2 <main+0x3b2>
movslq -0x8(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%esi
ff
lea    0xcea(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14ae <main+0x37e>
lea    0xba4(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xc58(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xb88(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xcc7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xbdc(%rip),%rdi
lea    -0x10(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
cmpl   $0x0,-0x10(%rbp)
jne    153b <main+0x40b>
jmp    1540 <main+0x410>
jmp    1188 <main+0x58>
xor    %eax,%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
lea    0xfcc(%rip),%rdi
call   1040 <puts@plt>
lea    0xff0(%rip),%rdi
call   1040 <puts@plt>
lea    0xe80(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe9e(%rip),%r12
lea    0xead(%rip),%r15
lea    0x4(%rsp),%rbx
lea    0x50(%rsp),%r13
lea    0xed7(%rip),%r14
lea    0x1016(%rip),%rbp
jmp    1268 <main+0x118>
cs nopw 0x0(%rax,%rax,1)
lea    0xf00(%rip),%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xef4(%rip),%r13
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xef3(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe76(%rip),%r14
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x50(%rsp),%r13
lea    0x4(%rsp),%rbx
lea    0xf97(%rip),%rbp
lea    0xed2(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    %r15,%rdi
lea    0xc(%rsp),%rsi
xor    %eax,%eax
call   1070 <scanf@plt>
cmpl   $0x0,0xc(%rsp)
je     1728 <main+0x5d8>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xf48(%rip),%rdi
call   1040 <puts@plt>
lea    0xf47(%rip),%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1070 <scanf@plt>
mov    0x4(%rsp),%eax
lea    -0x1(%rax),%ecx
cmp    $0x2,%ecx
jb     12db <main+0x18b>
nopl   (%rax)
mov    %rbp,%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1070 <scanf@plt>
mov    0x4(%rsp),%eax
lea    -0x1(%rax),%ecx
cmp    $0x1,%ecx
ja     12b0 <main+0x160>
cmp    $0x2,%eax
je     1350 <main+0x200>
cmp    $0x1,%eax
jne    1240 <main+0xf0>
lea    0xd69(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xd7d(%rip),%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1070 <scanf@plt>
mov    %r13,%rdi
call   1050 <strlen@plt>
mov    %eax,%ebx
lea    0xd65(%rip),%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
test   %ebx,%ebx
jle    11d0 <main+0x80>
mov    %ebx,%r14d
cmp    $0x8,%ebx
jae    13b3 <main+0x263>
xor    %eax,%eax
jmp    14c0 <main+0x370>
nopl   (%rax)
lea    0xda2(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xd16(%rip),%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1070 <scanf@plt>
mov    %r13,%rdi
call   1050 <strlen@plt>
mov    %eax,%ebx
lea    0xcfe(%rip),%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
test   %ebx,%ebx
jle    11d0 <main+0x80>
mov    %ebx,%ebp
cmp    $0x8,%ebx
jae    13bf <main+0x26f>
xor    %eax,%eax
jmp    1660 <main+0x510>
cmp    $0x20,%ebx
jae    13cf <main+0x27f>
xor    %eax,%eax
jmp    148d <main+0x33d>
cmp    $0x20,%ebx
jae    1578 <main+0x428>
xor    %eax,%eax
jmp    162d <main+0x4dd>
mov    %r14d,%eax
and    $0xffffffe0,%eax
lea    -0x20(%rax),%rdx
mov    %rdx,%rcx
shr    $0x5,%rcx
add    $0x1,%rcx
test   %rdx,%rdx
pcmpeqd %xmm4,%xmm4
je     1708 <main+0x5b8>
mov    %rcx,%rsi
movabs $0xffffffffffffffe,%rdx
ff ff 0f
and    %rdx,%rsi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqa 0x50(%rsp,%rdx,1),%xmm0
movdqa 0x60(%rsp,%rdx,1),%xmm1
movdqa 0x70(%rsp,%rdx,1),%xmm2
movdqa 0x80(%rsp,%rdx,1),%xmm3
psubb  %xmm4,%xmm0
psubb  %xmm4,%xmm1
movdqa %xmm0,0x10(%rsp,%rdx,1)
movdqa %xmm1,0x20(%rsp,%rdx,1)
psubb  %xmm4,%xmm2
psubb  %xmm4,%xmm3
movdqa %xmm2,0x30(%rsp,%rdx,1)
movdqa %xmm3,0x40(%rsp,%rdx,1)
add    $0x40,%rdx
add    $0xfffffffffffffffe,%rsi
jne    1410 <main+0x2c0>
test   $0x1,%cl
je     1482 <main+0x332>
movdqa 0x50(%rsp,%rdx,1),%xmm0
movdqa 0x60(%rsp,%rdx,1),%xmm1
psubb  %xmm4,%xmm0
psubb  %xmm4,%xmm1
movdqa %xmm0,0x10(%rsp,%rdx,1)
movdqa %xmm1,0x20(%rsp,%rdx,1)
cmp    %r14,%rax
je     14d5 <main+0x385>
test   $0x18,%r14b
je     14c0 <main+0x370>
mov    %rax,%rcx
mov    %r14d,%eax
and    $0xfffffff8,%eax
pcmpeqd %xmm1,%xmm1
nopw   0x0(%rax,%rax,1)
movq   0x50(%rsp,%rcx,1),%xmm0
psubb  %xmm1,%xmm0
movq   %xmm0,0x10(%rsp,%rcx,1)
add    $0x8,%rcx
cmp    %rcx,%rax
jne    14a0 <main+0x350>
cmp    %r14,%rax
je     14d5 <main+0x385>
xchg   %ax,%ax
movzbl 0x50(%rsp,%rax,1),%ecx
add    $0x1,%cl
mov    %cl,0x10(%rsp,%rax,1)
add    $0x1,%rax
cmp    %rax,%r14
jne    14c0 <main+0x370>
lea    0xbfb(%rip),%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xbef(%rip),%r13
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xbee(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
test   %ebx,%ebx
jle    1200 <main+0xb0>
xor    %ebp,%ebp
lea    0xbdf(%rip),%r12
cs nopw 0x0(%rax,%rax,1)
movsbl 0x10(%rsp,%rbp,1),%esi
mov    %r12,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%rbp
cmp    %rbp,%r14
jne    1520 <main+0x3d0>
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
test   %ebx,%ebx
lea    0xaf5(%rip),%r12
jle    120a <main+0xba>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsbl 0x10(%rsp,%rbp,1),%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    %rbp,%r14
jne    1560 <main+0x410>
jmp    120a <main+0xba>
mov    %ebp,%eax
and    $0xffffffe0,%eax
lea    -0x20(%rax),%rdx
mov    %rdx,%rcx
shr    $0x5,%rcx
add    $0x1,%rcx
test   %rdx,%rdx
pcmpeqd %xmm2,%xmm2
je     1718 <main+0x5c8>
mov    %rcx,%rsi
movabs $0xffffffffffffffe,%rdx
ff ff 0f
and    %rdx,%rsi
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movdqa 0x50(%rsp,%rdx,1),%xmm0
paddb  %xmm2,%xmm0
movdqa 0x60(%rsp,%rdx,1),%xmm1
paddb  %xmm2,%xmm1
movdqa %xmm0,0x10(%rsp,%rdx,1)
movdqa %xmm1,0x20(%rsp,%rdx,1)
movdqa 0x70(%rsp,%rdx,1),%xmm0
paddb  %xmm2,%xmm0
movdqa 0x80(%rsp,%rdx,1),%xmm1
paddb  %xmm2,%xmm1
movdqa %xmm0,0x30(%rsp,%rdx,1)
movdqa %xmm1,0x40(%rsp,%rdx,1)
add    $0x40,%rdx
add    $0xfffffffffffffffe,%rsi
jne    15b0 <main+0x460>
test   $0x1,%cl
je     1622 <main+0x4d2>
movdqa 0x50(%rsp,%rdx,1),%xmm0
paddb  %xmm2,%xmm0
movdqa 0x60(%rsp,%rdx,1),%xmm1
paddb  %xmm2,%xmm1
movdqa %xmm0,0x10(%rsp,%rdx,1)
movdqa %xmm1,0x20(%rsp,%rdx,1)
cmp    %rbp,%rax
je     1675 <main+0x525>
test   $0x18,%bpl
je     1660 <main+0x510>
mov    %rax,%rcx
mov    %ebp,%eax
and    $0xfffffff8,%eax
pcmpeqd %xmm1,%xmm1
nopl   0x0(%rax)
movq   0x50(%rsp,%rcx,1),%xmm0
paddb  %xmm1,%xmm0
movq   %xmm0,0x10(%rsp,%rcx,1)
add    $0x8,%rcx
cmp    %rcx,%rax
jne    1640 <main+0x4f0>
cmp    %rbp,%rax
je     1675 <main+0x525>
xchg   %ax,%ax
movzbl 0x50(%rsp,%rax,1),%ecx
add    $0xff,%cl
mov    %cl,0x10(%rsp,%rax,1)
add    $0x1,%rax
cmp    %rax,%rbp
jne    1660 <main+0x510>
lea    0xa5b(%rip),%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xa4f(%rip),%r13
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xa4e(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
test   %ebx,%ebx
jle    1200 <main+0xb0>
mov    %ebx,0x8(%rsp)
xor    %r14d,%r14d
lea    0xa3a(%rip),%rbx
nopl   0x0(%rax,%rax,1)
movsbl 0x10(%rsp,%r14,1),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%r14
cmp    %r14,%rbp
jne    16c0 <main+0x570>
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
cmpl   $0x0,0x8(%rsp)
jle    120a <main+0xba>
xor    %ebx,%ebx
movsbl 0x10(%rsp,%rbx,1),%edi
call   1030 <putchar@plt>
add    $0x1,%rbx
cmp    %rbx,%rbp
jne    16f0 <main+0x5a0>
jmp    120a <main+0xba>
xor    %edx,%edx
test   $0x1,%cl
jne    1462 <main+0x312>
jmp    1482 <main+0x332>
xor    %edx,%edx
test   $0x1,%cl
jne    1602 <main+0x4b2>
jmp    1622 <main+0x4d2>
xor    %eax,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [49 x i8] c" ---CriptoVale--- \0A\00"
@.str.1 = [94 x i8] c" A simple encryption and decryption software based on caesar cipher \0A\00"
@.str.2 = [64 x i8] c" Copyright(C) 2014 - 2016 Valerio Besozzi \00"
@.str.3 = [2 x i8] c"\0A\00"
@.str.4 = [12 x i8] c"1) Encrypt\0A\00"
@.str.5 = [12 x i8] c"2) Decrypt\0A\00"
@.str.6 = [22 x i8] c"Make your selection: \00"
@.str.7 = [3 x i8] c"%d\00"
@.str.8 = [23 x i8] c"\0AError: Insert 1 or 2\0A\00"
@.str.9 = [34 x i8] c"\0AEnter the word to be encrypted: \00"
@.str.10 = [3 x i8] c"%s\00"
@.str.11 = [19 x i8] c"\0AWord length = %d\0A\00"
@.str.12 = [70 x i8] c"_____________________________________________________________________\00"
@.str.13 = [5 x i8] c"%s \00"
@.str.14 = [16 x i8] c"------------> \00"
@.str.15 = [9 x i8] c"ASCII : \00"
@.str.16 = [4 x i8] c"%d \00"
@.str.17 = [3 x i8] c"%c\00"
@.str.18 = [32 x i8] c"\0AEnter the word to decrypt : \0A \00"
@.str.19 = [27 x i8] c"Exit? (Yes = 0 | No = 1): \00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca [50 x i8]
%6 = alloca i32
%7 = alloca i32
%8 = alloca [50 x i8]
store i32 0, i32* %1
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([94 x i8], [94 x i8]* @.str.1, i64 0, i64 0))
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.2, i64 0, i64 0))
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
br label %14
14: ; preds = %0, %172
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.4, i64 0, i64 0))
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.5, i64 0, i64 0))
br label %18
18: ; preds = %14, %29
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.6, i64 0, i64 0))
%20 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i32* %3)
%21 = load i32, i32* %3
%22 = icmp eq i32 %21, 1
br i1 %22, label %26, label %23
23: ; preds = %18
%24 = load i32, i32* %3
%25 = icmp eq i32 %24, 2
br i1 %25, label %26, label %27
26: ; preds = %23, %18
br label %30
27: ; preds = %23
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.8, i64 0, i64 0))
br label %29
29: ; preds = %27
br label %18
30: ; preds = %26
%31 = load i32, i32* %3
switch i32 %31, label %166 [
i32 1, label %32
i32 2, label %99
]
32: ; preds = %30
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.9, i64 0, i64 0))
%34 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 0
%35 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.10, i64 0, i64 0), i8* %34)
%36 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 0
%37 = call i32 @strlen(i8* %36)
store i32 %37, i32* %7
%38 = load i32, i32* %7
%39 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0), i32 %38)
%40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.12, i64 0, i64 0))
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %6
br label %42
42: ; preds = %57, %32
%43 = load i32, i32* %6
%44 = load i32, i32* %7
%45 = icmp slt i32 %43, %44
br i1 %45, label %46, label %60
46: ; preds = %42
%47 = load i32, i32* %6
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 %48
%50 = load i8, i8* %49
%51 = sext i8 %50 to i32
%52 = add nsw i32 %51, 1
%53 = trunc i32 %52 to i8
%54 = load i32, i32* %6
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds [50 x i8], [50 x i8]* %8, i64 0, i64 %55
store i8 %53, i8* %56
br label %57
57: ; preds = %46
%58 = load i32, i32* %6
%59 = add nsw i32 %58, 1
store i32 %59, i32* %6
br label %42
60: ; preds = %42
%61 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 0
%62 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0), i8* %61)
%63 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
%64 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
store i32 0, i32* %2
br label %65
65: ; preds = %76, %60
%66 = load i32, i32* %2
%67 = load i32, i32* %7
%68 = icmp slt i32 %66, %67
br i1 %68, label %69, label %79
69: ; preds = %65
%70 = load i32, i32* %2
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [50 x i8], [50 x i8]* %8, i64 0, i64 %71
%73 = load i8, i8* %72
%74 = sext i8 %73 to i32
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 %74)
br label %76
76: ; preds = %69
%77 = load i32, i32* %2
%78 = add nsw i32 %77, 1
store i32 %78, i32* %2
br label %65
79: ; preds = %65
%80 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
store i32 0, i32* %2
br label %81
81: ; preds = %92, %79
%82 = load i32, i32* %2
%83 = load i32, i32* %7
%84 = icmp slt i32 %82, %83
br i1 %84, label %85, label %95
85: ; preds = %81
%86 = load i32, i32* %2
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [50 x i8], [50 x i8]* %8, i64 0, i64 %87
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
%91 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.17, i64 0, i64 0), i32 %90)
br label %92
92: ; preds = %85
%93 = load i32, i32* %2
%94 = add nsw i32 %93, 1
store i32 %94, i32* %2
br label %81
95: ; preds = %81
%96 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%97 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.12, i64 0, i64 0))
%98 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
br label %166
99: ; preds = %30
%100 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.18, i64 0, i64 0))
%101 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 0
%102 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.10, i64 0, i64 0), i8* %101)
%103 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 0
%104 = call i32 @strlen(i8* %103)
store i32 %104, i32* %7
%105 = load i32, i32* %7
%106 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0), i32 %105)
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.12, i64 0, i64 0))
%108 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %6
br label %109
109: ; preds = %124, %99
%110 = load i32, i32* %6
%111 = load i32, i32* %7
%112 = icmp slt i32 %110, %111
br i1 %112, label %113, label %127
113: ; preds = %109
%114 = load i32, i32* %6
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 %115
%117 = load i8, i8* %116
%118 = sext i8 %117 to i32
%119 = sub nsw i32 %118, 1
%120 = trunc i32 %119 to i8
%121 = load i32, i32* %6
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds [50 x i8], [50 x i8]* %8, i64 0, i64 %122
store i8 %120, i8* %123
br label %124
124: ; preds = %113
%125 = load i32, i32* %6
%126 = add nsw i32 %125, 1
store i32 %126, i32* %6
br label %109
127: ; preds = %109
%128 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 0
%129 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0), i8* %128)
%130 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
%131 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
store i32 0, i32* %2
br label %132
132: ; preds = %143, %127
%133 = load i32, i32* %2
%134 = load i32, i32* %7
%135 = icmp slt i32 %133, %134
br i1 %135, label %136, label %146
136: ; preds = %132
%137 = load i32, i32* %2
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds [50 x i8], [50 x i8]* %8, i64 0, i64 %138
%140 = load i8, i8* %139
%141 = sext i8 %140 to i32
%142 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 %141)
br label %143
143: ; preds = %136
%144 = load i32, i32* %2
%145 = add nsw i32 %144, 1
store i32 %145, i32* %2
br label %132
146: ; preds = %132
%147 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
store i32 0, i32* %2
br label %148
148: ; preds = %159, %146
%149 = load i32, i32* %2
%150 = load i32, i32* %7
%151 = icmp slt i32 %149, %150
br i1 %151, label %152, label %162
152: ; preds = %148
%153 = load i32, i32* %2
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds [50 x i8], [50 x i8]* %8, i64 0, i64 %154
%156 = load i8, i8* %155
%157 = sext i8 %156 to i32
%158 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.17, i64 0, i64 0), i32 %157)
br label %159
159: ; preds = %152
%160 = load i32, i32* %2
%161 = add nsw i32 %160, 1
store i32 %161, i32* %2
br label %148
162: ; preds = %148
%163 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%164 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.12, i64 0, i64 0))
%165 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
br label %166
166: ; preds = %30, %162, %95
%167 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.19, i64 0, i64 0))
%168 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i32* %4)
%169 = load i32, i32* %4
%170 = icmp eq i32 %169, 0
br i1 %170, label %171, label %172
171: ; preds = %166
br label %173
172: ; preds = %166
br label %14
173: ; preds = %171
ret i32 0
}

LLVM IR (-O2):
@.str.2 = [64 x i8] c" Copyright(C) 2014 - 2016 Valerio Besozzi \00"
@.str.6 = [22 x i8] c"Make your selection: \00"
@.str.7 = [3 x i8] c"%d\00"
@.str.9 = [34 x i8] c"\0AEnter the word to be encrypted: \00"
@.str.10 = [3 x i8] c"%s\00"
@.str.11 = [19 x i8] c"\0AWord length = %d\0A\00"
@.str.12 = [70 x i8] c"_____________________________________________________________________\00"
@.str.13 = [5 x i8] c"%s \00"
@.str.14 = [16 x i8] c"------------> \00"
@.str.15 = [9 x i8] c"ASCII : \00"
@.str.16 = [4 x i8] c"%d \00"
@.str.18 = [32 x i8] c"\0AEnter the word to decrypt : \0A \00"
@.str.19 = [27 x i8] c"Exit? (Yes = 0 | No = 1): \00"
@str = [48 x i8] c" ---CriptoVale--- \00"
@str.20 = [93 x i8] c" A simple encryption and decryption software based on caesar cipher \00"
@str.21 = [11 x i8] c"1) Encrypt\00"
@str.22 = [11 x i8] c"2) Decrypt\00"
@str.23 = [22 x i8] c"\0AError: Insert 1 or 2\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca [50 x i8]
%4 = alloca [50 x i8]
%5 = bitcast i32* %1 to i8*
%6 = bitcast i32* %2 to i8*
%7 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 0
%8 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 0
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @str, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([93 x i8], [93 x i8]* @str.20, i64 0, i64 0))
%11 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @.str.2, i64 0, i64 0))
%12 = tail call i32 @putchar(i32 10)
%13 = tail call i32 @putchar(i32 10)
br label %14
14: ; preds = %292, %0
%15 = call i32 @putchar(i32 10)
%16 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.21, i64 0, i64 0))
%17 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.22, i64 0, i64 0))
%18 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.6, i64 0, i64 0))
%19 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i32* %1)
%20 = load i32, i32* %1
%21 = add i32 %20, -1
%22 = icmp ult i32 %21, 2
br i1 %22, label %30, label %23
23: ; preds = %14, %23
%24 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @str.23, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.6, i64 0, i64 0))
%26 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i32* %1)
%27 = load i32, i32* %1
%28 = add i32 %27, -1
%29 = icmp ult i32 %28, 2
br i1 %29, label %30, label %23
30: ; preds = %23, %14
%31 = phi i32 [ %20, %14 ], [ %27, %23 ]
switch i32 %31, label %292 [
i32 1, label %32
i32 2, label %157
]
32: ; preds = %30
%33 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.9, i64 0, i64 0))
%34 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.10, i64 0, i64 0), i8* %7)
%35 = call i32 @strlen(i8* %7)
%36 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0), i32 %35)
%37 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @.str.12, i64 0, i64 0))
%38 = call i32 @putchar(i32 10)
%39 = icmp sgt i32 %35, 0
br i1 %39, label %40, label %282
40: ; preds = %32
%41 = zext i32 %35 to i64
%42 = icmp ult i32 %35, 8
br i1 %42, label %121, label %43
43: ; preds = %40
%44 = icmp ult i32 %35, 32
br i1 %44, label %106, label %45
45: ; preds = %43
%46 = and i64 %41, 4294967264
%47 = add nsw i64 %46, -32
%48 = lshr exact i64 %47, 5
%49 = add nuw nsw i64 %48, 1
%50 = and i64 %49, 1
%51 = icmp eq i64 %47, 0
br i1 %51, label %85, label %52
52: ; preds = %45
%53 = and i64 %49, 1152921504606846974
br label %54
54: ; preds = %54, %52
%55 = phi i64 [ 0, %52 ], [ %82, %54 ]
%56 = phi i64 [ 0, %52 ], [ %83, %54 ]
%57 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %55
%58 = bitcast i8* %57 to <16 x i8>*
%59 = load <16 x i8>, <16 x i8>* %58
%60 = getelementptr inbounds i8, i8* %57, i64 16
%61 = bitcast i8* %60 to <16 x i8>*
%62 = load <16 x i8>, <16 x i8>* %61
%63 = add <16 x i8> %59, <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>
%64 = add <16 x i8> %62, <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>
%65 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %55
%66 = bitcast i8* %65 to <16 x i8>*
store <16 x i8> %63, <16 x i8>* %66
%67 = getelementptr inbounds i8, i8* %65, i64 16
%68 = bitcast i8* %67 to <16 x i8>*
store <16 x i8> %64, <16 x i8>* %68
%69 = or i64 %55, 32
%70 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %69
%71 = bitcast i8* %70 to <16 x i8>*
%72 = load <16 x i8>, <16 x i8>* %71
%73 = getelementptr inbounds i8, i8* %70, i64 16
%74 = bitcast i8* %73 to <16 x i8>*
%75 = load <16 x i8>, <16 x i8>* %74
%76 = add <16 x i8> %72, <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>
%77 = add <16 x i8> %75, <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>
%78 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %69
%79 = bitcast i8* %78 to <16 x i8>*
store <16 x i8> %76, <16 x i8>* %79
%80 = getelementptr inbounds i8, i8* %78, i64 16
%81 = bitcast i8* %80 to <16 x i8>*
store <16 x i8> %77, <16 x i8>* %81
%82 = add nuw i64 %55, 64
%83 = add i64 %56, 2
%84 = icmp eq i64 %83, %53
br i1 %84, label %85, label %54
85: ; preds = %54, %45
%86 = phi i64 [ 0, %45 ], [ %82, %54 ]
%87 = icmp eq i64 %50, 0
br i1 %87, label %101, label %88
88: ; preds = %85
%89 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %86
%90 = bitcast i8* %89 to <16 x i8>*
%91 = load <16 x i8>, <16 x i8>* %90
%92 = getelementptr inbounds i8, i8* %89, i64 16
%93 = bitcast i8* %92 to <16 x i8>*
%94 = load <16 x i8>, <16 x i8>* %93
%95 = add <16 x i8> %91, <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 = 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>
%97 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %86
%98 = bitcast i8* %97 to <16 x i8>*
store <16 x i8> %95, <16 x i8>* %98
%99 = getelementptr inbounds i8, i8* %97, i64 16
%100 = bitcast i8* %99 to <16 x i8>*
store <16 x i8> %96, <16 x i8>* %100
br label %101
101: ; preds = %85, %88
%102 = icmp eq i64 %46, %41
br i1 %102, label %131, label %103
103: ; preds = %101
%104 = and i64 %41, 24
%105 = icmp eq i64 %104, 0
br i1 %105, label %121, label %106
106: ; preds = %43, %103
%107 = phi i64 [ %46, %103 ], [ 0, %43 ]
%108 = and i64 %41, 4294967288
br label %109
109: ; preds = %109, %106
%110 = phi i64 [ %107, %106 ], [ %117, %109 ]
%111 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %110
%112 = bitcast i8* %111 to <8 x i8>*
%113 = load <8 x i8>, <8 x i8>* %112
%114 = add <8 x i8> %113, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
%115 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %110
%116 = bitcast i8* %115 to <8 x i8>*
store <8 x i8> %114, <8 x i8>* %116
%117 = add nuw i64 %110, 8
%118 = icmp eq i64 %117, %108
br i1 %118, label %119, label %109
119: ; preds = %109
%120 = icmp eq i64 %108, %41
br i1 %120, label %131, label %121
121: ; preds = %40, %103, %119
%122 = phi i64 [ 0, %40 ], [ %46, %103 ], [ %108, %119 ]
br label %123
123: ; preds = %121, %123
%124 = phi i64 [ %129, %123 ], [ %122, %121 ]
%125 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %124
%126 = load i8, i8* %125
%127 = add i8 %126, 1
%128 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %124
store i8 %127, i8* %128
%129 = add nuw nsw i64 %124, 1
%130 = icmp eq i64 %129, %41
br i1 %130, label %131, label %123
131: ; preds = %123, %119, %101
%132 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0), i8* %7)
%133 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
%134 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
br i1 %39, label %135, label %286
135: ; preds = %131
%136 = zext i32 %35 to i64
br label %137
137: ; preds = %135, %137
%138 = phi i64 [ 0, %135 ], [ %143, %137 ]
%139 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %138
%140 = load i8, i8* %139
%141 = sext i8 %140 to i32
%142 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 %141)
%143 = add nuw nsw i64 %138, 1
%144 = icmp eq i64 %143, %136
br i1 %144, label %145, label %137
145: ; preds = %137
%146 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
br i1 %39, label %147, label %288
147: ; preds = %145
%148 = zext i32 %35 to i64
br label %149
149: ; preds = %147, %149
%150 = phi i64 [ 0, %147 ], [ %155, %149 ]
%151 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %150
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = call i32 @putchar(i32 %153)
%155 = add nuw nsw i64 %150, 1
%156 = icmp eq i64 %155, %148
br i1 %156, label %288, label %149
157: ; preds = %30
%158 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.18, i64 0, i64 0))
%159 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.10, i64 0, i64 0), i8* %7)
%160 = call i32 @strlen(i8* %7)
%161 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0), i32 %160)
%162 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @.str.12, i64 0, i64 0))
%163 = call i32 @putchar(i32 10)
%164 = icmp sgt i32 %160, 0
br i1 %164, label %165, label %282
165: ; preds = %157
%166 = zext i32 %160 to i64
%167 = icmp ult i32 %160, 8
br i1 %167, label %246, label %168
168: ; preds = %165
%169 = icmp ult i32 %160, 32
br i1 %169, label %231, label %170
170: ; preds = %168
%171 = and i64 %166, 4294967264
%172 = add nsw i64 %171, -32
%173 = lshr exact i64 %172, 5
%174 = add nuw nsw i64 %173, 1
%175 = and i64 %174, 1
%176 = icmp eq i64 %172, 0
br i1 %176, label %210, label %177
177: ; preds = %170
%178 = and i64 %174, 1152921504606846974
br label %179
179: ; preds = %179, %177
%180 = phi i64 [ 0, %177 ], [ %207, %179 ]
%181 = phi i64 [ 0, %177 ], [ %208, %179 ]
%182 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %180
%183 = bitcast i8* %182 to <16 x i8>*
%184 = load <16 x i8>, <16 x i8>* %183
%185 = getelementptr inbounds i8, i8* %182, i64 16
%186 = bitcast i8* %185 to <16 x i8>*
%187 = load <16 x i8>, <16 x i8>* %186
%188 = add <16 x i8> %184, <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>
%189 = add <16 x i8> %187, <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>
%190 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %180
%191 = bitcast i8* %190 to <16 x i8>*
store <16 x i8> %188, <16 x i8>* %191
%192 = getelementptr inbounds i8, i8* %190, i64 16
%193 = bitcast i8* %192 to <16 x i8>*
store <16 x i8> %189, <16 x i8>* %193
%194 = or i64 %180, 32
%195 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %194
%196 = bitcast i8* %195 to <16 x i8>*
%197 = load <16 x i8>, <16 x i8>* %196
%198 = getelementptr inbounds i8, i8* %195, i64 16
%199 = bitcast i8* %198 to <16 x i8>*
%200 = load <16 x i8>, <16 x i8>* %199
%201 = add <16 x i8> %197, <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>
%202 = add <16 x i8> %200, <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>
%203 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %194
%204 = bitcast i8* %203 to <16 x i8>*
store <16 x i8> %201, <16 x i8>* %204
%205 = getelementptr inbounds i8, i8* %203, i64 16
%206 = bitcast i8* %205 to <16 x i8>*
store <16 x i8> %202, <16 x i8>* %206
%207 = add nuw i64 %180, 64
%208 = add i64 %181, 2
%209 = icmp eq i64 %208, %178
br i1 %209, label %210, label %179
210: ; preds = %179, %170
%211 = phi i64 [ 0, %170 ], [ %207, %179 ]
%212 = icmp eq i64 %175, 0
br i1 %212, label %226, label %213
213: ; preds = %210
%214 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %211
%215 = bitcast i8* %214 to <16 x i8>*
%216 = load <16 x i8>, <16 x i8>* %215
%217 = getelementptr inbounds i8, i8* %214, i64 16
%218 = bitcast i8* %217 to <16 x i8>*
%219 = load <16 x i8>, <16 x i8>* %218
%220 = add <16 x i8> %216, <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>
%221 = add <16 x i8> %219, <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>
%222 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %211
%223 = bitcast i8* %222 to <16 x i8>*
store <16 x i8> %220, <16 x i8>* %223
%224 = getelementptr inbounds i8, i8* %222, i64 16
%225 = bitcast i8* %224 to <16 x i8>*
store <16 x i8> %221, <16 x i8>* %225
br label %226
226: ; preds = %210, %213
%227 = icmp eq i64 %171, %166
br i1 %227, label %256, label %228
228: ; preds = %226
%229 = and i64 %166, 24
%230 = icmp eq i64 %229, 0
br i1 %230, label %246, label %231
231: ; preds = %168, %228
%232 = phi i64 [ %171, %228 ], [ 0, %168 ]
%233 = and i64 %166, 4294967288
br label %234
234: ; preds = %234, %231
%235 = phi i64 [ %232, %231 ], [ %242, %234 ]
%236 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %235
%237 = bitcast i8* %236 to <8 x i8>*
%238 = load <8 x i8>, <8 x i8>* %237
%239 = add <8 x i8> %238, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
%240 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %235
%241 = bitcast i8* %240 to <8 x i8>*
store <8 x i8> %239, <8 x i8>* %241
%242 = add nuw i64 %235, 8
%243 = icmp eq i64 %242, %233
br i1 %243, label %244, label %234
244: ; preds = %234
%245 = icmp eq i64 %233, %166
br i1 %245, label %256, label %246
246: ; preds = %165, %228, %244
%247 = phi i64 [ 0, %165 ], [ %171, %228 ], [ %233, %244 ]
br label %248
248: ; preds = %246, %248
%249 = phi i64 [ %254, %248 ], [ %247, %246 ]
%250 = getelementptr inbounds [50 x i8], [50 x i8]* %3, i64 0, i64 %249
%251 = load i8, i8* %250
%252 = add i8 %251, -1
%253 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %249
store i8 %252, i8* %253
%254 = add nuw nsw i64 %249, 1
%255 = icmp eq i64 %254, %166
br i1 %255, label %256, label %248
256: ; preds = %248, %244, %226
%257 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0), i8* %7)
%258 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
%259 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
br i1 %164, label %260, label %286
260: ; preds = %256
%261 = zext i32 %160 to i64
br label %262
262: ; preds = %260, %262
%263 = phi i64 [ 0, %260 ], [ %268, %262 ]
%264 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %263
%265 = load i8, i8* %264
%266 = sext i8 %265 to i32
%267 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 %266)
%268 = add nuw nsw i64 %263, 1
%269 = icmp eq i64 %268, %261
br i1 %269, label %270, label %262
270: ; preds = %262
%271 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
br i1 %164, label %272, label %288
272: ; preds = %270
%273 = zext i32 %160 to i64
br label %274
274: ; preds = %272, %274
%275 = phi i64 [ 0, %272 ], [ %280, %274 ]
%276 = getelementptr inbounds [50 x i8], [50 x i8]* %4, i64 0, i64 %275
%277 = load i8, i8* %276
%278 = sext i8 %277 to i32
%279 = call i32 @putchar(i32 %278)
%280 = add nuw nsw i64 %275, 1
%281 = icmp eq i64 %280, %273
br i1 %281, label %288, label %274
282: ; preds = %157, %32
%283 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0), i8* %7)
%284 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
%285 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
br label %286
286: ; preds = %282, %256, %131
%287 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
br label %288
288: ; preds = %274, %149, %286, %270, %145
%289 = call i32 @putchar(i32 10)
%290 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @.str.12, i64 0, i64 0))
%291 = call i32 @putchar(i32 10)
br label %292
292: ; preds = %288, %30
%293 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.19, i64 0, i64 0))
%294 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i32* %2)
%295 = load i32, i32* %2
%296 = icmp eq i32 %295, 0
br i1 %296, label %297, label %14
297: ; preds = %292
ret i32 0
}