#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*/ longword;

/* Variables and functions */
size_t str_len_lib(const char *str) {
  const char *char_ptr;
  const unsigned long int *longword_ptr;
  unsigned long int longword, himagic, lomagic;
  for (char_ptr = str;
       ((unsigned long int)char_ptr & (sizeof(longword) - 1)) != 0; ++char_ptr)
    if (*char_ptr == '\0')
      return char_ptr - str;
  longword_ptr = (unsigned long int *)char_ptr;
  himagic = 0x80808080L;
  lomagic = 0x01010101L;
  if (sizeof(longword) > 4) {
    himagic = ((himagic << 16) << 16) | himagic;
    lomagic = ((lomagic << 16) << 16) | lomagic;
  }
  if (sizeof(longword) > 8)
    ;
  for (;;) {
    longword = *longword_ptr++;
    if (((longword - lomagic) & ~longword & himagic) != 0) {
      const char *cp = (const char *)(longword_ptr - 1);
      if (cp[0] == 0)
        return cp - str;
      if (cp[1] == 0)
        return cp - str + 1;
      if (cp[2] == 0)
        return cp - str + 2;
      if (cp[3] == 0)
        return cp - str + 3;
      if (sizeof(longword) > 4) {
        if (cp[4] == 0)
          return cp - str + 4;
        if (cp[5] == 0)
          return cp - str + 5;
        if (cp[6] == 0)
          return cp - str + 6;
        if (cp[7] == 0)
          return cp - str + 7;
      }
    }
  }
}


