#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*/ gets(char *);
int /*<<< orphan*/ printf(char *, ...);
char strlen(char *);
int main() {
  char str[64], strr[64], a, i, ii;
  printf("Text:");
  gets(str);
  a = strlen(str);
  ii = a;
  for (i = 0; i <= a; i++) {
    strr[ii] = str[i];
    ii--;
  }
  for (ii = 0; ii <= a; ii++) {
    printf("%c", strr[ii]);
  }
  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    -0x50(%rbp),%rdi
call   1050 <gets@plt>
lea    -0x50(%rbp),%rdi
call   1030 <strlen@plt>
mov    %al,-0x91(%rbp)
mov    -0x91(%rbp),%al
mov    %al,-0x93(%rbp)
movb   $0x0,-0x92(%rbp)
movsbl -0x92(%rbp),%eax
movsbl -0x91(%rbp),%ecx
cmp    %ecx,%eax
jg     11cd <main+0x9d>
movsbq -0x92(%rbp),%rax
ff
mov    -0x50(%rbp,%rax,1),%cl
movsbq -0x93(%rbp),%rax
ff
mov    %cl,-0x90(%rbp,%rax,1)
mov    -0x93(%rbp),%al
add    $0xff,%al
mov    %al,-0x93(%rbp)
mov    -0x92(%rbp),%al
add    $0x1,%al
mov    %al,-0x92(%rbp)
jmp    117b <main+0x4b>
movb   $0x0,-0x93(%rbp)
movsbl -0x93(%rbp),%eax
movsbl -0x91(%rbp),%ecx
cmp    %ecx,%eax
jg     121b <main+0xeb>
movsbq -0x93(%rbp),%rax
ff
movsbl -0x90(%rbp,%rax,1),%esi
ff
lea    0xe05(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x93(%rbp),%al
add    $0x1,%al
mov    %al,-0x93(%rbp)
jmp    11d4 <main+0xa4>
xor    %eax,%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x88,%rsp
lea    0xeaf(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x40(%rsp),%rbx
mov    %rbx,%rdi
call   1060 <gets@plt>
mov    %rbx,%rdi
call   1040 <strlen@plt>
test   %al,%al
js     14f5 <main+0x3b5>
mov    %eax,%r14d
lea    0x1(%r14),%eax
movzbl %al,%r8d
cmp    $0x7,%r14b
jae    1190 <main+0x50>
xor    %ecx,%ecx
mov    %r14d,%edx
jmp    1453 <main+0x313>
lea    -0x1(%r8),%rsi
mov    %r14d,%edx
sub    %sil,%dl
xor    %ecx,%ecx
cmp    %r14b,%dl
jg     11be <main+0x7e>
mov    %r14d,%edx
cmp    $0xff,%rsi
ja     1453 <main+0x313>
cmp    $0x1f,%r14b
jae    11c6 <main+0x86>
xor    %ecx,%ecx
jmp    13f7 <main+0x2b7>
mov    %r14d,%edx
jmp    1453 <main+0x313>
mov    %r8d,%ecx
and    $0xffffffe0,%ecx
movdqa 0x40(%rsp),%xmm1
movdqa 0x50(%rsp),%xmm2
movsbq %r14b,%rdx
pxor   %xmm0,%xmm0
movdqa %xmm1,%xmm3
punpcklbw %xmm0,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
punpckhbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm3,%xmm1
movdqu %xmm1,-0xf(%rsp,%rdx,1)
movdqa %xmm2,%xmm1
punpcklbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
punpckhbw %xmm0,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
packuswb %xmm1,%xmm2
movdqu %xmm2,-0x1f(%rsp,%rdx,1)
cmp    $0x20,%rcx
je     13e8 <main+0x2a8>
lea    -0x20(%r14),%edx
movdqa 0x60(%rsp),%xmm1
movdqa 0x70(%rsp),%xmm2
movsbq %dl,%rdx
movdqa %xmm1,%xmm3
punpcklbw %xmm0,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
punpckhbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm3,%xmm1
movdqu %xmm1,-0xf(%rsp,%rdx,1)
movdqa %xmm2,%xmm1
punpcklbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
punpckhbw %xmm0,%xmm2
pshufd $0x4e,%xmm2,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
packuswb %xmm1,%xmm0
movdqu %xmm0,-0x1f(%rsp,%rdx,1)
cmp    $0x40,%ecx
je     13e8 <main+0x2a8>
lea    -0x40(%r14),%edx
movdqa 0x80(%rsp),%xmm1
movdqa 0x90(%rsp),%xmm2
movsbq %dl,%rdx
pxor   %xmm0,%xmm0
movdqa %xmm1,%xmm3
punpcklbw %xmm0,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
punpckhbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm3,%xmm1
movdqu %xmm1,-0xf(%rsp,%rdx,1)
movdqa %xmm2,%xmm1
punpcklbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
punpckhbw %xmm0,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
packuswb %xmm1,%xmm2
movdqu %xmm2,-0x1f(%rsp,%rdx,1)
cmp    $0x60,%ecx
je     13e8 <main+0x2a8>
lea    -0x60(%r14),%edx
movdqa 0xa0(%rsp),%xmm1
movdqa 0xb0(%rsp),%xmm2
movsbq %dl,%rdx
movdqa %xmm1,%xmm3
punpcklbw %xmm0,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
punpckhbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm3,%xmm1
movdqu %xmm1,-0xf(%rsp,%rdx,1)
movdqa %xmm2,%xmm1
punpcklbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
punpckhbw %xmm0,%xmm2
pshufd $0x4e,%xmm2,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
packuswb %xmm1,%xmm0
movdqu %xmm0,-0x1f(%rsp,%rdx,1)
cmp    %r8,%rcx
je     14cb <main+0x38b>
test   $0x18,%r8b
je     144e <main+0x30e>
mov    %rcx,%rsi
mov    %r8d,%ecx
and    $0xfffffff8,%ecx
mov    %r14d,%edx
sub    %cl,%dl
mov    %r14d,%edi
sub    %sil,%dil
pxor   %xmm0,%xmm0
nop
movq   0x40(%rsp,%rsi,1),%xmm1
punpcklbw %xmm0,%xmm1
movsbq %dil,%rdi
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm1,%xmm1
movq   %xmm1,-0x7(%rsp,%rdi,1)
add    $0x8,%rsi
add    $0xf8,%dil
cmp    %rsi,%rcx
jne    1410 <main+0x2d0>
cmp    %r8,%rcx
jne    1453 <main+0x313>
jmp    14cb <main+0x38b>
mov    %r14d,%edx
sub    %cl,%dl
mov    %rcx,%rsi
not    %rsi
add    %r8,%rsi
mov    %r8,%rdi
and    $0x3,%rdi
je     1489 <main+0x349>
cs nopw 0x0(%rax,%rax,1)
nop
movzbl 0x40(%rsp,%rcx,1),%ebx
movsbq %dl,%rdx
mov    %bl,(%rsp,%rdx,1)
add    $0xff,%dl
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdi
jne    1470 <main+0x330>
cmp    $0x3,%rsi
jb     14cb <main+0x38b>
nop
movsbq %dl,%rdx
movzbl 0x40(%rsp,%rcx,1),%ebx
movzbl 0x41(%rsp,%rcx,1),%eax
mov    %bl,(%rsp,%rdx,1)
lea    -0x1(%rdx),%esi
movsbq %sil,%rsi
mov    %al,(%rsp,%rsi,1)
movzwl 0x42(%rsp,%rcx,1),%eax
rol    $0x8,%ax
lea    -0x3(%rdx),%esi
movsbq %sil,%rsi
mov    %ax,(%rsp,%rsi,1)
add    $0xfc,%dl
add    $0x4,%rcx
cmp    %rcx,%r8
jne    1490 <main+0x350>
test   %r14b,%r14b
js     14f5 <main+0x3b5>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbq %bl,%rbx
movsbl (%rsp,%rbx,1),%edi
call   1030 <putchar@plt>
add    $0x1,%bl
cmp    %r14b,%bl
jle    14e0 <main+0x3a0>
xor    %eax,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [6 x i8] c"Text:\00"
@.str.1 = [3 x i8] c"%c\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [64 x i8]
%3 = alloca [64 x i8]
%4 = alloca i8
%5 = alloca i8
%6 = alloca i8
store i32 0, i32* %1
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))
%8 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%9 = call i32 @gets(i8* %8)
%10 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 0
%11 = call signext i8 @strlen(i8* %10)
store i8 %11, i8* %4
%12 = load i8, i8* %4
store i8 %12, i8* %6
store i8 0, i8* %5
br label %13
13: ; preds = %29, %0
%14 = load i8, i8* %5
%15 = sext i8 %14 to i32
%16 = load i8, i8* %4
%17 = sext i8 %16 to i32
%18 = icmp sle i32 %15, %17
br i1 %18, label %19, label %32
19: ; preds = %13
%20 = load i8, i8* %5
%21 = sext i8 %20 to i64
%22 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 %21
%23 = load i8, i8* %22
%24 = load i8, i8* %6
%25 = sext i8 %24 to i64
%26 = getelementptr inbounds [64 x i8], [64 x i8]* %3, i64 0, i64 %25
store i8 %23, i8* %26
%27 = load i8, i8* %6
%28 = add i8 %27, -1
store i8 %28, i8* %6
br label %29
29: ; preds = %19
%30 = load i8, i8* %5
%31 = add i8 %30, 1
store i8 %31, i8* %5
br label %13
32: ; preds = %13
store i8 0, i8* %6
br label %33
33: ; preds = %46, %32
%34 = load i8, i8* %6
%35 = sext i8 %34 to i32
%36 = load i8, i8* %4
%37 = sext i8 %36 to i32
%38 = icmp sle i32 %35, %37
br i1 %38, label %39, label %49
39: ; preds = %33
%40 = load i8, i8* %6
%41 = sext i8 %40 to i64
%42 = getelementptr inbounds [64 x i8], [64 x i8]* %3, i64 0, i64 %41
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %44)
br label %46
46: ; preds = %39
%47 = load i8, i8* %6
%48 = add i8 %47, 1
store i8 %48, i8* %6
br label %33
49: ; preds = %33
ret i32 0
}

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