#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 */
unsigned long UCHAR_MAX;
unsigned long ULONG_MAX;
long rl_internal_bitpos(void *s, unsigned long count, int bit) {
  unsigned long *l;
  unsigned char *c;
  unsigned long skipval, word = 0, one;
  long pos = 0;
  unsigned long j;
  skipval = bit ? 0 : UCHAR_MAX;
  c = (unsigned char *)s;
  while ((unsigned long)c & (sizeof(*l) - 1) && count) {
    if (*c != skipval)
      break;
    c++;
    count--;
    pos += 8;
  }
  skipval = bit ? 0 : ULONG_MAX;
  l = (unsigned long *)c;
  while (count >= sizeof(*l)) {
    if (*l != skipval)
      break;
    l++;
    count -= sizeof(*l);
    pos += sizeof(*l) * 8;
  }
  c = (unsigned char *)l;
  for (j = 0; j < sizeof(*l); j++) {
    word <<= 8;
    if (count) {
      word |= *c;
      c++;
      count--;
    }
  }
  if (bit == 1 && word == 0)
    return -1;
  one = ULONG_MAX;
  one >>= 1;
  one = ~one;
  while (one) {
    if (((one & word) != 0) == bit)
      return pos;
    pos++;
    one >>= 1;
  }
  return -2;
}