x86 assembly (clang, -O0):
<str_len_lib>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
and    $0x7,%rax
cmp    $0x0,%rax
je     115c <str_len_lib+0x5c>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1146 <str_len_lib+0x46>
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
jmp    114b <str_len_lib+0x4b>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1110 <str_len_lib+0x10>
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    $0x80808080,%eax
mov    %rax,-0x30(%rbp)
movq   $0x1010101,-0x38(%rbp)
01
mov    -0x30(%rbp),%rax
shl    $0x10,%rax
shl    $0x10,%rax
or     -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
shl    $0x10,%rax
shl    $0x10,%rax
or     -0x38(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
sub    -0x38(%rbp),%rax
mov    -0x28(%rbp),%rcx
xor    $0xffffffffffffffff,%rcx
and    %rcx,%rax
and    -0x30(%rbp),%rax
cmp    $0x0,%rax
je     1328 <str_len_lib+0x228>
mov    -0x20(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1204 <str_len_lib+0x104>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
mov    -0x40(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    122d <str_len_lib+0x12d>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
mov    -0x40(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
jne    1256 <str_len_lib+0x156>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
mov    -0x40(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x0,%eax
jne    127f <str_len_lib+0x17f>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x3,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
mov    -0x40(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x0,%eax
jne    12a8 <str_len_lib+0x1a8>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x4,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
mov    -0x40(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x0,%eax
jne    12d1 <str_len_lib+0x1d1>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x5,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
mov    -0x40(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x0,%eax
jne    12fa <str_len_lib+0x1fa>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x6,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
mov    -0x40(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x0,%eax
jne    1323 <str_len_lib+0x223>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x7,%rax
mov    %rax,-0x8(%rbp)
jmp    132d <str_len_lib+0x22d>
jmp    1328 <str_len_lib+0x228>
jmp    119d <str_len_lib+0x9d>
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<str_len_lib>:
push   %r14
push   %rbx
mov    %rdi,%rax
test   $0x7,%dil
je     1197 <str_len_lib+0x97>
cmpb   $0x0,(%rdi)
mov    %rdi,%rax
je     1227 <str_len_lib+0x127>
lea    0x1(%rdi),%rax
test   $0x7,%al
je     1197 <str_len_lib+0x97>
cmpb   $0x0,(%rax)
je     1227 <str_len_lib+0x127>
lea    0x2(%rdi),%rax
test   $0x7,%al
je     1197 <str_len_lib+0x97>
cmpb   $0x0,(%rax)
je     1227 <str_len_lib+0x127>
lea    0x3(%rdi),%rax
test   $0x7,%al
je     1197 <str_len_lib+0x97>
cmpb   $0x0,(%rax)
je     1227 <str_len_lib+0x127>
lea    0x4(%rdi),%rax
test   $0x7,%al
je     1197 <str_len_lib+0x97>
cmpb   $0x0,(%rax)
je     1227 <str_len_lib+0x127>
lea    0x5(%rdi),%rax
test   $0x7,%al
je     1197 <str_len_lib+0x97>
cmpb   $0x0,(%rax)
je     1227 <str_len_lib+0x127>
lea    0x6(%rdi),%rax
test   $0x7,%al
je     1197 <str_len_lib+0x97>
cmpb   $0x0,(%rax)
je     1227 <str_len_lib+0x127>
lea    0x7(%rdi),%rax
test   $0x7,%al
je     1197 <str_len_lib+0x97>
cmpb   $0x0,(%rax)
je     1227 <str_len_lib+0x127>
lea    0x8(%rdi),%rax
movabs $0x8080808080808080,%r11
80 80 80
xor    %ecx,%ecx
movabs $0xfefefefefefefeff,%r14
fe fe fe
movabs $0xff00000000,%r8
movabs $0xff0000000000,%r9
movabs $0xff000000000000,%r10
jmp    11d4 <str_len_lib+0xd4>
nopl   (%rax)
add    $0x8,%rcx
mov    (%rax,%rcx,1),%rdx
mov    %rdx,%rbx
not    %rbx
and    %r11,%rbx
lea    (%rdx,%r14,1),%rsi
test   %rsi,%rbx
je     11d0 <str_len_lib+0xd0>
test   %dl,%dl
je     122e <str_len_lib+0x12e>
test   $0xff00,%edx
je     1236 <str_len_lib+0x136>
test   $0xff0000,%edx
je     1242 <str_len_lib+0x142>
test   $0xff000000,%edx
je     124e <str_len_lib+0x14e>
test   %r8,%rdx
je     125a <str_len_lib+0x15a>
test   %r9,%rdx
je     1266 <str_len_lib+0x166>
test   %r10,%rdx
je     1272 <str_len_lib+0x172>
shr    $0x38,%rdx
jne    11d0 <str_len_lib+0xd0>
sub    %rdi,%rax
add    %rcx,%rax
add    $0x7,%rax
jmp    122a <str_len_lib+0x12a>
sub    %rdi,%rax
pop    %rbx
pop    %r14
ret
sub    %rdi,%rax
add    %rcx,%rax
jmp    122a <str_len_lib+0x12a>
sub    %rdi,%rax
add    %rcx,%rax
add    $0x1,%rax
jmp    122a <str_len_lib+0x12a>
sub    %rdi,%rax
add    %rcx,%rax
add    $0x2,%rax
jmp    122a <str_len_lib+0x12a>
sub    %rdi,%rax
add    %rcx,%rax
add    $0x3,%rax
jmp    122a <str_len_lib+0x12a>
sub    %rdi,%rax
add    %rcx,%rax
add    $0x4,%rax
jmp    122a <str_len_lib+0x12a>
sub    %rdi,%rax
add    %rcx,%rax
add    $0x5,%rax
jmp    122a <str_len_lib+0x12a>
sub    %rdi,%rax
add    %rcx,%rax
add    $0x6,%rax
jmp    122a <str_len_lib+0x12a>

LLVM IR (-O0):
define i64 @str_len_lib(i8* %0) {
%2 = alloca i64
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i64*
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca i8*
store i8* %0, i8** %3
%10 = load i8*, i8** %3
store i8* %10, i8** %4
br label %11
11: ; preds = %28, %1
%12 = load i8*, i8** %4
%13 = ptrtoint i8* %12 to i64
%14 = and i64 %13, 7
%15 = icmp ne i64 %14, 0
br i1 %15, label %16, label %31
16: ; preds = %11
%17 = load i8*, i8** %4
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = icmp eq i32 %19, 0
br i1 %20, label %21, label %27
21: ; preds = %16
%22 = load i8*, i8** %4
%23 = load i8*, i8** %3
%24 = ptrtoint i8* %22 to i64
%25 = ptrtoint i8* %23 to i64
%26 = sub i64 %24, %25
store i64 %26, i64* %2
br label %165
27: ; preds = %16
br label %28
28: ; preds = %27
%29 = load i8*, i8** %4
%30 = getelementptr inbounds i8, i8* %29, i32 1
store i8* %30, i8** %4
br label %11
31: ; preds = %11
%32 = load i8*, i8** %4
%33 = bitcast i8* %32 to i64*
store i64* %33, i64** %5
store i64 2155905152, i64* %7
store i64 16843009, i64* %8
%34 = load i64, i64* %7
%35 = shl i64 %34, 16
%36 = shl i64 %35, 16
%37 = load i64, i64* %7
%38 = or i64 %36, %37
store i64 %38, i64* %7
%39 = load i64, i64* %8
%40 = shl i64 %39, 16
%41 = shl i64 %40, 16
%42 = load i64, i64* %8
%43 = or i64 %41, %42
store i64 %43, i64* %8
br label %44
44: ; preds = %164, %31
%45 = load i64*, i64** %5
%46 = getelementptr inbounds i64, i64* %45, i32 1
store i64* %46, i64** %5
%47 = load i64, i64* %45
store i64 %47, i64* %6
%48 = load i64, i64* %6
%49 = load i64, i64* %8
%50 = sub i64 %48, %49
%51 = load i64, i64* %6
%52 = xor i64 %51, -1
%53 = and i64 %50, %52
%54 = load i64, i64* %7
%55 = and i64 %53, %54
%56 = icmp ne i64 %55, 0
br i1 %56, label %57, label %164
57: ; preds = %44
%58 = load i64*, i64** %5
%59 = getelementptr inbounds i64, i64* %58, i64 -1
%60 = bitcast i64* %59 to i8*
store i8* %60, i8** %9
%61 = load i8*, i8** %9
%62 = getelementptr inbounds i8, i8* %61, i64 0
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = icmp eq i32 %64, 0
br i1 %65, label %66, label %72
66: ; preds = %57
%67 = load i8*, i8** %9
%68 = load i8*, i8** %3
%69 = ptrtoint i8* %67 to i64
%70 = ptrtoint i8* %68 to i64
%71 = sub i64 %69, %70
store i64 %71, i64* %2
br label %165
72: ; preds = %57
%73 = load i8*, i8** %9
%74 = getelementptr inbounds i8, i8* %73, i64 1
%75 = load i8, i8* %74
%76 = sext i8 %75 to i32
%77 = icmp eq i32 %76, 0
br i1 %77, label %78, label %85
78: ; preds = %72
%79 = load i8*, i8** %9
%80 = load i8*, i8** %3
%81 = ptrtoint i8* %79 to i64
%82 = ptrtoint i8* %80 to i64
%83 = sub i64 %81, %82
%84 = add nsw i64 %83, 1
store i64 %84, i64* %2
br label %165
85: ; preds = %72
%86 = load i8*, i8** %9
%87 = getelementptr inbounds i8, i8* %86, i64 2
%88 = load i8, i8* %87
%89 = sext i8 %88 to i32
%90 = icmp eq i32 %89, 0
br i1 %90, label %91, label %98
91: ; preds = %85
%92 = load i8*, i8** %9
%93 = load i8*, i8** %3
%94 = ptrtoint i8* %92 to i64
%95 = ptrtoint i8* %93 to i64
%96 = sub i64 %94, %95
%97 = add nsw i64 %96, 2
store i64 %97, i64* %2
br label %165
98: ; preds = %85
%99 = load i8*, i8** %9
%100 = getelementptr inbounds i8, i8* %99, i64 3
%101 = load i8, i8* %100
%102 = sext i8 %101 to i32
%103 = icmp eq i32 %102, 0
br i1 %103, label %104, label %111
104: ; preds = %98
%105 = load i8*, i8** %9
%106 = load i8*, i8** %3
%107 = ptrtoint i8* %105 to i64
%108 = ptrtoint i8* %106 to i64
%109 = sub i64 %107, %108
%110 = add nsw i64 %109, 3
store i64 %110, i64* %2
br label %165
111: ; preds = %98
%112 = load i8*, i8** %9
%113 = getelementptr inbounds i8, i8* %112, i64 4
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = icmp eq i32 %115, 0
br i1 %116, label %117, label %124
117: ; preds = %111
%118 = load i8*, i8** %9
%119 = load i8*, i8** %3
%120 = ptrtoint i8* %118 to i64
%121 = ptrtoint i8* %119 to i64
%122 = sub i64 %120, %121
%123 = add nsw i64 %122, 4
store i64 %123, i64* %2
br label %165
124: ; preds = %111
%125 = load i8*, i8** %9
%126 = getelementptr inbounds i8, i8* %125, i64 5
%127 = load i8, i8* %126
%128 = sext i8 %127 to i32
%129 = icmp eq i32 %128, 0
br i1 %129, label %130, label %137
130: ; preds = %124
%131 = load i8*, i8** %9
%132 = load i8*, i8** %3
%133 = ptrtoint i8* %131 to i64
%134 = ptrtoint i8* %132 to i64
%135 = sub i64 %133, %134
%136 = add nsw i64 %135, 5
store i64 %136, i64* %2
br label %165
137: ; preds = %124
%138 = load i8*, i8** %9
%139 = getelementptr inbounds i8, i8* %138, i64 6
%140 = load i8, i8* %139
%141 = sext i8 %140 to i32
%142 = icmp eq i32 %141, 0
br i1 %142, label %143, label %150
143: ; preds = %137
%144 = load i8*, i8** %9
%145 = load i8*, i8** %3
%146 = ptrtoint i8* %144 to i64
%147 = ptrtoint i8* %145 to i64
%148 = sub i64 %146, %147
%149 = add nsw i64 %148, 6
store i64 %149, i64* %2
br label %165
150: ; preds = %137
%151 = load i8*, i8** %9
%152 = getelementptr inbounds i8, i8* %151, i64 7
%153 = load i8, i8* %152
%154 = sext i8 %153 to i32
%155 = icmp eq i32 %154, 0
br i1 %155, label %156, label %163
156: ; preds = %150
%157 = load i8*, i8** %9
%158 = load i8*, i8** %3
%159 = ptrtoint i8* %157 to i64
%160 = ptrtoint i8* %158 to i64
%161 = sub i64 %159, %160
%162 = add nsw i64 %161, 7
store i64 %162, i64* %2
br label %165
163: ; preds = %150
br label %164
164: ; preds = %163, %44
br label %44
165: ; preds = %156, %143, %130, %117, %104, %91, %78, %66, %21
%166 = load i64, i64* %2
ret i64 %166
}

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