char *s_abspath(char *r, char *b) {
  if (*r != '/') {
    char *c = b, *sep = (char *)0;
    for (;;) {
      if (!(*c))
        break;
      if (*c++ == '/')
        sep = c;
    }
    if (sep) {
      char *p = r, *q;
      while (*p++)
        ;
      q = p + (sep - b);
      do
        *(--q) = *(--p);
      while (p != r);
      while (b != sep)
        *r++ = *b++;
    }
  }
  return r;
}


x86 assembly (clang, -O0):
<s_abspath>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1222 <s_abspath+0x122>
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x20(%rbp)
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    113e <s_abspath+0x3e>
jmp    1166 <s_abspath+0x66>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1161 <s_abspath+0x61>
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
jmp    112c <s_abspath+0x2c>
cmpq   $0x0,-0x20(%rbp)
je     121d <s_abspath+0x11d>
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
cmpb   $0x0,(%rax)
je     1196 <s_abspath+0x96>
jmp    1179 <s_abspath+0x79>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    -0x10(%rbp),%rdx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x28(%rbp)
mov    -0x1(%rax),%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0xffffffffffffffff,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,-0x1(%rax)
mov    -0x28(%rbp),%rax
cmp    -0x8(%rbp),%rax
jne    11ac <s_abspath+0xac>
jmp    11e3 <s_abspath+0xe3>
mov    -0x10(%rbp),%rax
cmp    -0x20(%rbp),%rax
je     1218 <s_abspath+0x118>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
jmp    11e3 <s_abspath+0xe3>
jmp    121d <s_abspath+0x11d>
jmp    1222 <s_abspath+0x122>
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<s_abspath>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdi,%rax
mov    (%rdi),%dl
cmp    $0x2f,%dl
je     13f3 <s_abspath+0x2f3>
mov    (%rsi),%bl
test   %bl,%bl
je     13f3 <s_abspath+0x2f3>
lea    0x1(%rsi),%rdi
xor    %r8d,%r8d
nopl   0x0(%rax)
cmp    $0x2f,%bl
cmove  %rdi,%r8
movzbl (%rdi),%ebx
add    $0x1,%rdi
test   %bl,%bl
jne    1130 <s_abspath+0x30>
test   %r8,%r8
je     13f3 <s_abspath+0x2f3>
lea    0x1(%rax),%rdi
test   %dl,%dl
je     116e <s_abspath+0x6e>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x1(%rdi),%rdx
cmpb   $0x0,(%rdi)
mov    %rdx,%rdi
jne    1160 <s_abspath+0x60>
jmp    1171 <s_abspath+0x71>
mov    %rdi,%rdx
mov    %r8,%r13
sub    %rsi,%r13
lea    (%rdx,%r13,1),%r9
mov    %rdx,%r10
sub    %rax,%r10
mov    %rax,%r11
not    %r11
cmp    $0x4,%r10
jae    1267 <s_abspath+0x167>
mov    %rdx,%rbx
mov    %r9,%rdi
mov    %ebx,%edx
sub    %eax,%edx
add    %rbx,%r11
and    $0x7,%rdx
je     11c5 <s_abspath+0xc5>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl -0x1(%rbx),%ecx
add    $0xffffffffffffffff,%rbx
mov    %cl,-0x1(%rdi)
add    $0xffffffffffffffff,%rdi
add    $0xffffffffffffffff,%rdx
jne    11b0 <s_abspath+0xb0>
cmp    $0x7,%r11
jb     1214 <s_abspath+0x114>
add    $0xffffffffffffffff,%rdi
nop
movzbl -0x1(%rbx),%ecx
mov    %cl,(%rdi)
movzbl -0x2(%rbx),%ecx
mov    %cl,-0x1(%rdi)
movzbl -0x3(%rbx),%ecx
mov    %cl,-0x2(%rdi)
movzbl -0x4(%rbx),%ecx
mov    %cl,-0x3(%rdi)
movzbl -0x5(%rbx),%ecx
mov    %cl,-0x4(%rdi)
movzbl -0x6(%rbx),%ecx
mov    %cl,-0x5(%rdi)
movzbl -0x7(%rbx),%ecx
mov    %cl,-0x6(%rdi)
movzbl -0x8(%rbx),%ecx
add    $0xfffffffffffffff8,%rbx
mov    %cl,-0x7(%rdi)
add    $0xfffffffffffffff8,%rdi
cmp    %rax,%rbx
jne    11d0 <s_abspath+0xd0>
cmp    %rsi,%r8
je     13f3 <s_abspath+0x2f3>
cmp    $0x20,%r13
jb     137a <s_abspath+0x27a>
lea    (%rsi,%r13,1),%rcx
cmp    %rax,%rcx
jbe    123d <s_abspath+0x13d>
lea    (%rax,%r13,1),%rcx
cmp    %rsi,%rcx
ja     137a <s_abspath+0x27a>
mov    %r13,%r9
and    $0xffffffffffffffe0,%r9
lea    -0x20(%r9),%rcx
mov    %rcx,%rdi
shr    $0x5,%rdi
add    $0x1,%rdi
mov    %edi,%r10d
and    $0x3,%r10d
cmp    $0x60,%rcx
jae    12c0 <s_abspath+0x1c0>
xor    %edx,%edx
jmp    1328 <s_abspath+0x228>
lea    (%r11,%rdx,1),%r14
mov    %rsi,%rdi
not    %rdi
add    %r8,%rdi
add    %rdx,%rdi
mov    %rdi,%rbx
sub    %r14,%rbx
cmp    %rdi,%rbx
ja     1191 <s_abspath+0x91>
lea    -0x1(%rdx),%rdi
mov    %rdi,%rbx
sub    %r14,%rbx
cmp    %rdi,%rbx
ja     1191 <s_abspath+0x91>
lea    (%r8,%rax,1),%rdi
sub    %rsi,%rdi
cmp    %rdx,%rdi
jae    12ae <s_abspath+0x1ae>
cmp    %r9,%rax
jb     1191 <s_abspath+0x91>
cmp    $0x10,%r10
jae    13fe <s_abspath+0x2fe>
xor    %r14d,%r14d
jmp    14b9 <s_abspath+0x3b9>
and    $0xfffffffffffffffc,%rdi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
movups (%rsi,%rdx,1),%xmm0
movups 0x10(%rsi,%rdx,1),%xmm1
movups %xmm0,(%rax,%rdx,1)
movups %xmm1,0x10(%rax,%rdx,1)
movups 0x20(%rsi,%rdx,1),%xmm0
movups 0x30(%rsi,%rdx,1),%xmm1
movups %xmm0,0x20(%rax,%rdx,1)
movups %xmm1,0x30(%rax,%rdx,1)
movups 0x40(%rsi,%rdx,1),%xmm0
movups 0x50(%rsi,%rdx,1),%xmm1
movups %xmm0,0x40(%rax,%rdx,1)
movups %xmm1,0x50(%rax,%rdx,1)
movups 0x60(%rsi,%rdx,1),%xmm0
movups 0x70(%rsi,%rdx,1),%xmm1
movups %xmm0,0x60(%rax,%rdx,1)
movups %xmm1,0x70(%rax,%rdx,1)
sub    $0xffffffffffffff80,%rdx
add    $0xfffffffffffffffc,%rdi
jne    12d0 <s_abspath+0x1d0>
test   %r10,%r10
je     136b <s_abspath+0x26b>
lea    (%rax,%rdx,1),%rdi
add    $0x10,%rdi
add    %rsi,%rdx
add    $0x10,%rdx
shl    $0x5,%r10
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movups -0x10(%rdx,%rbx,1),%xmm0
movups (%rdx,%rbx,1),%xmm1
movups %xmm0,-0x10(%rdi,%rbx,1)
movups %xmm1,(%rdi,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r10
jne    1350 <s_abspath+0x250>
add    %r9,%rax
cmp    %r9,%r13
je     13f3 <s_abspath+0x2f3>
add    %r9,%rsi
mov    %r8d,%edi
sub    %esi,%edi
mov    %rsi,%rdx
not    %rdx
add    %r8,%rdx
and    $0x7,%rdi
je     13a3 <s_abspath+0x2a3>
xchg   %ax,%ax
movzbl (%rsi),%ecx
add    $0x1,%rsi
mov    %cl,(%rax)
add    $0x1,%rax
add    $0xffffffffffffffff,%rdi
jne    1390 <s_abspath+0x290>
cmp    $0x7,%rdx
jb     13f3 <s_abspath+0x2f3>
nopl   0x0(%rax)
movzbl (%rsi),%ecx
mov    %cl,(%rax)
movzbl 0x1(%rsi),%ecx
mov    %cl,0x1(%rax)
movzbl 0x2(%rsi),%ecx
mov    %cl,0x2(%rax)
movzbl 0x3(%rsi),%ecx
mov    %cl,0x3(%rax)
movzbl 0x4(%rsi),%ecx
mov    %cl,0x4(%rax)
movzbl 0x5(%rsi),%ecx
mov    %cl,0x5(%rax)
movzbl 0x6(%rsi),%ecx
mov    %cl,0x6(%rax)
movzbl 0x7(%rsi),%ecx
mov    %cl,0x7(%rax)
add    $0x8,%rax
add    $0x8,%rsi
cmp    %r8,%rsi
jne    13b0 <s_abspath+0x2b0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r10,%r14
and    $0xfffffffffffffff0,%r14
lea    -0x10(%r14),%rbx
mov    %rbx,%rdi
shr    $0x4,%rdi
add    $0x1,%rdi
mov    %edi,%r15d
and    $0x3,%r15d
mov    %r13,%rcx
cmp    $0x30,%rbx
jae    1428 <s_abspath+0x328>
xor    %ebx,%ebx
jmp    146a <s_abspath+0x36a>
and    $0xfffffffffffffffc,%rdi
lea    -0x10(%r9),%r12
xor    %ebx,%ebx
movups -0x10(%rdx,%rbx,1),%xmm0
movups %xmm0,(%r12,%rbx,1)
movups -0x20(%rdx,%rbx,1),%xmm0
movups %xmm0,-0x10(%r12,%rbx,1)
movups -0x30(%rdx,%rbx,1),%xmm0
movups %xmm0,-0x20(%r12,%rbx,1)
movups -0x40(%rdx,%rbx,1),%xmm0
movups %xmm0,-0x30(%r12,%rbx,1)
add    $0xffffffffffffffc0,%rbx
add    $0xfffffffffffffffc,%rdi
jne    1432 <s_abspath+0x332>
neg    %rbx
test   %r15,%r15
je     14a7 <s_abspath+0x3a7>
mov    $0xfffffffffffffff0,%r13
sub    %rbx,%r13
lea    (%rdx,%r13,1),%r12
sub    %rsi,%r13
add    %rdx,%r13
add    %r8,%r13
shl    $0x4,%r15
xor    %ebx,%ebx
nopl   0x0(%rax)
movups (%r12,%rbx,1),%xmm0
movups %xmm0,0x0(%r13,%rbx,1)
add    $0xfffffffffffffff0,%rbx
mov    %r15,%rdi
add    %rbx,%rdi
jne    1490 <s_abspath+0x390>
cmp    %r14,%r10
mov    %rcx,%r13
je     1214 <s_abspath+0x114>
test   $0xc,%r10b
je     1501 <s_abspath+0x401>
mov    %r10,%r15
and    $0xfffffffffffffffc,%r15
mov    %rdx,%rbx
sub    %r15,%rbx
mov    %r9,%rdi
sub    %r15,%rdi
neg    %r14
mov    %r15,%r12
neg    %r12
cs nopw 0x0(%rax,%rax,1)
nop
mov    -0x4(%rdx,%r14,1),%ebp
mov    %ebp,-0x4(%r9,%r14,1)
add    $0xfffffffffffffffc,%r14
cmp    %r14,%r12
jne    14e0 <s_abspath+0x3e0>
cmp    %r15,%r10
jne    1197 <s_abspath+0x97>
jmp    1214 <s_abspath+0x114>
sub    %r14,%r9
sub    %r14,%rdx
jmp    1191 <s_abspath+0x91>

LLVM IR (-O0):
define i8* @s_abspath(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
store i8* %0, i8** %3
store i8* %1, i8** %4
%9 = load i8*, i8** %3
%10 = load i8, i8* %9
%11 = sext i8 %10 to i32
%12 = icmp ne i32 %11, 47
br i1 %12, label %13, label %71
13: ; preds = %2
%14 = load i8*, i8** %4
store i8* %14, i8** %5
store i8* null, i8** %6
br label %15
15: ; preds = %28, %13
%16 = load i8*, i8** %5
%17 = load i8, i8* %16
%18 = icmp ne i8 %17, 0
br i1 %18, label %20, label %19
19: ; preds = %15
br label %29
20: ; preds = %15
%21 = load i8*, i8** %5
%22 = getelementptr inbounds i8, i8* %21, i32 1
store i8* %22, i8** %5
%23 = load i8, i8* %21
%24 = sext i8 %23 to i32
%25 = icmp eq i32 %24, 47
br i1 %25, label %26, label %28
26: ; preds = %20
%27 = load i8*, i8** %5
store i8* %27, i8** %6
br label %28
28: ; preds = %26, %20
br label %15
29: ; preds = %19
%30 = load i8*, i8** %6
%31 = icmp ne i8* %30, null
br i1 %31, label %32, label %70
32: ; preds = %29
%33 = load i8*, i8** %3
store i8* %33, i8** %7
br label %34
34: ; preds = %39, %32
%35 = load i8*, i8** %7
%36 = getelementptr inbounds i8, i8* %35, i32 1
store i8* %36, i8** %7
%37 = load i8, i8* %35
%38 = icmp ne i8 %37, 0
br i1 %38, label %39, label %40
39: ; preds = %34
br label %34
40: ; preds = %34
%41 = load i8*, i8** %7
%42 = load i8*, i8** %6
%43 = load i8*, i8** %4
%44 = ptrtoint i8* %42 to i64
%45 = ptrtoint i8* %43 to i64
%46 = sub i64 %44, %45
%47 = getelementptr inbounds i8, i8* %41, i64 %46
store i8* %47, i8** %8
br label %48
48: ; preds = %54, %40
%49 = load i8*, i8** %7
%50 = getelementptr inbounds i8, i8* %49, i32 -1
store i8* %50, i8** %7
%51 = load i8, i8* %50
%52 = load i8*, i8** %8
%53 = getelementptr inbounds i8, i8* %52, i32 -1
store i8* %53, i8** %8
store i8 %51, i8* %53
br label %54
54: ; preds = %48
%55 = load i8*, i8** %7
%56 = load i8*, i8** %3
%57 = icmp ne i8* %55, %56
br i1 %57, label %48, label %58
58: ; preds = %54
br label %59
59: ; preds = %63, %58
%60 = load i8*, i8** %4
%61 = load i8*, i8** %6
%62 = icmp ne i8* %60, %61
br i1 %62, label %63, label %69
63: ; preds = %59
%64 = load i8*, i8** %4
%65 = getelementptr inbounds i8, i8* %64, i32 1
store i8* %65, i8** %4
%66 = load i8, i8* %64
%67 = load i8*, i8** %3
%68 = getelementptr inbounds i8, i8* %67, i32 1
store i8* %68, i8** %3
store i8 %66, i8* %67
br label %59
69: ; preds = %59
br label %70
70: ; preds = %69, %29
br label %71
71: ; preds = %70, %2
%72 = load i8*, i8** %3
ret i8* %72
}

LLVM IR (-O2):
define i8* @s_abspath(i8* %0, i8* %1) {
%3 = ptrtoint i8* %0 to i64
%4 = load i8, i8* %0
%5 = icmp eq i8 %4, 47
br i1 %5, label %363, label %6
6: ; preds = %2
%7 = load i8, i8* %1
%8 = icmp eq i8 %7, 0
br i1 %8, label %363, label %9
9: ; preds = %6, %9
%10 = phi i8 [ %16, %9 ], [ %7, %6 ]
%11 = phi i8* [ %15, %9 ], [ null, %6 ]
%12 = phi i8* [ %13, %9 ], [ %1, %6 ]
%13 = getelementptr inbounds i8, i8* %12, i64 1
%14 = icmp eq i8 %10, 47
%15 = select i1 %14, i8* %13, i8* %11
%16 = load i8, i8* %13
%17 = icmp eq i8 %16, 0
br i1 %17, label %18, label %9
18: ; preds = %9
%19 = icmp eq i8* %15, null
br i1 %19, label %363, label %20
20: ; preds = %18
%21 = getelementptr inbounds i8, i8* %0, i64 1
%22 = icmp eq i8 %4, 0
br i1 %22, label %28, label %23
23: ; preds = %20, %23
%24 = phi i8* [ %26, %23 ], [ %21, %20 ]
%25 = load i8, i8* %24
%26 = getelementptr inbounds i8, i8* %24, i64 1
%27 = icmp eq i8 %25, 0
br i1 %27, label %28, label %23
28: ; preds = %23, %20
%29 = phi i8* [ %21, %20 ], [ %26, %23 ]
%30 = ptrtoint i8* %29 to i64
%31 = ptrtoint i8* %15 to i64
%32 = ptrtoint i8* %1 to i64
%33 = sub i64 %31, %32
%34 = getelementptr i8, i8* %29, i64 %33
%35 = sub i64 %30, %3
%36 = icmp ult i64 %35, 4
br i1 %36, label %171, label %37
37: ; preds = %28
%38 = xor i64 %3, -1
%39 = add i64 %38, %30
%40 = xor i64 %32, -1
%41 = add i64 %40, %31
%42 = getelementptr i8, i8* %29, i64 %41
%43 = sub i64 0, %39
%44 = getelementptr i8, i8* %42, i64 %43
%45 = icmp ugt i8* %44, %42
%46 = getelementptr i8, i8* %29, i64 -1
%47 = sub i64 0, %39
%48 = getelementptr i8, i8* %46, i64 %47
%49 = icmp ugt i8* %48, %46
%50 = or i1 %45, %49
br i1 %50, label %171, label %51
51: ; preds = %37
%52 = add i64 %31, %3
%53 = add i64 %30, %32
%54 = sub i64 %52, %53
%55 = getelementptr i8, i8* %29, i64 %54
%56 = sub i64 %3, %30
%57 = getelementptr i8, i8* %29, i64 %56
%58 = icmp ult i8* %55, %29
%59 = icmp ult i8* %57, %34
%60 = and i1 %58, %59
br i1 %60, label %171, label %61
61: ; preds = %51
%62 = icmp ult i64 %35, 16
br i1 %62, label %147, label %63
63: ; preds = %61
%64 = and i64 %35, -16
%65 = add i64 %64, -16
%66 = lshr exact i64 %65, 4
%67 = add nuw nsw i64 %66, 1
%68 = and i64 %67, 3
%69 = icmp ult i64 %65, 48
br i1 %69, label %118, label %70
70: ; preds = %63
%71 = and i64 %67, 2305843009213693948
%72 = getelementptr i8, i8* %34, i64 -1
%73 = getelementptr i8, i8* %29, i64 -16
%74 = getelementptr inbounds i8, i8* %72, i64 -15
%75 = getelementptr i8, i8* %34, i64 -1
%76 = getelementptr i8, i8* %29, i64 -16
%77 = getelementptr inbounds i8, i8* %75, i64 -15
%78 = getelementptr i8, i8* %34, i64 -1
%79 = getelementptr i8, i8* %29, i64 -16
%80 = getelementptr inbounds i8, i8* %78, i64 -15
%81 = getelementptr i8, i8* %34, i64 -1
%82 = getelementptr i8, i8* %29, i64 -16
%83 = getelementptr inbounds i8, i8* %81, i64 -15
br label %84
84: ; preds = %84, %70
%85 = phi i64 [ 0, %70 ], [ %115, %84 ]
%86 = phi i64 [ 0, %70 ], [ %116, %84 ]
%87 = sub i64 0, %85
%88 = sub i64 0, %85
%89 = getelementptr inbounds i8, i8* %73, i64 %87
%90 = bitcast i8* %89 to <16 x i8>*
%91 = load <16 x i8>, <16 x i8>* %90
%92 = getelementptr inbounds i8, i8* %74, i64 %88
%93 = bitcast i8* %92 to <16 x i8>*
store <16 x i8> %91, <16 x i8>* %93
%94 = sub nuw nsw i64 -16, %85
%95 = sub nuw nsw i64 -16, %85
%96 = getelementptr inbounds i8, i8* %76, i64 %94
%97 = bitcast i8* %96 to <16 x i8>*
%98 = load <16 x i8>, <16 x i8>* %97
%99 = getelementptr inbounds i8, i8* %77, i64 %95
%100 = bitcast i8* %99 to <16 x i8>*
store <16 x i8> %98, <16 x i8>* %100
%101 = sub nuw nsw i64 -32, %85
%102 = sub nuw nsw i64 -32, %85
%103 = getelementptr inbounds i8, i8* %79, i64 %101
%104 = bitcast i8* %103 to <16 x i8>*
%105 = load <16 x i8>, <16 x i8>* %104
%106 = getelementptr inbounds i8, i8* %80, i64 %102
%107 = bitcast i8* %106 to <16 x i8>*
store <16 x i8> %105, <16 x i8>* %107
%108 = sub nuw nsw i64 -48, %85
%109 = sub nuw nsw i64 -48, %85
%110 = getelementptr inbounds i8, i8* %82, i64 %108
%111 = bitcast i8* %110 to <16 x i8>*
%112 = load <16 x i8>, <16 x i8>* %111
%113 = getelementptr inbounds i8, i8* %83, i64 %109
%114 = bitcast i8* %113 to <16 x i8>*
store <16 x i8> %112, <16 x i8>* %114
%115 = add nuw i64 %85, 64
%116 = add i64 %86, 4
%117 = icmp eq i64 %116, %71
br i1 %117, label %118, label %84
118: ; preds = %84, %63
%119 = phi i64 [ 0, %63 ], [ %115, %84 ]
%120 = icmp eq i64 %68, 0
br i1 %120, label %138, label %121
121: ; preds = %118
%122 = getelementptr i8, i8* %34, i64 -1
%123 = getelementptr i8, i8* %29, i64 -16
%124 = getelementptr inbounds i8, i8* %122, i64 -15
br label %125
125: ; preds = %125, %121
%126 = phi i64 [ %119, %121 ], [ %135, %125 ]
%127 = phi i64 [ 0, %121 ], [ %136, %125 ]
%128 = sub i64 0, %126
%129 = sub i64 0, %126
%130 = getelementptr inbounds i8, i8* %123, i64 %128
%131 = bitcast i8* %130 to <16 x i8>*
%132 = load <16 x i8>, <16 x i8>* %131
%133 = getelementptr inbounds i8, i8* %124, i64 %129
%134 = bitcast i8* %133 to <16 x i8>*
store <16 x i8> %132, <16 x i8>* %134
%135 = add nuw i64 %126, 16
%136 = add i64 %127, 1
%137 = icmp eq i64 %136, %68
br i1 %137, label %138, label %125
138: ; preds = %125, %118
%139 = icmp eq i64 %35, %64
br i1 %139, label %221, label %140
140: ; preds = %138
%141 = sub i64 0, %64
%142 = getelementptr i8, i8* %34, i64 %141
%143 = sub i64 0, %64
%144 = getelementptr i8, i8* %29, i64 %143
%145 = and i64 %35, 12
%146 = icmp eq i64 %145, 0
br i1 %146, label %171, label %147
147: ; preds = %61, %140
%148 = phi i64 [ %64, %140 ], [ 0, %61 ]
%149 = sub i64 %30, %3
%150 = and i64 %149, -4
%151 = sub i64 0, %150
%152 = getelementptr i8, i8* %29, i64 %151
%153 = sub i64 0, %150
%154 = getelementptr i8, i8* %34, i64 %153
%155 = getelementptr i8, i8* %34, i64 -1
%156 = getelementptr i8, i8* %29, i64 -4
%157 = getelementptr inbounds i8, i8* %155, i64 -3
br label %158
158: ; preds = %158, %147
%159 = phi i64 [ %148, %147 ], [ %167, %158 ]
%160 = sub i64 0, %159
%161 = sub i64 0, %159
%162 = getelementptr inbounds i8, i8* %156, i64 %160
%163 = bitcast i8* %162 to <4 x i8>*
%164 = load <4 x i8>, <4 x i8>* %163
%165 = getelementptr inbounds i8, i8* %157, i64 %161
%166 = bitcast i8* %165 to <4 x i8>*
store <4 x i8> %164, <4 x i8>* %166
%167 = add nuw i64 %159, 4
%168 = icmp eq i64 %167, %150
br i1 %168, label %169, label %158
169: ; preds = %158
%170 = icmp eq i64 %149, %150
br i1 %170, label %221, label %171
171: ; preds = %51, %37, %28, %140, %169
%172 = phi i8* [ %29, %28 ], [ %29, %51 ], [ %29, %37 ], [ %144, %140 ], [ %152, %169 ]
%173 = phi i8* [ %34, %28 ], [ %34, %51 ], [ %34, %37 ], [ %142, %140 ], [ %154, %169 ]
%174 = ptrtoint i8* %172 to i64
%175 = sub i64 %174, %3
%176 = xor i64 %3, -1
%177 = add i64 %176, %174
%178 = and i64 %175, 7
%179 = icmp eq i64 %178, 0
br i1 %179, label %189, label %180
180: ; preds = %171, %180
%181 = phi i8* [ %184, %180 ], [ %172, %171 ]
%182 = phi i8* [ %186, %180 ], [ %173, %171 ]
%183 = phi i64 [ %187, %180 ], [ 0, %171 ]
%184 = getelementptr inbounds i8, i8* %181, i64 -1
%185 = load i8, i8* %184
%186 = getelementptr inbounds i8, i8* %182, i64 -1
store i8 %185, i8* %186
%187 = add i64 %183, 1
%188 = icmp eq i64 %187, %178
br i1 %188, label %189, label %180
189: ; preds = %180, %171
%190 = phi i8* [ %172, %171 ], [ %184, %180 ]
%191 = phi i8* [ %173, %171 ], [ %186, %180 ]
%192 = icmp ult i64 %177, 7
br i1 %192, label %221, label %193
193: ; preds = %189, %193
%194 = phi i8* [ %217, %193 ], [ %190, %189 ]
%195 = phi i8* [ %219, %193 ], [ %191, %189 ]
%196 = getelementptr inbounds i8, i8* %194, i64 -1
%197 = load i8, i8* %196
%198 = getelementptr inbounds i8, i8* %195, i64 -1
store i8 %197, i8* %198
%199 = getelementptr inbounds i8, i8* %194, i64 -2
%200 = load i8, i8* %199
%201 = getelementptr inbounds i8, i8* %195, i64 -2
store i8 %200, i8* %201
%202 = getelementptr inbounds i8, i8* %194, i64 -3
%203 = load i8, i8* %202
%204 = getelementptr inbounds i8, i8* %195, i64 -3
store i8 %203, i8* %204
%205 = getelementptr inbounds i8, i8* %194, i64 -4
%206 = load i8, i8* %205
%207 = getelementptr inbounds i8, i8* %195, i64 -4
store i8 %206, i8* %207
%208 = getelementptr inbounds i8, i8* %194, i64 -5
%209 = load i8, i8* %208
%210 = getelementptr inbounds i8, i8* %195, i64 -5
store i8 %209, i8* %210
%211 = getelementptr inbounds i8, i8* %194, i64 -6
%212 = load i8, i8* %211
%213 = getelementptr inbounds i8, i8* %195, i64 -6
store i8 %212, i8* %213
%214 = getelementptr inbounds i8, i8* %194, i64 -7
%215 = load i8, i8* %214
%216 = getelementptr inbounds i8, i8* %195, i64 -7
store i8 %215, i8* %216
%217 = getelementptr inbounds i8, i8* %194, i64 -8
%218 = load i8, i8* %217
%219 = getelementptr inbounds i8, i8* %195, i64 -8
store i8 %218, i8* %219
%220 = icmp eq i8* %217, %0
br i1 %220, label %221, label %193
221: ; preds = %189, %193, %169, %138
%222 = icmp eq i8* %15, %1
br i1 %222, label %363, label %223
223: ; preds = %221
%224 = icmp ult i64 %33, 32
br i1 %224, label %312, label %225
225: ; preds = %223
%226 = getelementptr i8, i8* %0, i64 %33
%227 = getelementptr i8, i8* %1, i64 %33
%228 = icmp ugt i8* %227, %0
%229 = icmp ugt i8* %226, %1
%230 = and i1 %228, %229
br i1 %230, label %312, label %231
231: ; preds = %225
%232 = and i64 %33, -32
%233 = getelementptr i8, i8* %1, i64 %232
%234 = getelementptr i8, i8* %0, i64 %232
%235 = add i64 %232, -32
%236 = lshr exact i64 %235, 5
%237 = add nuw nsw i64 %236, 1
%238 = and i64 %237, 3
%239 = icmp ult i64 %235, 96
br i1 %239, label %291, label %240
240: ; preds = %231
%241 = and i64 %237, 1152921504606846972
br label %242
242: ; preds = %242, %240
%243 = phi i64 [ 0, %240 ], [ %288, %242 ]
%244 = phi i64 [ 0, %240 ], [ %289, %242 ]
%245 = getelementptr i8, i8* %1, i64 %243
%246 = getelementptr i8, i8* %0, i64 %243
%247 = bitcast i8* %245 to <16 x i8>*
%248 = load <16 x i8>, <16 x i8>* %247
%249 = getelementptr i8, i8* %245, i64 16
%250 = bitcast i8* %249 to <16 x i8>*
%251 = load <16 x i8>, <16 x i8>* %250
%252 = bitcast i8* %246 to <16 x i8>*
store <16 x i8> %248, <16 x i8>* %252
%253 = getelementptr i8, i8* %246, i64 16
%254 = bitcast i8* %253 to <16 x i8>*
store <16 x i8> %251, <16 x i8>* %254
%255 = or i64 %243, 32
%256 = getelementptr i8, i8* %1, i64 %255
%257 = getelementptr i8, i8* %0, i64 %255
%258 = bitcast i8* %256 to <16 x i8>*
%259 = load <16 x i8>, <16 x i8>* %258
%260 = getelementptr i8, i8* %256, i64 16
%261 = bitcast i8* %260 to <16 x i8>*
%262 = load <16 x i8>, <16 x i8>* %261
%263 = bitcast i8* %257 to <16 x i8>*
store <16 x i8> %259, <16 x i8>* %263
%264 = getelementptr i8, i8* %257, i64 16
%265 = bitcast i8* %264 to <16 x i8>*
store <16 x i8> %262, <16 x i8>* %265
%266 = or i64 %243, 64
%267 = getelementptr i8, i8* %1, i64 %266
%268 = getelementptr i8, i8* %0, i64 %266
%269 = bitcast i8* %267 to <16 x i8>*
%270 = load <16 x i8>, <16 x i8>* %269
%271 = getelementptr i8, i8* %267, i64 16
%272 = bitcast i8* %271 to <16 x i8>*
%273 = load <16 x i8>, <16 x i8>* %272
%274 = bitcast i8* %268 to <16 x i8>*
store <16 x i8> %270, <16 x i8>* %274
%275 = getelementptr i8, i8* %268, i64 16
%276 = bitcast i8* %275 to <16 x i8>*
store <16 x i8> %273, <16 x i8>* %276
%277 = or i64 %243, 96
%278 = getelementptr i8, i8* %1, i64 %277
%279 = getelementptr i8, i8* %0, i64 %277
%280 = bitcast i8* %278 to <16 x i8>*
%281 = load <16 x i8>, <16 x i8>* %280
%282 = getelementptr i8, i8* %278, i64 16
%283 = bitcast i8* %282 to <16 x i8>*
%284 = load <16 x i8>, <16 x i8>* %283
%285 = bitcast i8* %279 to <16 x i8>*
store <16 x i8> %281, <16 x i8>* %285
%286 = getelementptr i8, i8* %279, i64 16
%287 = bitcast i8* %286 to <16 x i8>*
store <16 x i8> %284, <16 x i8>* %287
%288 = add nuw i64 %243, 128
%289 = add i64 %244, 4
%290 = icmp eq i64 %289, %241
br i1 %290, label %291, label %242
291: ; preds = %242, %231
%292 = phi i64 [ 0, %231 ], [ %288, %242 ]
%293 = icmp eq i64 %238, 0
br i1 %293, label %310, label %294
294: ; preds = %291, %294
%295 = phi i64 [ %307, %294 ], [ %292, %291 ]
%296 = phi i64 [ %308, %294 ], [ 0, %291 ]
%297 = getelementptr i8, i8* %1, i64 %295
%298 = getelementptr i8, i8* %0, i64 %295
%299 = bitcast i8* %297 to <16 x i8>*
%300 = load <16 x i8>, <16 x i8>* %299
%301 = getelementptr i8, i8* %297, i64 16
%302 = bitcast i8* %301 to <16 x i8>*
%303 = load <16 x i8>, <16 x i8>* %302
%304 = bitcast i8* %298 to <16 x i8>*
store <16 x i8> %300, <16 x i8>* %304
%305 = getelementptr i8, i8* %298, i64 16
%306 = bitcast i8* %305 to <16 x i8>*
store <16 x i8> %303, <16 x i8>* %306
%307 = add nuw i64 %295, 32
%308 = add i64 %296, 1
%309 = icmp eq i64 %308, %238
br i1 %309, label %310, label %294
310: ; preds = %294, %291
%311 = icmp eq i64 %33, %232
br i1 %311, label %363, label %312
312: ; preds = %225, %223, %310
%313 = phi i8* [ %1, %225 ], [ %1, %223 ], [ %233, %310 ]
%314 = phi i8* [ %0, %225 ], [ %0, %223 ], [ %234, %310 ]
%315 = ptrtoint i8* %313 to i64
%316 = sub i64 %31, %315
%317 = xor i64 %315, -1
%318 = add i64 %317, %31
%319 = and i64 %316, 7
%320 = icmp eq i64 %319, 0
br i1 %320, label %330, label %321
321: ; preds = %312, %321
%322 = phi i8* [ %325, %321 ], [ %313, %312 ]
%323 = phi i8* [ %327, %321 ], [ %314, %312 ]
%324 = phi i64 [ %328, %321 ], [ 0, %312 ]
%325 = getelementptr inbounds i8, i8* %322, i64 1
%326 = load i8, i8* %322
%327 = getelementptr inbounds i8, i8* %323, i64 1
store i8 %326, i8* %323
%328 = add i64 %324, 1
%329 = icmp eq i64 %328, %319
br i1 %329, label %330, label %321
330: ; preds = %321, %312
%331 = phi i8* [ undef, %312 ], [ %327, %321 ]
%332 = phi i8* [ %313, %312 ], [ %325, %321 ]
%333 = phi i8* [ %314, %312 ], [ %327, %321 ]
%334 = icmp ult i64 %318, 7
br i1 %334, label %363, label %335
335: ; preds = %330, %335
%336 = phi i8* [ %359, %335 ], [ %332, %330 ]
%337 = phi i8* [ %361, %335 ], [ %333, %330 ]
%338 = getelementptr inbounds i8, i8* %336, i64 1
%339 = load i8, i8* %336
%340 = getelementptr inbounds i8, i8* %337, i64 1
store i8 %339, i8* %337
%341 = getelementptr inbounds i8, i8* %336, i64 2
%342 = load i8, i8* %338
%343 = getelementptr inbounds i8, i8* %337, i64 2
store i8 %342, i8* %340
%344 = getelementptr inbounds i8, i8* %336, i64 3
%345 = load i8, i8* %341
%346 = getelementptr inbounds i8, i8* %337, i64 3
store i8 %345, i8* %343
%347 = getelementptr inbounds i8, i8* %336, i64 4
%348 = load i8, i8* %344
%349 = getelementptr inbounds i8, i8* %337, i64 4
store i8 %348, i8* %346
%350 = getelementptr inbounds i8, i8* %336, i64 5
%351 = load i8, i8* %347
%352 = getelementptr inbounds i8, i8* %337, i64 5
store i8 %351, i8* %349
%353 = getelementptr inbounds i8, i8* %336, i64 6
%354 = load i8, i8* %350
%355 = getelementptr inbounds i8, i8* %337, i64 6
store i8 %354, i8* %352
%356 = getelementptr inbounds i8, i8* %336, i64 7
%357 = load i8, i8* %353
%358 = getelementptr inbounds i8, i8* %337, i64 7
store i8 %357, i8* %355
%359 = getelementptr inbounds i8, i8* %336, i64 8
%360 = load i8, i8* %356
%361 = getelementptr inbounds i8, i8* %337, i64 8
store i8 %360, i8* %358
%362 = icmp eq i8* %359, %15
br i1 %362, label %363, label %335
363: ; preds = %330, %335, %310, %6, %221, %18, %2
%364 = phi i8* [ %0, %2 ], [ %0, %18 ], [ %0, %221 ], [ %0, %6 ], [ %234, %310 ], [ %331, %330 ], [ %361, %335 ]
ret i8* %364
}