void AddString(char **buf_p, char *string, int width, int prec, int flags) {
  int size;
  char *buf;
  buf = *buf_p;
  if (string == ((void *)0)) {
    string = "(null)";
    prec = -1;
  }
  if (prec >= 0) {
    for (size = 0; size < prec; size++) {
      if (string[size] == '\0') {
        break;
      }
    }
  } else {
    size = strlen(string);
  }
  width -= size;
  if (!(flags & 0x00000004)) {
    while (width-- > 0) {
      *buf++ = (flags & 0x00000080) ? '0' : ' ';
    }
  }
  while (size--) {
    *buf++ = *string++;
  }
  if (flags & 0x00000004) {
    while (width-- > 0) {
      *buf++ = (flags & 0x00000080) ? '0' : ' ';
    }
  }
  *buf_p = buf;
}


x86 assembly (clang, -O0):
<AddString>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1152 <AddString+0x42>
lea    0xeb9(%rip),%rax
mov    %rax,-0x10(%rbp)
movl   $0xffffffff,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jl     11a1 <AddString+0x91>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    119c <AddString+0x8c>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1189 <AddString+0x79>
jmp    119c <AddString+0x8c>
jmp    118e <AddString+0x7e>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1163 <AddString+0x53>
jmp    11ad <AddString+0x9d>
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
jne    1216 <AddString+0x106>
jmp    11cc <AddString+0xbc>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
jle    1211 <AddString+0x101>
mov    -0x1c(%rbp),%edx
and    $0x80,%edx
mov    $0x20,%eax
mov    $0x30,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
jmp    11cc <AddString+0xbc>
jmp    1216 <AddString+0x106>
jmp    121b <AddString+0x10b>
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
je     1256 <AddString+0x146>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
jmp    121b <AddString+0x10b>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     12b4 <AddString+0x1a4>
jmp    126a <AddString+0x15a>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
jle    12af <AddString+0x19f>
mov    -0x1c(%rbp),%edx
and    $0x80,%edx
mov    $0x20,%eax
mov    $0x30,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
jmp    126a <AddString+0x15a>
jmp    12b4 <AddString+0x1a4>
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<AddString>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r8d,%r15d
mov    %edx,%r12d
mov    %rdi,%r14
mov    (%rdi),%rbx
cmp    $0x1,%rsi
sbb    %eax,%eax
or     %ecx,%eax
test   %rsi,%rsi
lea    0xeb7(%rip),%rbp
cmovne %rsi,%rbp
test   %eax,%eax
js     1176 <AddString+0x56>
xor    %r13d,%r13d
test   %rax,%rax
je     1181 <AddString+0x61>
nopl   0x0(%rax)
cmpb   $0x0,0x0(%rbp,%r13,1)
je     1181 <AddString+0x61>
add    $0x1,%r13
cmp    %r13,%rax
jne    1160 <AddString+0x40>
mov    %eax,%r13d
jmp    1181 <AddString+0x61>
mov    %rbp,%rdi
call   1030 <strlen@plt>
mov    %rax,%r13
sub    %r13d,%r12d
test   $0x4,%r15b
jne    11c1 <AddString+0xa1>
lea    -0x1(%r12),%eax
test   %r12d,%r12d
jle    121e <AddString+0xfe>
mov    %r15d,%esi
shr    $0x3,%esi
and    $0x10,%esi
mov    %eax,%r12d
lea    0x1(%r12),%rdx
or     $0x20,%esi
mov    %rbx,%rdi
call   1040 <memset@plt>
add    %r12,%rbx
add    $0x1,%rbx
mov    $0xffffffff,%r12d
test   %r13d,%r13d
je     1382 <AddString+0x262>
lea    -0x1(%r13),%eax
cmp    $0x1f,%eax
jb     12ed <AddString+0x1cd>
lea    (%rax,%rbp,1),%rcx
add    $0x1,%rcx
cmp    %rcx,%rbx
jae    11f5 <AddString+0xd5>
lea    (%rbx,%rax,1),%rcx
add    $0x1,%rcx
cmp    %rcx,%rbp
jb     12ed <AddString+0x1cd>
add    $0x1,%rax
mov    %rax,%r8
and    $0xffffffffffffffe0,%r8
lea    -0x20(%r8),%rcx
mov    %rcx,%rsi
shr    $0x5,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x3,%edx
cmp    $0x60,%rcx
jae    122b <AddString+0x10b>
xor    %edi,%edi
jmp    1299 <AddString+0x179>
mov    %eax,%r12d
test   %r13d,%r13d
jne    11ca <AddString+0xaa>
jmp    1382 <AddString+0x262>
and    $0xfffffffffffffffc,%rsi
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups 0x0(%rbp,%rdi,1),%xmm0
movups 0x10(%rbp,%rdi,1),%xmm1
movups %xmm0,(%rbx,%rdi,1)
movups %xmm1,0x10(%rbx,%rdi,1)
movups 0x20(%rbp,%rdi,1),%xmm0
movups 0x30(%rbp,%rdi,1),%xmm1
movups %xmm0,0x20(%rbx,%rdi,1)
movups %xmm1,0x30(%rbx,%rdi,1)
movups 0x40(%rbp,%rdi,1),%xmm0
movups 0x50(%rbp,%rdi,1),%xmm1
movups %xmm0,0x40(%rbx,%rdi,1)
movups %xmm1,0x50(%rbx,%rdi,1)
movups 0x60(%rbp,%rdi,1),%xmm0
movups 0x70(%rbp,%rdi,1),%xmm1
movups %xmm0,0x60(%rbx,%rdi,1)
movups %xmm1,0x70(%rbx,%rdi,1)
sub    $0xffffffffffffff80,%rdi
add    $0xfffffffffffffffc,%rsi
jne    1240 <AddString+0x120>
test   %rdx,%rdx
je     12db <AddString+0x1bb>
lea    (%rdi,%rbp,1),%rsi
add    $0x10,%rsi
add    %rbx,%rdi
add    $0x10,%rdi
shl    $0x5,%rdx
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups -0x10(%rsi,%rcx,1),%xmm0
movups (%rsi,%rcx,1),%xmm1
movups %xmm0,-0x10(%rdi,%rcx,1)
movups %xmm1,(%rdi,%rcx,1)
add    $0x20,%rcx
cmp    %rcx,%rdx
jne    12c0 <AddString+0x1a0>
add    %r8,%rbx
cmp    %r8,%rax
je     1382 <AddString+0x262>
sub    %r8d,%r13d
add    %r8,%rbp
lea    -0x1(%r13),%esi
test   $0x7,%r13b
je     1319 <AddString+0x1f9>
mov    %r13d,%edx
and    $0x7,%edx
xor    %ecx,%ecx
nop
movzbl 0x0(%rbp,%rcx,1),%eax
mov    %al,(%rbx,%rcx,1)
add    $0x1,%rcx
cmp    %ecx,%edx
jne    1300 <AddString+0x1e0>
add    %rcx,%rbx
sub    %ecx,%r13d
add    %rcx,%rbp
cmp    $0x7,%esi
jb     1382 <AddString+0x262>
mov    %r13d,%ecx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl 0x0(%rbp,%rax,1),%edx
mov    %dl,(%rbx,%rax,1)
movzbl 0x1(%rbp,%rax,1),%edx
mov    %dl,0x1(%rbx,%rax,1)
movzbl 0x2(%rbp,%rax,1),%edx
mov    %dl,0x2(%rbx,%rax,1)
movzbl 0x3(%rbp,%rax,1),%edx
mov    %dl,0x3(%rbx,%rax,1)
movzbl 0x4(%rbp,%rax,1),%edx
mov    %dl,0x4(%rbx,%rax,1)
movzbl 0x5(%rbp,%rax,1),%edx
mov    %dl,0x5(%rbx,%rax,1)
movzbl 0x6(%rbp,%rax,1),%edx
mov    %dl,0x6(%rbx,%rax,1)
movzbl 0x7(%rbp,%rax,1),%edx
mov    %dl,0x7(%rbx,%rax,1)
add    $0x8,%rax
cmp    %eax,%ecx
jne    1330 <AddString+0x210>
add    %rax,%rbx
test   $0x4,%r15b
je     13b2 <AddString+0x292>
test   %r12d,%r12d
jle    13b2 <AddString+0x292>
shr    $0x3,%r15d
and    $0x10,%r15d
mov    %r12d,%edx
or     $0x20,%r15d
mov    %rbx,%rdi
mov    %r15d,%esi
call   1040 <memset@plt>
add    $0xffffffff,%r12d
add    %r12,%rbx
add    $0x1,%rbx
mov    %rbx,(%r14)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [7 x i8] c"(null)\00"
define void @AddString(i8** nocapture %0, i8* %1, i32 %2, i32 %3, i32 %4) {
%6 = load i8*, i8** %0
%7 = icmp eq i8* %1, null
%8 = select i1 %7, i32 -1, i32 %3
%9 = select i1 %7, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i8* %1
%10 = icmp sgt i32 %8, -1
br i1 %10, label %11, label %23
11: ; preds = %5
%12 = icmp eq i32 %8, 0
br i1 %12, label %28, label %13
13: ; preds = %11
%14 = zext i32 %8 to i64
br label %15
15: ; preds = %13, %20
%16 = phi i64 [ 0, %13 ], [ %21, %20 ]
%17 = getelementptr inbounds i8, i8* %9, i64 %16
%18 = load i8, i8* %17
%19 = icmp eq i8 %18, 0
br i1 %19, label %26, label %20
20: ; preds = %15
%21 = add nuw nsw i64 %16, 1
%22 = icmp eq i64 %21, %14
br i1 %22, label %28, label %15
23: ; preds = %5
%24 = tail call i64 @strlen(i8* dereferenceable(1) %9)
%25 = trunc i64 %24 to i32
br label %28
26: ; preds = %15
%27 = trunc i64 %16 to i32
br label %28
28: ; preds = %20, %26, %11, %23
%29 = phi i32 [ %25, %23 ], [ 0, %11 ], [ %27, %26 ], [ %8, %20 ]
%30 = sub nsw i32 %2, %29
%31 = and i32 %4, 4
%32 = icmp eq i32 %31, 0
br i1 %32, label %33, label %43
33: ; preds = %28
%34 = add i32 %30, -1
%35 = icmp sgt i32 %30, 0
br i1 %35, label %36, label %43
36: ; preds = %33
%37 = and i32 %4, 128
%38 = icmp eq i32 %37, 0
%39 = select i1 %38, i8 32, i8 48
%40 = zext i32 %34 to i64
%41 = add nuw nsw i64 %40, 1
%42 = getelementptr i8, i8* %6, i64 %41
br label %43
43: ; preds = %36, %33, %28
%44 = phi i32 [ %30, %28 ], [ %34, %33 ], [ -1, %36 ]
%45 = phi i8* [ %6, %28 ], [ %6, %33 ], [ %42, %36 ]
%46 = icmp eq i32 %29, 0
br i1 %46, label %198, label %47
47: ; preds = %43
%48 = add i32 %29, -1
%49 = zext i32 %48 to i64
%50 = add nuw nsw i64 %49, 1
%51 = icmp ult i32 %48, 31
br i1 %51, label %144, label %52
52: ; preds = %47
%53 = add i32 %29, -1
%54 = zext i32 %53 to i64
%55 = add nuw nsw i64 %54, 1
%56 = getelementptr i8, i8* %45, i64 %55
%57 = getelementptr i8, i8* %9, i64 %55
%58 = icmp ult i8* %45, %57
%59 = icmp ult i8* %9, %56
%60 = and i1 %58, %59
br i1 %60, label %144, label %61
61: ; preds = %52
%62 = and i64 %50, 8589934560
%63 = getelementptr i8, i8* %45, i64 %62
%64 = trunc i64 %62 to i32
%65 = sub i32 %29, %64
%66 = getelementptr i8, i8* %9, i64 %62
%67 = add nsw i64 %62, -32
%68 = lshr exact i64 %67, 5
%69 = add nuw nsw i64 %68, 1
%70 = and i64 %69, 3
%71 = icmp ult i64 %67, 96
br i1 %71, label %123, label %72
72: ; preds = %61
%73 = and i64 %69, 1152921504606846972
br label %74
74: ; preds = %74, %72
%75 = phi i64 [ 0, %72 ], [ %120, %74 ]
%76 = phi i64 [ 0, %72 ], [ %121, %74 ]
%77 = getelementptr i8, i8* %45, i64 %75
%78 = getelementptr i8, i8* %9, i64 %75
%79 = bitcast i8* %78 to <16 x i8>*
%80 = load <16 x i8>, <16 x i8>* %79
%81 = getelementptr i8, i8* %78, i64 16
%82 = bitcast i8* %81 to <16 x i8>*
%83 = load <16 x i8>, <16 x i8>* %82
%84 = bitcast i8* %77 to <16 x i8>*
store <16 x i8> %80, <16 x i8>* %84
%85 = getelementptr i8, i8* %77, i64 16
%86 = bitcast i8* %85 to <16 x i8>*
store <16 x i8> %83, <16 x i8>* %86
%87 = or i64 %75, 32
%88 = getelementptr i8, i8* %45, i64 %87
%89 = getelementptr i8, i8* %9, i64 %87
%90 = bitcast i8* %89 to <16 x i8>*
%91 = load <16 x i8>, <16 x i8>* %90
%92 = getelementptr i8, i8* %89, i64 16
%93 = bitcast i8* %92 to <16 x i8>*
%94 = load <16 x i8>, <16 x i8>* %93
%95 = bitcast i8* %88 to <16 x i8>*
store <16 x i8> %91, <16 x i8>* %95
%96 = getelementptr i8, i8* %88, i64 16
%97 = bitcast i8* %96 to <16 x i8>*
store <16 x i8> %94, <16 x i8>* %97
%98 = or i64 %75, 64
%99 = getelementptr i8, i8* %45, i64 %98
%100 = getelementptr i8, i8* %9, i64 %98
%101 = bitcast i8* %100 to <16 x i8>*
%102 = load <16 x i8>, <16 x i8>* %101
%103 = getelementptr i8, i8* %100, i64 16
%104 = bitcast i8* %103 to <16 x i8>*
%105 = load <16 x i8>, <16 x i8>* %104
%106 = bitcast i8* %99 to <16 x i8>*
store <16 x i8> %102, <16 x i8>* %106
%107 = getelementptr i8, i8* %99, i64 16
%108 = bitcast i8* %107 to <16 x i8>*
store <16 x i8> %105, <16 x i8>* %108
%109 = or i64 %75, 96
%110 = getelementptr i8, i8* %45, i64 %109
%111 = getelementptr i8, i8* %9, i64 %109
%112 = bitcast i8* %111 to <16 x i8>*
%113 = load <16 x i8>, <16 x i8>* %112
%114 = getelementptr i8, i8* %111, i64 16
%115 = bitcast i8* %114 to <16 x i8>*
%116 = load <16 x i8>, <16 x i8>* %115
%117 = bitcast i8* %110 to <16 x i8>*
store <16 x i8> %113, <16 x i8>* %117
%118 = getelementptr i8, i8* %110, i64 16
%119 = bitcast i8* %118 to <16 x i8>*
store <16 x i8> %116, <16 x i8>* %119
%120 = add nuw i64 %75, 128
%121 = add i64 %76, 4
%122 = icmp eq i64 %121, %73
br i1 %122, label %123, label %74
123: ; preds = %74, %61
%124 = phi i64 [ 0, %61 ], [ %120, %74 ]
%125 = icmp eq i64 %70, 0
br i1 %125, label %142, label %126
126: ; preds = %123, %126
%127 = phi i64 [ %139, %126 ], [ %124, %123 ]
%128 = phi i64 [ %140, %126 ], [ 0, %123 ]
%129 = getelementptr i8, i8* %45, i64 %127
%130 = getelementptr i8, i8* %9, i64 %127
%131 = bitcast i8* %130 to <16 x i8>*
%132 = load <16 x i8>, <16 x i8>* %131
%133 = getelementptr i8, i8* %130, i64 16
%134 = bitcast i8* %133 to <16 x i8>*
%135 = load <16 x i8>, <16 x i8>* %134
%136 = bitcast i8* %129 to <16 x i8>*
store <16 x i8> %132, <16 x i8>* %136
%137 = getelementptr i8, i8* %129, i64 16
%138 = bitcast i8* %137 to <16 x i8>*
store <16 x i8> %135, <16 x i8>* %138
%139 = add nuw i64 %127, 32
%140 = add i64 %128, 1
%141 = icmp eq i64 %140, %70
br i1 %141, label %142, label %126
142: ; preds = %126, %123
%143 = icmp eq i64 %50, %62
br i1 %143, label %198, label %144
144: ; preds = %52, %47, %142
%145 = phi i8* [ %45, %52 ], [ %45, %47 ], [ %63, %142 ]
%146 = phi i32 [ %29, %52 ], [ %29, %47 ], [ %65, %142 ]
%147 = phi i8* [ %9, %52 ], [ %9, %47 ], [ %66, %142 ]
%148 = add i32 %146, -1
%149 = and i32 %146, 7
%150 = icmp eq i32 %149, 0
br i1 %150, label %162, label %151
151: ; preds = %144, %151
%152 = phi i8* [ %159, %151 ], [ %145, %144 ]
%153 = phi i32 [ %156, %151 ], [ %146, %144 ]
%154 = phi i8* [ %157, %151 ], [ %147, %144 ]
%155 = phi i32 [ %160, %151 ], [ 0, %144 ]
%156 = add nsw i32 %153, -1
%157 = getelementptr inbounds i8, i8* %154, i64 1
%158 = load i8, i8* %154
%159 = getelementptr inbounds i8, i8* %152, i64 1
store i8 %158, i8* %152
%160 = add i32 %155, 1
%161 = icmp eq i32 %160, %149
br i1 %161, label %162, label %151
162: ; preds = %151, %144
%163 = phi i8* [ undef, %144 ], [ %159, %151 ]
%164 = phi i8* [ %145, %144 ], [ %159, %151 ]
%165 = phi i32 [ %146, %144 ], [ %156, %151 ]
%166 = phi i8* [ %147, %144 ], [ %157, %151 ]
%167 = icmp ult i32 %148, 7
br i1 %167, label %198, label %168
168: ; preds = %162, %168
%169 = phi i8* [ %196, %168 ], [ %164, %162 ]
%170 = phi i32 [ %193, %168 ], [ %165, %162 ]
%171 = phi i8* [ %194, %168 ], [ %166, %162 ]
%172 = getelementptr inbounds i8, i8* %171, i64 1
%173 = load i8, i8* %171
%174 = getelementptr inbounds i8, i8* %169, i64 1
store i8 %173, i8* %169
%175 = getelementptr inbounds i8, i8* %171, i64 2
%176 = load i8, i8* %172
%177 = getelementptr inbounds i8, i8* %169, i64 2
store i8 %176, i8* %174
%178 = getelementptr inbounds i8, i8* %171, i64 3
%179 = load i8, i8* %175
%180 = getelementptr inbounds i8, i8* %169, i64 3
store i8 %179, i8* %177
%181 = getelementptr inbounds i8, i8* %171, i64 4
%182 = load i8, i8* %178
%183 = getelementptr inbounds i8, i8* %169, i64 4
store i8 %182, i8* %180
%184 = getelementptr inbounds i8, i8* %171, i64 5
%185 = load i8, i8* %181
%186 = getelementptr inbounds i8, i8* %169, i64 5
store i8 %185, i8* %183
%187 = getelementptr inbounds i8, i8* %171, i64 6
%188 = load i8, i8* %184
%189 = getelementptr inbounds i8, i8* %169, i64 6
store i8 %188, i8* %186
%190 = getelementptr inbounds i8, i8* %171, i64 7
%191 = load i8, i8* %187
%192 = getelementptr inbounds i8, i8* %169, i64 7
store i8 %191, i8* %189
%193 = add nsw i32 %170, -8
%194 = getelementptr inbounds i8, i8* %171, i64 8
%195 = load i8, i8* %190
%196 = getelementptr inbounds i8, i8* %169, i64 8
store i8 %195, i8* %192
%197 = icmp eq i32 %193, 0
br i1 %197, label %198, label %168
198: ; preds = %162, %168, %142, %43
%199 = phi i8* [ %45, %43 ], [ %63, %142 ], [ %163, %162 ], [ %196, %168 ]
%200 = xor i1 %32, true
%201 = icmp sgt i32 %44, 0
%202 = select i1 %200, i1 %201, i1 false
br i1 %202, label %203, label %212
203: ; preds = %198
%204 = and i32 %4, 128
%205 = icmp eq i32 %204, 0
%206 = select i1 %205, i8 32, i8 48
%207 = zext i32 %44 to i64
%208 = add nsw i32 %44, -1
%209 = zext i32 %208 to i64
%210 = add nuw nsw i64 %209, 1
%211 = getelementptr i8, i8* %199, i64 %210
br label %212
212: ; preds = %203, %198
%213 = phi i8* [ %199, %198 ], [ %211, %203 ]
store i8* %213, i8** %0
ret void
}