x86 assembly (clang, -O0):
<rl_internal_bitpos>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
movq   $0x0,-0x40(%rbp)
movq   $0x0,-0x50(%rbp)
cmpl   $0x0,-0x1c(%rbp)
je     1134 <rl_internal_bitpos+0x34>
xor    %eax,%eax
mov    %rax,-0x60(%rbp)
jmp    1142 <rl_internal_bitpos+0x42>
mov    0x2eb5(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rcx
and    $0x7,%rcx
xor    %eax,%eax
cmp    $0x0,%rcx
mov    %al,-0x61(%rbp)
je     1174 <rl_internal_bitpos+0x74>
cmpq   $0x0,-0x18(%rbp)
setne  %al
mov    %al,-0x61(%rbp)
mov    -0x61(%rbp),%al
test   $0x1,%al
jne    1184 <rl_internal_bitpos+0x84>
jmp    11c3 <rl_internal_bitpos+0xc3>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    -0x38(%rbp),%rax
je     119a <rl_internal_bitpos+0x9a>
jmp    11c3 <rl_internal_bitpos+0xc3>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x50(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x50(%rbp)
jmp    1152 <rl_internal_bitpos+0x52>
cmpl   $0x0,-0x1c(%rbp)
je     11d8 <rl_internal_bitpos+0xd8>
xor    %eax,%eax
mov    %rax,-0x70(%rbp)
jmp    11e6 <rl_internal_bitpos+0xe6>
mov    0x2df1(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpq   $0x8,-0x18(%rbp)
jb     1240 <rl_internal_bitpos+0x140>
mov    -0x28(%rbp),%rax
mov    (%rax),%rax
cmp    -0x38(%rbp),%rax
je     1217 <rl_internal_bitpos+0x117>
jmp    1240 <rl_internal_bitpos+0x140>
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x50(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x50(%rbp)
jmp    11f6 <rl_internal_bitpos+0xf6>
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
movq   $0x0,-0x58(%rbp)
cmpq   $0x8,-0x58(%rbp)
jae    12af <rl_internal_bitpos+0x1af>
mov    -0x40(%rbp),%rax
shl    $0x8,%rax
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1299 <rl_internal_bitpos+0x199>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
or     -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
jmp    129e <rl_internal_bitpos+0x19e>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    1250 <rl_internal_bitpos+0x150>
cmpl   $0x1,-0x1c(%rbp)
jne    12d1 <rl_internal_bitpos+0x1d1>
cmpq   $0x0,-0x40(%rbp)
jne    12d1 <rl_internal_bitpos+0x1d1>
movq   $0xffffffffffffffff,-0x8(%rbp)
ff
jmp    1351 <rl_internal_bitpos+0x251>
mov    0x2cf8(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
shr    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
xor    $0xffffffffffffffff,%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x0,-0x48(%rbp)
je     1349 <rl_internal_bitpos+0x249>
mov    -0x48(%rbp),%rax
and    -0x40(%rbp),%rax
cmp    $0x0,%rax
setne  %al
and    $0x1,%al
movzbl %al,%eax
cmp    -0x1c(%rbp),%eax
jne    132c <rl_internal_bitpos+0x22c>
mov    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1351 <rl_internal_bitpos+0x251>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
mov    -0x48(%rbp),%rax
shr    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    12f7 <rl_internal_bitpos+0x1f7>
movq   $0xfffffffffffffffe,-0x8(%rbp)
ff
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<rl_internal_bitpos>:
xor    %ecx,%ecx
mov    $0x0,%r9d
test   %edx,%edx
jne    1116 <rl_internal_bitpos+0x16>
mov    0x2edd(%rip),%rax
mov    (%rax),%r9
test   $0x7,%dil
je     1259 <rl_internal_bitpos+0x159>
test   %rsi,%rsi
je     1259 <rl_internal_bitpos+0x159>
movzbl (%rdi),%eax
cmp    %rax,%r9
jne    1257 <rl_internal_bitpos+0x157>
lea    0x1(%rdi),%r8
lea    -0x1(%rsi),%r10
mov    $0x8,%ecx
test   $0x7,%r8b
je     125f <rl_internal_bitpos+0x15f>
test   %r10,%r10
je     125f <rl_internal_bitpos+0x15f>
movzbl (%r8),%eax
cmp    %rax,%r9
jne    125f <rl_internal_bitpos+0x15f>
lea    0x2(%rdi),%r8
lea    -0x2(%rsi),%r10
mov    $0x10,%ecx
test   $0x7,%r8b
je     125f <rl_internal_bitpos+0x15f>
test   %r10,%r10
je     125f <rl_internal_bitpos+0x15f>
movzbl (%r8),%eax
cmp    %rax,%r9
jne    125f <rl_internal_bitpos+0x15f>
lea    0x3(%rdi),%r8
lea    -0x3(%rsi),%r10
mov    $0x18,%ecx
test   $0x7,%r8b
je     125f <rl_internal_bitpos+0x15f>
test   %r10,%r10
je     125f <rl_internal_bitpos+0x15f>
movzbl (%r8),%eax
cmp    %rax,%r9
jne    125f <rl_internal_bitpos+0x15f>
lea    0x4(%rdi),%r8
lea    -0x4(%rsi),%r10
mov    $0x20,%ecx
test   $0x7,%r8b
je     125f <rl_internal_bitpos+0x15f>
test   %r10,%r10
je     125f <rl_internal_bitpos+0x15f>
movzbl (%r8),%eax
cmp    %rax,%r9
jne    125f <rl_internal_bitpos+0x15f>
lea    0x5(%rdi),%r8
lea    -0x5(%rsi),%r10
mov    $0x28,%ecx
test   $0x7,%r8b
je     125f <rl_internal_bitpos+0x15f>
test   %r10,%r10
je     125f <rl_internal_bitpos+0x15f>
movzbl (%r8),%eax
cmp    %rax,%r9
jne    125f <rl_internal_bitpos+0x15f>
lea    0x6(%rdi),%r8
lea    -0x6(%rsi),%r10
mov    $0x30,%ecx
test   $0x7,%r8b
je     125f <rl_internal_bitpos+0x15f>
test   %r10,%r10
je     125f <rl_internal_bitpos+0x15f>
movzbl (%r8),%eax
cmp    %rax,%r9
jne    125f <rl_internal_bitpos+0x15f>
lea    0x7(%rdi),%r8
lea    -0x7(%rsi),%r10
mov    $0x38,%ecx
test   $0x7,%r8b
je     125f <rl_internal_bitpos+0x15f>
test   %r10,%r10
je     125f <rl_internal_bitpos+0x15f>
movzbl (%r8),%eax
cmp    %rax,%r9
jne    125f <rl_internal_bitpos+0x15f>
add    $0x8,%rdi
add    $0xfffffffffffffff8,%rsi
mov    $0x40,%ecx
jmp    1259 <rl_internal_bitpos+0x159>
xor    %ecx,%ecx
mov    %rsi,%r10
mov    %rdi,%r8
xor    %edi,%edi
test   %edx,%edx
mov    0x2d66(%rip),%rax
mov    (%rax),%rsi
cmove  %rsi,%rdi
cmp    $0x8,%r10
jb     1297 <rl_internal_bitpos+0x197>
nopw   0x0(%rax,%rax,1)
cmp    %rdi,(%r8)
jne    12a0 <rl_internal_bitpos+0x1a0>
add    $0x8,%r8
add    $0xfffffffffffffff8,%r10
add    $0x40,%rcx
cmp    $0x7,%r10
ja     1280 <rl_internal_bitpos+0x180>
test   %r10,%r10
je     1324 <rl_internal_bitpos+0x224>
movzbl (%r8),%edi
shl    $0x8,%rdi
cmp    $0x1,%r10
je     1326 <rl_internal_bitpos+0x226>
movzbl 0x1(%r8),%eax
or     %rax,%rdi
shl    $0x8,%rdi
cmp    $0x2,%r10
je     132a <rl_internal_bitpos+0x22a>
movzbl 0x2(%r8),%eax
or     %rax,%rdi
shl    $0x8,%rdi
cmp    $0x3,%r10
je     132e <rl_internal_bitpos+0x22e>
movzbl 0x3(%r8),%eax
or     %rax,%rdi
shl    $0x8,%rdi
cmp    $0x4,%r10
je     1332 <rl_internal_bitpos+0x232>
movzbl 0x4(%r8),%eax
or     %rax,%rdi
shl    $0x8,%rdi
cmp    $0x5,%r10
je     1336 <rl_internal_bitpos+0x236>
movzbl 0x5(%r8),%eax
or     %rax,%rdi
shl    $0x8,%rdi
add    $0xfffffffffffffffa,%r10
je     133a <rl_internal_bitpos+0x23a>
movzbl 0x6(%r8),%eax
or     %rax,%rdi
shl    $0x8,%rdi
cmp    $0x1,%r10
je     133e <rl_internal_bitpos+0x23e>
movzbl 0x7(%r8),%eax
or     %rax,%rdi
jmp    133e <rl_internal_bitpos+0x23e>
xor    %edi,%edi
shl    $0x8,%rdi
shl    $0x8,%rdi
shl    $0x8,%rdi
shl    $0x8,%rdi
shl    $0x8,%rdi
shl    $0x8,%rdi
cmp    $0x1,%edx
jne    1350 <rl_internal_bitpos+0x250>
mov    $0xffffffffffffffff,%rax
test   %rdi,%rdi
jne    1350 <rl_internal_bitpos+0x250>
ret
shr    %rsi
not    %rsi
cs nopw 0x0(%rax,%rax,1)
xor    %eax,%eax
test   %rdi,%rsi
setne  %al
cmp    %edx,%eax
je     1387 <rl_internal_bitpos+0x287>
add    $0x1,%rcx
mov    %rsi,%rax
shr    %rax
cmp    $0x1,%rsi
mov    %rax,%rsi
ja     1360 <rl_internal_bitpos+0x260>
mov    $0xfffffffffffffffe,%rax
ret
mov    %rcx,%rax
ret

LLVM IR (-O0):
@UCHAR_MAX = global i64 0
@ULONG_MAX = global i64 0
define i64 @rl_internal_bitpos(i8* %0, i64 %1, i32 %2) {
%4 = alloca i64
%5 = alloca i8*
%6 = alloca i64
%7 = alloca i32
%8 = alloca i64*
%9 = alloca i8*
%10 = alloca i64
%11 = alloca i64
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
store i8* %0, i8** %5
store i64 %1, i64* %6
store i32 %2, i32* %7
store i64 0, i64* %11
store i64 0, i64* %13
%15 = load i32, i32* %7
%16 = icmp ne i32 %15, 0
br i1 %16, label %17, label %18
17: ; preds = %3
br label %20
18: ; preds = %3
%19 = load i64, i64* @UCHAR_MAX
br label %20
20: ; preds = %18, %17
%21 = phi i64 [ 0, %17 ], [ %19, %18 ]
store i64 %21, i64* %10
%22 = load i8*, i8** %5
store i8* %22, i8** %9
br label %23
23: ; preds = %40, %20
%24 = load i8*, i8** %9
%25 = ptrtoint i8* %24 to i64
%26 = and i64 %25, 7
%27 = icmp ne i64 %26, 0
br i1 %27, label %28, label %31
28: ; preds = %23
%29 = load i64, i64* %6
%30 = icmp ne i64 %29, 0
br label %31
31: ; preds = %28, %23
%32 = phi i1 [ false, %23 ], [ %30, %28 ]
br i1 %32, label %33, label %47
33: ; preds = %31
%34 = load i8*, i8** %9
%35 = load i8, i8* %34
%36 = zext i8 %35 to i64
%37 = load i64, i64* %10
%38 = icmp ne i64 %36, %37
br i1 %38, label %39, label %40
39: ; preds = %33
br label %47
40: ; preds = %33
%41 = load i8*, i8** %9
%42 = getelementptr inbounds i8, i8* %41, i32 1
store i8* %42, i8** %9
%43 = load i64, i64* %6
%44 = add i64 %43, -1
store i64 %44, i64* %6
%45 = load i64, i64* %13
%46 = add nsw i64 %45, 8
store i64 %46, i64* %13
br label %23
47: ; preds = %39, %31
%48 = load i32, i32* %7
%49 = icmp ne i32 %48, 0
br i1 %49, label %50, label %51
50: ; preds = %47
br label %53
51: ; preds = %47
%52 = load i64, i64* @ULONG_MAX
br label %53
53: ; preds = %51, %50
%54 = phi i64 [ 0, %50 ], [ %52, %51 ]
store i64 %54, i64* %10
%55 = load i8*, i8** %9
%56 = bitcast i8* %55 to i64*
store i64* %56, i64** %8
br label %57
57: ; preds = %66, %53
%58 = load i64, i64* %6
%59 = icmp uge i64 %58, 8
br i1 %59, label %60, label %73
60: ; preds = %57
%61 = load i64*, i64** %8
%62 = load i64, i64* %61
%63 = load i64, i64* %10
%64 = icmp ne i64 %62, %63
br i1 %64, label %65, label %66
65: ; preds = %60
br label %73
66: ; preds = %60
%67 = load i64*, i64** %8
%68 = getelementptr inbounds i64, i64* %67, i32 1
store i64* %68, i64** %8
%69 = load i64, i64* %6
%70 = sub i64 %69, 8
store i64 %70, i64* %6
%71 = load i64, i64* %13
%72 = add i64 %71, 64
store i64 %72, i64* %13
br label %57
73: ; preds = %65, %57
%74 = load i64*, i64** %8
%75 = bitcast i64* %74 to i8*
store i8* %75, i8** %9
store i64 0, i64* %14
br label %76
76: ; preds = %95, %73
%77 = load i64, i64* %14
%78 = icmp ult i64 %77, 8
br i1 %78, label %79, label %98
79: ; preds = %76
%80 = load i64, i64* %11
%81 = shl i64 %80, 8
store i64 %81, i64* %11
%82 = load i64, i64* %6
%83 = icmp ne i64 %82, 0
br i1 %83, label %84, label %94
84: ; preds = %79
%85 = load i8*, i8** %9
%86 = load i8, i8* %85
%87 = zext i8 %86 to i64
%88 = load i64, i64* %11
%89 = or i64 %88, %87
store i64 %89, i64* %11
%90 = load i8*, i8** %9
%91 = getelementptr inbounds i8, i8* %90, i32 1
store i8* %91, i8** %9
%92 = load i64, i64* %6
%93 = add i64 %92, -1
store i64 %93, i64* %6
br label %94
94: ; preds = %84, %79
br label %95
95: ; preds = %94
%96 = load i64, i64* %14
%97 = add i64 %96, 1
store i64 %97, i64* %14
br label %76
98: ; preds = %76
%99 = load i32, i32* %7
%100 = icmp eq i32 %99, 1
br i1 %100, label %101, label %105
101: ; preds = %98
%102 = load i64, i64* %11
%103 = icmp eq i64 %102, 0
br i1 %103, label %104, label %105
104: ; preds = %101
store i64 -1, i64* %4
br label %130
105: ; preds = %101, %98
%106 = load i64, i64* @ULONG_MAX
store i64 %106, i64* %12
%107 = load i64, i64* %12
%108 = lshr i64 %107, 1
store i64 %108, i64* %12
%109 = load i64, i64* %12
%110 = xor i64 %109, -1
store i64 %110, i64* %12
br label %111
111: ; preds = %124, %105
%112 = load i64, i64* %12
%113 = icmp ne i64 %112, 0
br i1 %113, label %114, label %129
114: ; preds = %111
%115 = load i64, i64* %12
%116 = load i64, i64* %11
%117 = and i64 %115, %116
%118 = icmp ne i64 %117, 0
%119 = zext i1 %118 to i32
%120 = load i32, i32* %7
%121 = icmp eq i32 %119, %120
br i1 %121, label %122, label %124
122: ; preds = %114
%123 = load i64, i64* %13
store i64 %123, i64* %4
br label %130
124: ; preds = %114
%125 = load i64, i64* %13
%126 = add nsw i64 %125, 1
store i64 %126, i64* %13
%127 = load i64, i64* %12
%128 = lshr i64 %127, 1
store i64 %128, i64* %12
br label %111
129: ; preds = %111
store i64 -2, i64* %4
br label %130
130: ; preds = %129, %122, %104
%131 = load i64, i64* %4
ret i64 %131
}

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