#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 */
char getchar();
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, int *);
int main(void) {
  char encrypted_ms[80] = {'*'}, unencrypted_ms[80] = {'*'}, ch;
  int shift_amount = 0, index = 0;
  printf("enter message to be encrypted:\n");
  while ((ch = getchar()) != '\n') {
    unencrypted_ms[index] = ch;
    index++;
  }
  printf("enter shift amount(1-25)\n");
  scanf("%d", &shift_amount);
  for (int i = 0; i < index; i++) {
    if (unencrypted_ms[i] >= 'a' && unencrypted_ms[i] <= 'z') {
      encrypted_ms[i] = ((unencrypted_ms[i] - 'a') + shift_amount) % 26 + 'a';
    } else if (unencrypted_ms[i] >= 'A' && unencrypted_ms[i] <= 'Z') {
      encrypted_ms[i] = ((unencrypted_ms[i] - 'A') + shift_amount) % 26 + 'A';
    } else {
      encrypted_ms[i] = unencrypted_ms[i];
    }
  }
  printf("encrypted message:\n");
  for (int j = 0; j < index; j++) {
    printf("%c", encrypted_ms[j]);
  }
  printf("\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x60(%rbp),%rdi
xor    %esi,%esi
mov    $0x50,%edx
call   1040 <memset@plt>
movb   $0x2a,-0x60(%rbp)
lea    -0xb0(%rbp),%rdi
xor    %esi,%esi
mov    $0x50,%edx
call   1040 <memset@plt>
movb   $0x2a,-0xb0(%rbp)
movl   $0x0,-0xb8(%rbp)
movl   $0x0,-0xbc(%rbp)
lea    0xe65(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %al,-0xb1(%rbp)
movsbl %al,%eax
cmp    $0xa,%eax
je     11e3 <main+0xa3>
mov    -0xb1(%rbp),%cl
movslq -0xbc(%rbp),%rax
mov    %cl,-0xb0(%rbp,%rax,1)
mov    -0xbc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
jmp    11a2 <main+0x62>
lea    0xe36(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe42(%rip),%rdi
lea    -0xb8(%rbp),%rsi
call   1060 <scanf@plt>
movl   $0x0,-0xc0(%rbp)
mov    -0xc0(%rbp),%eax
cmp    -0xbc(%rbp),%eax
jge    1321 <main+0x1e1>
movslq -0xc0(%rbp),%rax
movsbl -0xb0(%rbp,%rax,1),%eax
ff
cmp    $0x61,%eax
jl     1285 <main+0x145>
movslq -0xc0(%rbp),%rax
movsbl -0xb0(%rbp,%rax,1),%eax
ff
cmp    $0x7a,%eax
jg     1285 <main+0x145>
movslq -0xc0(%rbp),%rax
movsbl -0xb0(%rbp,%rax,1),%eax
ff
sub    $0x61,%eax
add    -0xb8(%rbp),%eax
mov    $0x1a,%ecx
cltd
idiv   %ecx
add    $0x61,%edx
mov    %dl,%cl
movslq -0xc0(%rbp),%rax
mov    %cl,-0x60(%rbp,%rax,1)
jmp    1308 <main+0x1c8>
movslq -0xc0(%rbp),%rax
movsbl -0xb0(%rbp,%rax,1),%eax
ff
cmp    $0x41,%eax
jl     12ea <main+0x1aa>
movslq -0xc0(%rbp),%rax
movsbl -0xb0(%rbp,%rax,1),%eax
ff
cmp    $0x5a,%eax
jg     12ea <main+0x1aa>
movslq -0xc0(%rbp),%rax
movsbl -0xb0(%rbp,%rax,1),%eax
ff
sub    $0x41,%eax
add    -0xb8(%rbp),%eax
mov    $0x1a,%ecx
cltd
idiv   %ecx
add    $0x41,%edx
mov    %dl,%cl
movslq -0xc0(%rbp),%rax
mov    %cl,-0x60(%rbp,%rax,1)
jmp    1303 <main+0x1c3>
movslq -0xc0(%rbp),%rax
mov    -0xb0(%rbp,%rax,1),%cl
movslq -0xc0(%rbp),%rax
mov    %cl,-0x60(%rbp,%rax,1)
jmp    1308 <main+0x1c8>
jmp    130d <main+0x1cd>
mov    -0xc0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc0(%rbp)
jmp    120e <main+0xce>
lea    0xd15(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0xc4(%rbp)
mov    -0xc4(%rbp),%eax
cmp    -0xbc(%rbp),%eax
jge    1379 <main+0x239>
movslq -0xc4(%rbp),%rax
movsbl -0x60(%rbp,%rax,1),%esi
lea    0xcf3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc4(%rbp)
jmp    1339 <main+0x1f9>
lea    0xcb8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0xd8,%rsp
pxor   %xmm0,%xmm0
movdqa %xmm0,0x80(%rsp)
movdqa %xmm0,0xc0(%rsp)
movdqa %xmm0,0xb0(%rsp)
movdqa %xmm0,0xa0(%rsp)
movdqa %xmm0,0x90(%rsp)
movb   $0x2a,0x80(%rsp)
2a
movdqa %xmm0,0x30(%rsp)
movdqa %xmm0,0x70(%rsp)
movdqa %xmm0,0x60(%rsp)
movdqa %xmm0,0x50(%rsp)
movdqa %xmm0,0x40(%rsp)
movb   $0x2a,0x30(%rsp)
movl   $0x0,0xc(%rsp)
lea    0xf8e(%rip),%rdi
call   1040 <puts@plt>
xor    %ebx,%ebx
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xa,%al
je     11e3 <main+0xa3>
xor    %ebx,%ebx
nopl   0x0(%rax)
mov    %al,0x30(%rsp,%rbx,1)
add    $0x1,%rbx
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xa,%al
jne    11d0 <main+0x90>
lea    0xf78(%rip),%rdi
call   1040 <puts@plt>
lea    0xf4a(%rip),%rdi
lea    0xc(%rsp),%rsi
call   1060 <scanf@plt>
test   %ebx,%ebx
je     1217 <main+0xd7>
mov    0xc(%rsp),%eax
mov    %ebx,%r14d
cmp    $0x8,%ebx
jae    1228 <main+0xe8>
xor    %ecx,%ecx
jmp    1a9e <main+0x95e>
lea    0xf5d(%rip),%rdi
call   1040 <puts@plt>
jmp    1a46 <main+0x906>
movd   %eax,%xmm0
cmp    $0x10,%ebx
jae    1238 <main+0xf8>
xor    %ecx,%ecx
jmp    1727 <main+0x5e7>
mov    %r14d,%ecx
and    $0xfffffff0,%ecx
movdqa %xmm0,0x10(%rsp)
pshufd $0x0,%xmm0,%xmm0
movdqa %xmm0,0x20(%rsp)
xor    %edx,%edx
movdqa 0xde7(%rip),%xmm6
movdqa 0xdef(%rip),%xmm7
movdqa 0xdf7(%rip),%xmm0
nopl   0x0(%rax)
movdqa 0x30(%rsp,%rdx,1),%xmm2
punpcklbw %xmm2,%xmm5
punpcklwd %xmm5,%xmm3
psrad  $0x18,%xmm3
punpckhwd %xmm5,%xmm15
psrad  $0x18,%xmm15
punpckhbw %xmm2,%xmm5
punpcklwd %xmm5,%xmm13
psrad  $0x18,%xmm13
punpckhwd %xmm5,%xmm14
psrad  $0x18,%xmm14
movdqa %xmm2,%xmm4
paddb  0xd4c(%rip),%xmm4
movdqa %xmm4,%xmm5
movdqa 0xd50(%rip),%xmm1
pminub %xmm1,%xmm5
pcmpeqb %xmm4,%xmm5
movdqa %xmm2,%xmm4
paddb  0xd4c(%rip),%xmm4
movdqa %xmm4,%xmm8
pminub %xmm1,%xmm8
pcmpeqb %xmm4,%xmm8
pand   %xmm5,%xmm8
movdqa 0x20(%rsp),%xmm1
paddd  %xmm1,%xmm14
movdqa %xmm14,%xmm11
movdqa 0xd30(%rip),%xmm4
paddd  %xmm4,%xmm11
paddd  %xmm1,%xmm13
movdqa %xmm13,%xmm10
paddd  %xmm4,%xmm10
paddd  %xmm1,%xmm15
movdqa %xmm15,%xmm9
paddd  %xmm4,%xmm9
paddd  %xmm1,%xmm3
movdqa %xmm3,%xmm12
paddd  %xmm4,%xmm12
movdqa %xmm12,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm12,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm12,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm12
movdqa %xmm9,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm9,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm9,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm9
movdqa %xmm10,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm10,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm10,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm10
movdqa %xmm11,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm11,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm11,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm11
pand   %xmm0,%xmm11
pand   %xmm0,%xmm10
packuswb %xmm11,%xmm10
pand   %xmm0,%xmm9
pand   %xmm0,%xmm12
packuswb %xmm9,%xmm12
packuswb %xmm10,%xmm12
movdqa 0xb94(%rip),%xmm1
paddd  %xmm1,%xmm14
paddd  %xmm1,%xmm13
paddd  %xmm1,%xmm15
paddd  %xmm1,%xmm3
movdqa %xmm3,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm3,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm3,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm3
movdqa %xmm15,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm15,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm15,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm15
movdqa %xmm13,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm13,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm13,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm13
movdqa %xmm14,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm14,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm14,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm14
pand   %xmm0,%xmm14
pand   %xmm0,%xmm13
packuswb %xmm14,%xmm13
pand   %xmm0,%xmm15
pand   %xmm0,%xmm3
packuswb %xmm15,%xmm3
packuswb %xmm13,%xmm3
movdqa %xmm2,%xmm4
paddb  0x9e7(%rip),%xmm4
movdqa %xmm4,%xmm5
pminub 0x9eb(%rip),%xmm5
pcmpeqb %xmm4,%xmm5
paddb  0x99e(%rip),%xmm12
paddb  0x9b6(%rip),%xmm3
pand   %xmm5,%xmm12
pandn  %xmm3,%xmm5
por    %xmm12,%xmm5
pand   %xmm8,%xmm2
pandn  %xmm5,%xmm8
por    %xmm2,%xmm8
movdqa %xmm8,0x80(%rsp,%rdx,1)
add    $0x10,%rdx
cmp    %rdx,%rcx
jne    1270 <main+0x130>
cmp    %r14,%rcx
movdqa 0x10(%rsp),%xmm0
je     1a1e <main+0x8de>
test   $0x8,%r14b
je     1a9e <main+0x95e>
mov    %rcx,%rdx
mov    %r14d,%ecx
and    $0xfffffff8,%ecx
pshufd $0x0,%xmm0,%xmm0
movdqa 0x992(%rip),%xmm15
movdqa 0x8e9(%rip),%xmm12
movdqa 0x8f1(%rip),%xmm6
movdqa 0x8f9(%rip),%xmm7
movdqa 0x901(%rip),%xmm1
movdqa 0x918(%rip),%xmm13
movdqa 0x9af(%rip),%xmm14
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movq   0x30(%rsp,%rdx,1),%xmm3
punpcklbw %xmm3,%xmm5
punpcklwd %xmm5,%xmm2
psrad  $0x18,%xmm2
punpckhwd %xmm5,%xmm11
psrad  $0x18,%xmm11
movdqa %xmm3,%xmm5
paddb  0x916(%rip),%xmm5
movdqa %xmm5,%xmm8
pmaxub %xmm15,%xmm8
pcmpeqb %xmm5,%xmm8
movdqa %xmm3,%xmm4
paddb  0x91b(%rip),%xmm4
movdqa %xmm4,%xmm5
pmaxub %xmm15,%xmm5
pcmpeqb %xmm4,%xmm5
pxor   0x956(%rip),%xmm5
pandn  %xmm5,%xmm8
paddd  %xmm0,%xmm11
movdqa %xmm11,%xmm9
paddd  %xmm12,%xmm9
paddd  %xmm0,%xmm2
movdqa %xmm2,%xmm10
paddd  %xmm12,%xmm10
movdqa %xmm10,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm10,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm10,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm10
movdqa %xmm9,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm9,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm9,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm9
pand   %xmm1,%xmm9
pand   %xmm1,%xmm10
packuswb %xmm9,%xmm10
paddd  %xmm13,%xmm11
paddd  %xmm13,%xmm2
movdqa %xmm2,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm2,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm2
movdqa %xmm11,%xmm4
pmuludq %xmm6,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm11,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm11,%xmm5
pand   %xmm6,%xmm5
psubd  %xmm5,%xmm4
movdqa %xmm4,%xmm5
psrld  $0x1f,%xmm5
psrld  $0x3,%xmm4
paddd  %xmm5,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm7,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
psubd  %xmm4,%xmm11
pand   %xmm1,%xmm11
pand   %xmm1,%xmm2
packuswb %xmm11,%xmm2
movdqa %xmm3,%xmm4
paddb  0x755(%rip),%xmm4
movdqa %xmm4,%xmm5
pmaxub %xmm14,%xmm5
pcmpeqb %xmm4,%xmm5
packuswb %xmm10,%xmm10
paddb  0x71a(%rip),%xmm10
packuswb %xmm2,%xmm2
paddb  0x71e(%rip),%xmm2
pand   %xmm5,%xmm2
pandn  %xmm10,%xmm5
por    %xmm2,%xmm5
pand   %xmm8,%xmm3
pandn  %xmm5,%xmm8
por    %xmm3,%xmm8
movq   %xmm8,0x80(%rsp,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rcx
jne    1780 <main+0x640>
cmp    %r14,%rcx
jne    1a9e <main+0x95e>
lea    0x756(%rip),%rdi
call   1040 <puts@plt>
test   %ebx,%ebx
je     1a46 <main+0x906>
xor    %ebx,%ebx
movsbl 0x80(%rsp,%rbx,1),%edi
call   1030 <putchar@plt>
add    $0x1,%rbx
cmp    %rbx,%r14
jne    1a30 <main+0x8f0>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0xd8,%rsp
pop    %rbx
pop    %r14
ret
nopl   (%rax)
lea    (%rsi,%rax,1),%edx
add    $0xffffff9f,%edx
movslq %edx,%rdx
imul   $0x4ec4ec4f,%rdx,%rsi
mov    %rsi,%rdi
shr    $0x3f,%rdi
shr    $0x23,%rsi
add    %edi,%esi
lea    (%rsi,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %esi,%edi
sub    %edi,%edx
add    $0x61,%dl
mov    %dl,0x80(%rsp,%rcx,1)
add    $0x1,%rcx
cmp    %rcx,%r14
je     1a1e <main+0x8de>
movzbl 0x30(%rsp,%rcx,1),%edx
movsbl %dl,%esi
lea    -0x61(%rsi),%edi
cmp    $0x19,%dil
jbe    1a60 <main+0x920>
lea    -0x41(%rdx),%edi
cmp    $0x19,%dil
ja     1a8a <main+0x94a>
lea    (%rsi,%rax,1),%edx
add    $0xffffffbf,%edx
movslq %edx,%rdx
imul   $0x4ec4ec4f,%rdx,%rsi
mov    %rsi,%rdi
shr    $0x3f,%rdi
shr    $0x23,%rsi
add    %edi,%esi
lea    (%rsi,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %esi,%edi
sub    %edi,%edx
add    $0x41,%dl
jmp    1a8a <main+0x94a>

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

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