#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 */
int /*<<< orphan*/ abort();
size_t strlen(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)
    abort();
  for (;;) {
    longword = *longword_ptr++;
    if (((longword - lomagic) & 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):
<strlen>:
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 <strlen+0x5c>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1146 <strlen+0x46>
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
jmp    114b <strlen+0x4b>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1110 <strlen+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
and    -0x30(%rbp),%rax
cmp    $0x0,%rax
je     131d <strlen+0x21d>
mov    -0x20(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    11f9 <strlen+0xf9>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
mov    -0x40(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    1222 <strlen+0x122>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
mov    -0x40(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
jne    124b <strlen+0x14b>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
mov    -0x40(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x0,%eax
jne    1274 <strlen+0x174>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x3,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
mov    -0x40(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x0,%eax
jne    129d <strlen+0x19d>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x4,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
mov    -0x40(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x0,%eax
jne    12c6 <strlen+0x1c6>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x5,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
mov    -0x40(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x0,%eax
jne    12ef <strlen+0x1ef>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x6,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
mov    -0x40(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x0,%eax
jne    1318 <strlen+0x218>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x7,%rax
mov    %rax,-0x8(%rbp)
jmp    1322 <strlen+0x222>
jmp    131d <strlen+0x21d>
jmp    119d <strlen+0x9d>
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<strlen>:
push   %rbx
mov    %rdi,%rax
test   $0x7,%dil
je     1195 <strlen+0x95>
cmpb   $0x0,(%rdi)
mov    %rdi,%rax
je     121e <strlen+0x11e>
lea    0x1(%rdi),%rax
test   $0x7,%al
je     1195 <strlen+0x95>
cmpb   $0x0,(%rax)
je     121e <strlen+0x11e>
lea    0x2(%rdi),%rax
test   $0x7,%al
je     1195 <strlen+0x95>
cmpb   $0x0,(%rax)
je     121e <strlen+0x11e>
lea    0x3(%rdi),%rax
test   $0x7,%al
je     1195 <strlen+0x95>
cmpb   $0x0,(%rax)
je     121e <strlen+0x11e>
lea    0x4(%rdi),%rax
test   $0x7,%al
je     1195 <strlen+0x95>
cmpb   $0x0,(%rax)
je     121e <strlen+0x11e>
lea    0x5(%rdi),%rax
test   $0x7,%al
je     1195 <strlen+0x95>
cmpb   $0x0,(%rax)
je     121e <strlen+0x11e>
lea    0x6(%rdi),%rax
test   $0x7,%al
je     1195 <strlen+0x95>
cmpb   $0x0,(%rax)
je     121e <strlen+0x11e>
lea    0x7(%rdi),%rax
test   $0x7,%al
je     1195 <strlen+0x95>
cmpb   $0x0,(%rax)
je     121e <strlen+0x11e>
lea    0x8(%rdi),%rax
xor    %ecx,%ecx
movabs $0xfefefefefefefeff,%r11
fe fe fe
movabs $0x8080808080808080,%rsi
80 80 80
movabs $0xff00000000,%r8
movabs $0xff0000000000,%r9
movabs $0xff000000000000,%r10
jmp    11d4 <strlen+0xd4>
nopl   0x0(%rax,%rax,1)
add    $0x8,%rcx
mov    (%rax,%rcx,1),%rdx
lea    (%rdx,%r11,1),%rbx
test   %rsi,%rbx
je     11d0 <strlen+0xd0>
test   %dl,%dl
je     1223 <strlen+0x123>
test   $0xff00,%edx
je     122b <strlen+0x12b>
test   $0xff0000,%edx
je     1237 <strlen+0x137>
test   $0xff000000,%edx
je     1243 <strlen+0x143>
test   %r8,%rdx
je     124f <strlen+0x14f>
test   %r9,%rdx
je     125b <strlen+0x15b>
test   %r10,%rdx
je     1267 <strlen+0x167>
shr    $0x38,%rdx
jne    11d0 <strlen+0xd0>
sub    %rdi,%rax
add    %rcx,%rax
add    $0x7,%rax
pop    %rbx
ret
sub    %rdi,%rax
pop    %rbx
ret
sub    %rdi,%rax
add    %rcx,%rax
pop    %rbx
ret
sub    %rdi,%rax
add    %rcx,%rax
add    $0x1,%rax
pop    %rbx
ret
sub    %rdi,%rax
add    %rcx,%rax
add    $0x2,%rax
pop    %rbx
ret
sub    %rdi,%rax
add    %rcx,%rax
add    $0x3,%rax
pop    %rbx
ret
sub    %rdi,%rax
add    %rcx,%rax
add    $0x4,%rax
pop    %rbx
ret
sub    %rdi,%rax
add    %rcx,%rax
add    $0x5,%rax
pop    %rbx
ret
sub    %rdi,%rax
add    %rcx,%rax
add    $0x6,%rax
pop    %rbx
ret

LLVM IR (-O0):
define i64 @strlen(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 %162
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 = %161, %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* %7
%52 = and i64 %50, %51
%53 = icmp ne i64 %52, 0
br i1 %53, label %54, label %161
54: ; preds = %44
%55 = load i64*, i64** %5
%56 = getelementptr inbounds i64, i64* %55, i64 -1
%57 = bitcast i64* %56 to i8*
store i8* %57, i8** %9
%58 = load i8*, i8** %9
%59 = getelementptr inbounds i8, i8* %58, i64 0
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = icmp eq i32 %61, 0
br i1 %62, label %63, label %69
63: ; preds = %54
%64 = load i8*, i8** %9
%65 = load i8*, i8** %3
%66 = ptrtoint i8* %64 to i64
%67 = ptrtoint i8* %65 to i64
%68 = sub i64 %66, %67
store i64 %68, i64* %2
br label %162
69: ; preds = %54
%70 = load i8*, i8** %9
%71 = getelementptr inbounds i8, i8* %70, i64 1
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = icmp eq i32 %73, 0
br i1 %74, label %75, label %82
75: ; preds = %69
%76 = load i8*, i8** %9
%77 = load i8*, i8** %3
%78 = ptrtoint i8* %76 to i64
%79 = ptrtoint i8* %77 to i64
%80 = sub i64 %78, %79
%81 = add nsw i64 %80, 1
store i64 %81, i64* %2
br label %162
82: ; preds = %69
%83 = load i8*, i8** %9
%84 = getelementptr inbounds i8, i8* %83, i64 2
%85 = load i8, i8* %84
%86 = sext i8 %85 to i32
%87 = icmp eq i32 %86, 0
br i1 %87, label %88, label %95
88: ; preds = %82
%89 = load i8*, i8** %9
%90 = load i8*, i8** %3
%91 = ptrtoint i8* %89 to i64
%92 = ptrtoint i8* %90 to i64
%93 = sub i64 %91, %92
%94 = add nsw i64 %93, 2
store i64 %94, i64* %2
br label %162
95: ; preds = %82
%96 = load i8*, i8** %9
%97 = getelementptr inbounds i8, i8* %96, i64 3
%98 = load i8, i8* %97
%99 = sext i8 %98 to i32
%100 = icmp eq i32 %99, 0
br i1 %100, label %101, label %108
101: ; preds = %95
%102 = load i8*, i8** %9
%103 = load i8*, i8** %3
%104 = ptrtoint i8* %102 to i64
%105 = ptrtoint i8* %103 to i64
%106 = sub i64 %104, %105
%107 = add nsw i64 %106, 3
store i64 %107, i64* %2
br label %162
108: ; preds = %95
%109 = load i8*, i8** %9
%110 = getelementptr inbounds i8, i8* %109, i64 4
%111 = load i8, i8* %110
%112 = sext i8 %111 to i32
%113 = icmp eq i32 %112, 0
br i1 %113, label %114, label %121
114: ; preds = %108
%115 = load i8*, i8** %9
%116 = load i8*, i8** %3
%117 = ptrtoint i8* %115 to i64
%118 = ptrtoint i8* %116 to i64
%119 = sub i64 %117, %118
%120 = add nsw i64 %119, 4
store i64 %120, i64* %2
br label %162
121: ; preds = %108
%122 = load i8*, i8** %9
%123 = getelementptr inbounds i8, i8* %122, i64 5
%124 = load i8, i8* %123
%125 = sext i8 %124 to i32
%126 = icmp eq i32 %125, 0
br i1 %126, label %127, label %134
127: ; preds = %121
%128 = load i8*, i8** %9
%129 = load i8*, i8** %3
%130 = ptrtoint i8* %128 to i64
%131 = ptrtoint i8* %129 to i64
%132 = sub i64 %130, %131
%133 = add nsw i64 %132, 5
store i64 %133, i64* %2
br label %162
134: ; preds = %121
%135 = load i8*, i8** %9
%136 = getelementptr inbounds i8, i8* %135, i64 6
%137 = load i8, i8* %136
%138 = sext i8 %137 to i32
%139 = icmp eq i32 %138, 0
br i1 %139, label %140, label %147
140: ; preds = %134
%141 = load i8*, i8** %9
%142 = load i8*, i8** %3
%143 = ptrtoint i8* %141 to i64
%144 = ptrtoint i8* %142 to i64
%145 = sub i64 %143, %144
%146 = add nsw i64 %145, 6
store i64 %146, i64* %2
br label %162
147: ; preds = %134
%148 = load i8*, i8** %9
%149 = getelementptr inbounds i8, i8* %148, i64 7
%150 = load i8, i8* %149
%151 = sext i8 %150 to i32
%152 = icmp eq i32 %151, 0
br i1 %152, label %153, label %160
153: ; preds = %147
%154 = load i8*, i8** %9
%155 = load i8*, i8** %3
%156 = ptrtoint i8* %154 to i64
%157 = ptrtoint i8* %155 to i64
%158 = sub i64 %156, %157
%159 = add nsw i64 %158, 7
store i64 %159, i64* %2
br label %162
160: ; preds = %147
br label %161
161: ; preds = %160, %44
br label %44
162: ; preds = %153, %140, %127, %114, %101, %88, %75, %63, %21
%163 = load i64, i64* %2
ret i64 %163
}

LLVM IR (-O2):
define i64 @strlen(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 %135
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 = %130, %70
%74 = phi i64* [ %72, %70 ], [ %75, %130 ]
%75 = getelementptr inbounds i64, i64* %74, i64 1
%76 = load i64, i64* %74
%77 = add i64 %76, -72340172838076673
%78 = and i64 %77, -9187201950435737472
%79 = icmp eq i64 %78, 0
br i1 %79, label %130, label %80
80: ; preds = %73
%81 = trunc i64 %76 to i8
%82 = icmp eq i8 %81, 0
br i1 %82, label %83, label %86
83: ; preds = %80
%84 = ptrtoint i64* %74 to i64
%85 = sub i64 %84, %2
br label %135
86: ; preds = %80
%87 = and i64 %76, 65280
%88 = icmp eq i64 %87, 0
br i1 %88, label %89, label %93
89: ; preds = %86
%90 = ptrtoint i64* %74 to i64
%91 = sub i64 1, %2
%92 = add i64 %91, %90
br label %135
93: ; preds = %86
%94 = and i64 %76, 16711680
%95 = icmp eq i64 %94, 0
br i1 %95, label %96, label %100
96: ; preds = %93
%97 = ptrtoint i64* %74 to i64
%98 = sub i64 2, %2
%99 = add i64 %98, %97
br label %135
100: ; preds = %93
%101 = and i64 %76, 4278190080
%102 = icmp eq i64 %101, 0
br i1 %102, label %103, label %107
103: ; preds = %100
%104 = ptrtoint i64* %74 to i64
%105 = sub i64 3, %2
%106 = add i64 %105, %104
br label %135
107: ; preds = %100
%108 = and i64 %76, 1095216660480
%109 = icmp eq i64 %108, 0
br i1 %109, label %110, label %114
110: ; preds = %107
%111 = ptrtoint i64* %74 to i64
%112 = sub i64 4, %2
%113 = add i64 %112, %111
br label %135
114: ; preds = %107
%115 = and i64 %76, 280375465082880
%116 = icmp eq i64 %115, 0
br i1 %116, label %117, label %121
117: ; preds = %114
%118 = ptrtoint i64* %74 to i64
%119 = sub i64 5, %2
%120 = add i64 %119, %118
br label %135
121: ; preds = %114
%122 = and i64 %76, 71776119061217280
%123 = icmp eq i64 %122, 0
br i1 %123, label %124, label %128
124: ; preds = %121
%125 = ptrtoint i64* %74 to i64
%126 = sub i64 6, %2
%127 = add i64 %126, %125
br label %135
128: ; preds = %121
%129 = icmp ult i64 %76, 72057594037927936
br i1 %129, label %131, label %130
130: ; preds = %128, %73
br label %73
131: ; preds = %128
%132 = ptrtoint i64* %74 to i64
%133 = sub i64 7, %2
%134 = add i64 %133, %132
br label %135
135: ; preds = %83, %89, %96, %103, %110, %117, %124, %131, %8
%136 = phi i64 [ %11, %8 ], [ %85, %83 ], [ %92, %89 ], [ %99, %96 ], [ %106, %103 ], [ %113, %110 ], [ %120, %117 ], [ %127, %124 ], [ %134, %131 ]
ret i64 %136
}