#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 */
typedef int /*<<< orphan*/ buf;
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, char const *);
size_t strlen(char const *);
void print_header_header_file_define(FILE *file, const char *hname) {
  char buf[256];
  size_t len = strlen(hname);
  {
    size_t cp = len;
    for (; cp && hname[cp - 1] != '\\' && hname[cp - 1] != '/'; cp--)
      ;
    len -= cp;
    hname += cp;
  }
  if (len > sizeof(buf) / sizeof(buf[0]) - 1)
    len = sizeof(buf) / sizeof(buf[0]) - 1;
  buf[len] = '\0';
  while (len) {
    char c = hname[--len];
    buf[len] = ('A' <= c && c <= 'Z')   ? c
               : ('a' <= c && c <= 'z') ? (char)(c - ('a' - 'A'))
                                        : '_';
  }
  fprintf(file, "#ifndef %s_INCLUDED\n", buf);
  fprintf(file, "#define %s_INCLUDED\n", buf);
  fprintf(file, "\n/* %s */\n", hname);
}


x86 assembly (clang, -O0):
<print_header_header_file_define>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    %rax,-0x118(%rbp)
mov    -0x118(%rbp),%rax
mov    %rax,-0x120(%rbp)
xor    %eax,%eax
cmpq   $0x0,-0x120(%rbp)
mov    %al,-0x122(%rbp)
je     11aa <print_header_header_file_define+0x8a>
mov    -0x10(%rbp),%rax
mov    -0x120(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x5c,%ecx
mov    %al,-0x122(%rbp)
je     11aa <print_header_header_file_define+0x8a>
mov    -0x10(%rbp),%rax
mov    -0x120(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
setne  %al
mov    %al,-0x122(%rbp)
mov    -0x122(%rbp),%al
test   $0x1,%al
jne    11bd <print_header_header_file_define+0x9d>
jmp    11d9 <print_header_header_file_define+0xb9>
jmp    11c2 <print_header_header_file_define+0xa2>
mov    -0x120(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x120(%rbp)
jmp    1151 <print_header_header_file_define+0x31>
mov    -0x120(%rbp),%rcx
mov    -0x118(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x118(%rbp)
mov    -0x120(%rbp),%rax
add    -0x10(%rbp),%rax
mov    %rax,-0x10(%rbp)
cmpq   $0xff,-0x118(%rbp)
jbe    121c <print_header_header_file_define+0xfc>
movq   $0xff,-0x118(%rbp)
mov    -0x118(%rbp),%rax
movb   $0x0,-0x110(%rbp,%rax,1)
cmpq   $0x0,-0x118(%rbp)
je     1305 <print_header_header_file_define+0x1e5>
mov    -0x10(%rbp),%rax
mov    -0x118(%rbp),%rcx
mov    %rcx,%rdx
add    $0xffffffffffffffff,%rdx
mov    %rdx,-0x118(%rbp)
mov    -0x1(%rax,%rcx,1),%al
mov    %al,-0x121(%rbp)
movsbl -0x121(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jg     1292 <print_header_header_file_define+0x172>
movsbl -0x121(%rbp),%eax
cmp    $0x5a,%eax
jg     1292 <print_header_header_file_define+0x172>
movsbl -0x121(%rbp),%eax
mov    %eax,-0x128(%rbp)
jmp    12ea <print_header_header_file_define+0x1ca>
movsbl -0x121(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     12ce <print_header_header_file_define+0x1ae>
movsbl -0x121(%rbp),%eax
cmp    $0x7a,%eax
jg     12ce <print_header_header_file_define+0x1ae>
movsbl -0x121(%rbp),%eax
sub    $0x20,%eax
movsbl %al,%eax
mov    %eax,-0x12c(%rbp)
jmp    12de <print_header_header_file_define+0x1be>
mov    $0x5f,%eax
mov    %eax,-0x12c(%rbp)
jmp    12de <print_header_header_file_define+0x1be>
mov    -0x12c(%rbp),%eax
mov    %eax,-0x128(%rbp)
mov    -0x128(%rbp),%eax
mov    %al,%cl
mov    -0x118(%rbp),%rax
mov    %cl,-0x110(%rbp,%rax,1)
jmp    122b <print_header_header_file_define+0x10b>
mov    -0x8(%rbp),%rdi
lea    -0x110(%rbp),%rdx
lea    0xce9(%rip),%rsi
call   1040 <fprintf@plt>
mov    -0x8(%rbp),%rdi
lea    -0x110(%rbp),%rdx
lea    0xce7(%rip),%rsi
call   1040 <fprintf@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rdx
lea    0xce8(%rip),%rsi
call   1040 <fprintf@plt>
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_header_header_file_define>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x108,%rsp
mov    %rsi,%r12
mov    %rdi,%r15
mov    %rsi,%rdi
call   1030 <strlen@plt>
add    %rax,%r12
neg    %rax
xor    %edx,%edx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
mov    %rsi,%rdi
mov    %rdx,%rcx
cmp    %rdx,%rax
je     1173 <print_header_header_file_define+0x53>
movzbl -0x1(%r12,%rcx,1),%ebx
cmp    $0x5c,%bl
je     1173 <print_header_header_file_define+0x53>
lea    0x1(%rdi),%rsi
lea    -0x1(%rcx),%rdx
cmp    $0x2f,%bl
jne    1150 <print_header_header_file_define+0x30>
mov    %rcx,%r11
neg    %r11
lea    (%r12,%rcx,1),%r14
cmp    $0xff,%r11
mov    $0xff,%r9d
cmovb  %r11,%r9
movb   $0x0,(%rsp,%r9,1)
test   %r9,%r9
je     1470 <print_header_header_file_define+0x350>
cmp    $0x8,%r9
jae    11aa <print_header_header_file_define+0x8a>
mov    %r9,%r8
jmp    141e <print_header_header_file_define+0x2fe>
cmp    $0x10,%r9
jae    11b7 <print_header_header_file_define+0x97>
xor    %esi,%esi
jmp    130b <print_header_header_file_define+0x1eb>
mov    %r9d,%esi
and    $0xf0,%esi
cmp    $0xff,%r11
mov    $0xff,%r8d
mov    $0xff,%eax
cmovb  %r11,%rax
lea    (%rsp,%rax,1),%r10
add    $0xfffffffffffffff0,%r10
and    $0xf0,%eax
neg    %rax
cmp    $0xff,%rdi
cmovb  %rdi,%r8
add    %r12,%r8
xor    %edx,%edx
pxor   %xmm0,%xmm0
movdqa 0xdfd(%rip),%xmm8
movdqa 0xe05(%rip),%xmm2
movdqa 0xe0c(%rip),%xmm9
movdqa 0xe14(%rip),%xmm4
movdqa 0xe1c(%rip),%xmm5
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    (%r8,%rdx,1),%rbx
movdqu -0x10(%rcx,%rbx,1),%xmm6
movdqa %xmm6,%xmm7
punpcklbw %xmm0,%xmm7
pshufd $0x4e,%xmm7,%xmm7
pshuflw $0x1b,%xmm7,%xmm7
pshufhw $0x1b,%xmm7,%xmm7
punpckhbw %xmm0,%xmm6
pshufd $0x4e,%xmm6,%xmm6
pshuflw $0x1b,%xmm6,%xmm6
pshufhw $0x1b,%xmm6,%xmm6
packuswb %xmm7,%xmm6
movdqa %xmm6,%xmm1
paddb  %xmm8,%xmm1
movdqa %xmm1,%xmm7
pminub %xmm2,%xmm7
pcmpeqb %xmm1,%xmm7
movdqa %xmm6,%xmm3
paddb  %xmm9,%xmm3
movdqa %xmm3,%xmm1
pminub %xmm2,%xmm1
pcmpeqb %xmm3,%xmm1
movdqa %xmm6,%xmm3
paddb  %xmm4,%xmm3
pand   %xmm1,%xmm3
pandn  %xmm5,%xmm1
por    %xmm3,%xmm1
pand   %xmm7,%xmm6
pandn  %xmm1,%xmm7
por    %xmm6,%xmm7
movdqa %xmm7,%xmm1
punpcklbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
punpckhbw %xmm0,%xmm7
pshufd $0x4e,%xmm7,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
packuswb %xmm1,%xmm3
movdqu %xmm3,(%r10,%rdx,1)
add    $0xfffffffffffffff0,%rdx
cmp    %rdx,%rax
jne    1230 <print_header_header_file_define+0x110>
cmp    %rsi,%r9
je     1470 <print_header_header_file_define+0x350>
test   $0x8,%r9b
jne    130b <print_header_header_file_define+0x1eb>
and    $0xf,%r9d
jmp    11a2 <print_header_header_file_define+0x82>
mov    %r9d,%r10d
and    $0xf8,%r10d
mov    %r9d,%r8d
and    $0x7,%r8d
cmp    $0xff,%r11
mov    $0xff,%eax
cmovae %rax,%r11
neg    %rsi
lea    (%rsp,%r11,1),%rdx
add    $0xfffffffffffffff8,%rdx
and    $0xf8,%r11d
neg    %r11
cmp    $0xff,%rdi
cmovb  %rdi,%rax
add    %r12,%rax
pxor   %xmm0,%xmm0
movdqa 0xcf4(%rip),%xmm8
movdqa 0xcfc(%rip),%xmm2
movdqa 0xd03(%rip),%xmm9
movdqa 0xd0a(%rip),%xmm10
movdqa 0xd12(%rip),%xmm5
xchg   %ax,%ax
lea    (%rax,%rsi,1),%rdi
movq   -0x8(%rcx,%rdi,1),%xmm6
punpcklbw %xmm0,%xmm6
pshufd $0x4e,%xmm6,%xmm6
pshuflw $0x1b,%xmm6,%xmm6
pshufhw $0x1b,%xmm6,%xmm3
packuswb %xmm3,%xmm3
movdqa %xmm3,%xmm6
paddb  %xmm8,%xmm6
movdqa %xmm6,%xmm7
pmaxub %xmm2,%xmm7
pcmpeqb %xmm6,%xmm7
movdqa %xmm3,%xmm1
paddb  %xmm9,%xmm1
movdqa %xmm1,%xmm6
pmaxub %xmm2,%xmm6
pcmpeqb %xmm1,%xmm6
movdqa %xmm3,%xmm1
paddb  %xmm10,%xmm1
movdqa %xmm6,%xmm4
pandn  %xmm1,%xmm4
pand   %xmm5,%xmm6
por    %xmm4,%xmm6
pand   %xmm7,%xmm6
pandn  %xmm3,%xmm7
por    %xmm6,%xmm7
punpcklbw %xmm0,%xmm7
pshufd $0x4e,%xmm7,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm1,%xmm1
movq   %xmm1,(%rdx,%rsi,1)
add    $0xfffffffffffffff8,%rsi
cmp    %rsi,%r11
jne    1380 <print_header_header_file_define+0x260>
cmp    %r10,%r9
je     1470 <print_header_header_file_define+0x350>
mov    %r8,%rax
neg    %rax
lea    (%rsp,%r8,1),%r9
add    $0xffffffffffffffff,%r9
lea    (%r8,%r12,1),%r10
add    $0xffffffffffffffff,%r10
xor    %edi,%edi
mov    $0x5f,%r8d
nopl   0x0(%rax)
lea    (%r10,%rdi,1),%rbx
movzbl (%rcx,%rbx,1),%ebx
lea    -0x61(%rbx),%edx
lea    -0x20(%rbx),%esi
cmp    $0x1a,%dl
movzbl %sil,%edx
cmovae %r8d,%edx
lea    -0x41(%rbx),%esi
cmp    $0x1a,%sil
cmovb  %ebx,%edx
mov    %dl,(%r9,%rdi,1)
add    $0xffffffffffffffff,%rdi
cmp    %rdi,%rax
jne    1440 <print_header_header_file_define+0x320>
lea    0xc29(%rip),%rsi
mov    %rsp,%rbx
mov    %r15,%rdi
mov    %rbx,%rdx
call   1040 <fprintf@plt>
lea    0xc29(%rip),%rsi
mov    %r15,%rdi
mov    %rbx,%rdx
call   1040 <fprintf@plt>
lea    0xc2c(%rip),%rsi
mov    %r15,%rdi
mov    %r14,%rdx
call   1040 <fprintf@plt>
add    $0x108,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [21 x i8] c"#ifndef %s_INCLUDED\0A\00"
@.str.1 = [21 x i8] c"#define %s_INCLUDED\0A\00"
@.str.2 = [11 x i8] c"\0A/* %s */\0A\00"
define void @print_header_header_file_define(i32* %0, i8* %1) {
%3 = alloca i32*
%4 = alloca i8*
%5 = alloca [256 x i8]
%6 = alloca i64
%7 = alloca i64
%8 = alloca i8
store i32* %0, i32** %3
store i8* %1, i8** %4
%9 = load i8*, i8** %4
%10 = call i64 @strlen(i8* %9)
store i64 %10, i64* %6
%11 = load i64, i64* %6
store i64 %11, i64* %7
br label %12
12: ; preds = %34, %2
%13 = load i64, i64* %7
%14 = icmp ne i64 %13, 0
br i1 %14, label %15, label %31
15: ; preds = %12
%16 = load i8*, i8** %4
%17 = load i64, i64* %7
%18 = sub i64 %17, 1
%19 = getelementptr inbounds i8, i8* %16, i64 %18
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = icmp ne i32 %21, 92
br i1 %22, label %23, label %31
23: ; preds = %15
%24 = load i8*, i8** %4
%25 = load i64, i64* %7
%26 = sub i64 %25, 1
%27 = getelementptr inbounds i8, i8* %24, i64 %26
%28 = load i8, i8* %27
%29 = sext i8 %28 to i32
%30 = icmp ne i32 %29, 47
br label %31
31: ; preds = %23, %15, %12
%32 = phi i1 [ false, %15 ], [ false, %12 ], [ %30, %23 ]
br i1 %32, label %33, label %37
33: ; preds = %31
br label %34
34: ; preds = %33
%35 = load i64, i64* %7
%36 = add i64 %35, -1
store i64 %36, i64* %7
br label %12
37: ; preds = %31
%38 = load i64, i64* %7
%39 = load i64, i64* %6
%40 = sub i64 %39, %38
store i64 %40, i64* %6
%41 = load i64, i64* %7
%42 = load i8*, i8** %4
%43 = getelementptr inbounds i8, i8* %42, i64 %41
store i8* %43, i8** %4
%44 = load i64, i64* %6
%45 = icmp ugt i64 %44, 255
br i1 %45, label %46, label %47
46: ; preds = %37
store i64 255, i64* %6
br label %47
47: ; preds = %46, %37
%48 = load i64, i64* %6
%49 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 %48
store i8 0, i8* %49
br label %50
50: ; preds = %86, %47
%51 = load i64, i64* %6
%52 = icmp ne i64 %51, 0
br i1 %52, label %53, label %91
53: ; preds = %50
%54 = load i8*, i8** %4
%55 = load i64, i64* %6
%56 = add i64 %55, -1
store i64 %56, i64* %6
%57 = getelementptr inbounds i8, i8* %54, i64 %56
%58 = load i8, i8* %57
store i8 %58, i8* %8
%59 = load i8, i8* %8
%60 = sext i8 %59 to i32
%61 = icmp sle i32 65, %60
br i1 %61, label %62, label %69
62: ; preds = %53
%63 = load i8, i8* %8
%64 = sext i8 %63 to i32
%65 = icmp sle i32 %64, 90
br i1 %65, label %66, label %69
66: ; preds = %62
%67 = load i8, i8* %8
%68 = sext i8 %67 to i32
br label %86
69: ; preds = %62, %53
%70 = load i8, i8* %8
%71 = sext i8 %70 to i32
%72 = icmp sle i32 97, %71
br i1 %72, label %73, label %83
73: ; preds = %69
%74 = load i8, i8* %8
%75 = sext i8 %74 to i32
%76 = icmp sle i32 %75, 122
br i1 %76, label %77, label %83
77: ; preds = %73
%78 = load i8, i8* %8
%79 = sext i8 %78 to i32
%80 = sub nsw i32 %79, 32
%81 = trunc i32 %80 to i8
%82 = sext i8 %81 to i32
br label %84
83: ; preds = %73, %69
br label %84
84: ; preds = %83, %77
%85 = phi i32 [ %82, %77 ], [ 95, %83 ]
br label %86
86: ; preds = %84, %66
%87 = phi i32 [ %68, %66 ], [ %85, %84 ]
%88 = trunc i32 %87 to i8
%89 = load i64, i64* %6
%90 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 %89
store i8 %88, i8* %90
br label %50
91: ; preds = %50
%92 = load i32*, i32** %3
%93 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 0
%94 = call i32 @fprintf(i32* %92, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* %93)
%95 = load i32*, i32** %3
%96 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 0
%97 = call i32 @fprintf(i32* %95, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0), i8* %96)
%98 = load i32*, i32** %3
%99 = load i8*, i8** %4
%100 = call i32 @fprintf(i32* %98, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* %99)
ret void
}

LLVM IR (-O2):
@.str = [21 x i8] c"#ifndef %s_INCLUDED\0A\00"
@.str.1 = [21 x i8] c"#define %s_INCLUDED\0A\00"
@.str.2 = [11 x i8] c"\0A/* %s */\0A\00"
define void @print_header_header_file_define(i32* nocapture %0, i8* %1) {
%3 = alloca [256 x i8]
%4 = getelementptr inbounds [256 x i8], [256 x i8]* %3, i64 0, i64 0
%5 = tail call i64 @strlen(i8* dereferenceable(1) %1)
br label %6
6: ; preds = %9, %2
%7 = phi i64 [ %5, %2 ], [ %10, %9 ]
%8 = icmp eq i64 %7, 0
br i1 %8, label %13, label %9
9: ; preds = %6
%10 = add i64 %7, -1
%11 = getelementptr inbounds i8, i8* %1, i64 %10
%12 = load i8, i8* %11
switch i8 %12, label %6 [
i8 92, label %13
i8 47, label %13
]
13: ; preds = %9, %9, %6
%14 = sub i64 %5, %7
%15 = getelementptr inbounds i8, i8* %1, i64 %7
%16 = icmp ult i64 %14, 255
%17 = select i1 %16, i64 %14, i64 255
%18 = getelementptr inbounds [256 x i8], [256 x i8]* %3, i64 0, i64 %17
store i8 0, i8* %18
%19 = icmp eq i64 %17, 0
br i1 %19, label %98, label %20
20: ; preds = %13
%21 = icmp ult i64 %17, 8
br i1 %21, label %82, label %22
22: ; preds = %20
%23 = icmp ult i64 %17, 16
br i1 %23, label %54, label %24
24: ; preds = %22
%25 = and i64 %17, 240
%26 = getelementptr inbounds i8, i8* %15, i64 -15
br label %27
27: ; preds = %27, %24
%28 = phi i64 [ 0, %24 ], [ %46, %27 ]
%29 = xor i64 %28, -1
%30 = add i64 %17, %29
%31 = getelementptr inbounds i8, i8* %26, i64 %30
%32 = bitcast i8* %31 to <16 x i8>*
%33 = load <16 x i8>, <16 x i8>* %32
%34 = shufflevector <16 x i8> %33, <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 = add <16 x i8> %34, <i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65>
%36 = icmp ult <16 x i8> %35, <i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26>
%37 = add <16 x i8> %34, <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>
%38 = icmp ult <16 x i8> %37, <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>
%39 = add <16 x i8> %34, <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>
%40 = select <16 x i1> %38, <16 x i8> %39, <16 x i8> <i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95>
%41 = select <16 x i1> %36, <16 x i8> %34, <16 x i8> %40
%42 = getelementptr inbounds [256 x i8], [256 x i8]* %3, i64 0, i64 %30
%43 = shufflevector <16 x i8> %41, <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>
%44 = getelementptr inbounds i8, i8* %42, i64 -15
%45 = bitcast i8* %44 to <16 x i8>*
store <16 x i8> %43, <16 x i8>* %45
%46 = add nuw i64 %28, 16
%47 = icmp eq i64 %46, %25
br i1 %47, label %48, label %27
48: ; preds = %27
%49 = icmp eq i64 %17, %25
br i1 %49, label %98, label %50
50: ; preds = %48
%51 = and i64 %17, 15
%52 = and i64 %17, 8
%53 = icmp eq i64 %52, 0
br i1 %53, label %82, label %54
54: ; preds = %22, %50
%55 = phi i64 [ %25, %50 ], [ 0, %22 ]
%56 = and i64 %17, 248
%57 = and i64 %17, 7
%58 = getelementptr inbounds i8, i8* %15, i64 -7
br label %59
59: ; preds = %59, %54
%60 = phi i64 [ %55, %54 ], [ %78, %59 ]
%61 = xor i64 %60, -1
%62 = add i64 %17, %61
%63 = getelementptr inbounds i8, i8* %58, i64 %62
%64 = bitcast i8* %63 to <8 x i8>*
%65 = load <8 x i8>, <8 x i8>* %64
%66 = shufflevector <8 x i8> %65, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%67 = add <8 x i8> %66, <i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65, i8 -65>
%68 = icmp ult <8 x i8> %67, <i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26>
%69 = add <8 x i8> %66, <i8 -97, i8 -97, i8 -97, i8 -97, i8 -97, i8 -97, i8 -97, i8 -97>
%70 = icmp ult <8 x i8> %69, <i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26, i8 26>
%71 = add <8 x i8> %66, <i8 -32, i8 -32, i8 -32, i8 -32, i8 -32, i8 -32, i8 -32, i8 -32>
%72 = select <8 x i1> %70, <8 x i8> %71, <8 x i8> <i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95>
%73 = select <8 x i1> %68, <8 x i8> %66, <8 x i8> %72
%74 = getelementptr inbounds [256 x i8], [256 x i8]* %3, i64 0, i64 %62
%75 = shufflevector <8 x i8> %73, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%76 = getelementptr inbounds i8, i8* %74, i64 -7
%77 = bitcast i8* %76 to <8 x i8>*
store <8 x i8> %75, <8 x i8>* %77
%78 = add nuw i64 %60, 8
%79 = icmp eq i64 %78, %56
br i1 %79, label %80, label %59
80: ; preds = %59
%81 = icmp eq i64 %17, %56
br i1 %81, label %98, label %82
82: ; preds = %20, %50, %80
%83 = phi i64 [ %17, %20 ], [ %51, %50 ], [ %57, %80 ]
br label %84
84: ; preds = %82, %84
%85 = phi i64 [ %86, %84 ], [ %83, %82 ]
%86 = add nsw i64 %85, -1
%87 = getelementptr inbounds i8, i8* %15, i64 %86
%88 = load i8, i8* %87
%89 = add i8 %88, -65
%90 = icmp ult i8 %89, 26
%91 = add i8 %88, -97
%92 = icmp ult i8 %91, 26
%93 = add i8 %88, -32
%94 = select i1 %92, i8 %93, i8 95
%95 = select i1 %90, i8 %88, i8 %94
%96 = getelementptr inbounds [256 x i8], [256 x i8]* %3, i64 0, i64 %86
store i8 %95, i8* %96
%97 = icmp eq i64 %86, 0
br i1 %97, label %98, label %84
98: ; preds = %84, %48, %80, %13
%99 = call i32 @fprintf(i32* %0, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* %4)
%100 = call i32 @fprintf(i32* %0, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0), i8* %4)
%101 = call i32 @fprintf(i32* %0, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0), i8* %15)
ret void
}