int test2(const char *s1c, const char *s2c, int n) {
  int i = 0;
  int nint = n / sizeof(int);
  if (nint >> 3) {
    int j = 0;
    const int *s1 = (const int *)s1c;
    const int *s2 = (const int *)s2c;
    int nint_8 = nint - 8;
    while (i <= nint_8 && s1[i++] == s2[j++] && s1[i++] == s2[j++] &&
           s1[i++] == s2[j++] && s1[i++] == s2[j++] && s1[i++] == s2[j++] &&
           s1[i++] == s2[j++] && s1[i++] == s2[j++] && s1[i++] == s2[j++]) {
    }
    i = (i - 1) * sizeof(int);
  }
  while (i < n && s1c[i] == s2c[i]) {
    i++;
  }
  return i;
}


x86 assembly (clang, -O0):
<test2>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movslq -0x14(%rbp),%rax
shr    $0x2,%rax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0x3,%eax
cmp    $0x0,%eax
je     1328 <test2+0x228>
movl   $0x0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x8,%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%ecx
xor    %eax,%eax
cmp    -0x34(%rbp),%ecx
mov    %al,-0x35(%rbp)
jg     1304 <test2+0x204>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rdx
mov    -0x20(%rbp),%eax
mov    %eax,%esi
add    $0x1,%esi
mov    %esi,-0x20(%rbp)
movslq %eax,%rsi
xor    %eax,%eax
cmp    (%rdx,%rsi,4),%ecx
mov    %al,-0x35(%rbp)
jne    1304 <test2+0x204>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rdx
mov    -0x20(%rbp),%eax
mov    %eax,%esi
add    $0x1,%esi
mov    %esi,-0x20(%rbp)
movslq %eax,%rsi
xor    %eax,%eax
cmp    (%rdx,%rsi,4),%ecx
mov    %al,-0x35(%rbp)
jne    1304 <test2+0x204>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rdx
mov    -0x20(%rbp),%eax
mov    %eax,%esi
add    $0x1,%esi
mov    %esi,-0x20(%rbp)
movslq %eax,%rsi
xor    %eax,%eax
cmp    (%rdx,%rsi,4),%ecx
mov    %al,-0x35(%rbp)
jne    1304 <test2+0x204>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rdx
mov    -0x20(%rbp),%eax
mov    %eax,%esi
add    $0x1,%esi
mov    %esi,-0x20(%rbp)
movslq %eax,%rsi
xor    %eax,%eax
cmp    (%rdx,%rsi,4),%ecx
mov    %al,-0x35(%rbp)
jne    1304 <test2+0x204>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rdx
mov    -0x20(%rbp),%eax
mov    %eax,%esi
add    $0x1,%esi
mov    %esi,-0x20(%rbp)
movslq %eax,%rsi
xor    %eax,%eax
cmp    (%rdx,%rsi,4),%ecx
mov    %al,-0x35(%rbp)
jne    1304 <test2+0x204>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rdx
mov    -0x20(%rbp),%eax
mov    %eax,%esi
add    $0x1,%esi
mov    %esi,-0x20(%rbp)
movslq %eax,%rsi
xor    %eax,%eax
cmp    (%rdx,%rsi,4),%ecx
mov    %al,-0x35(%rbp)
jne    1304 <test2+0x204>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rdx
mov    -0x20(%rbp),%eax
mov    %eax,%esi
add    $0x1,%esi
mov    %esi,-0x20(%rbp)
movslq %eax,%rsi
xor    %eax,%eax
cmp    (%rdx,%rsi,4),%ecx
mov    %al,-0x35(%rbp)
jne    1304 <test2+0x204>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x30(%rbp),%rcx
mov    -0x20(%rbp),%edx
mov    %edx,%esi
add    $0x1,%esi
mov    %esi,-0x20(%rbp)
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
sete   %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1314 <test2+0x214>
jmp    1319 <test2+0x219>
jmp    1150 <test2+0x50>
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
cltq
shl    $0x2,%rax
mov    %eax,-0x18(%rbp)
jmp    132d <test2+0x22d>
mov    -0x18(%rbp),%ecx
xor    %eax,%eax
cmp    -0x14(%rbp),%ecx
mov    %al,-0x36(%rbp)
jge    135e <test2+0x25e>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
test   $0x1,%al
jne    136e <test2+0x26e>
jmp    137c <test2+0x27c>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    132d <test2+0x22d>
mov    -0x18(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<test2>:
xor    %eax,%eax
cmp    $0x20,%edx
jb     119f <test2+0x9f>
mov    %edx,%eax
sar    $0x2,%eax
add    $0xfffffff8,%eax
movslq %eax,%r8
xor    %eax,%eax
cmp    %r8,%rax
jg     1198 <test2+0x98>
mov    (%rdi,%rax,4),%ecx
cmp    (%rsi,%rax,4),%ecx
jne    1177 <test2+0x77>
mov    0x4(%rdi,%rax,4),%ecx
cmp    0x4(%rsi,%rax,4),%ecx
jne    117c <test2+0x7c>
mov    0x8(%rdi,%rax,4),%ecx
cmp    0x8(%rsi,%rax,4),%ecx
jne    1181 <test2+0x81>
mov    0xc(%rdi,%rax,4),%ecx
cmp    0xc(%rsi,%rax,4),%ecx
jne    1186 <test2+0x86>
mov    0x10(%rdi,%rax,4),%ecx
cmp    0x10(%rsi,%rax,4),%ecx
jne    118b <test2+0x8b>
mov    0x14(%rdi,%rax,4),%ecx
cmp    0x14(%rsi,%rax,4),%ecx
jne    1190 <test2+0x90>
mov    0x18(%rdi,%rax,4),%ecx
cmp    0x18(%rsi,%rax,4),%ecx
jne    1195 <test2+0x95>
lea    0x8(%rax),%r9
mov    0x1c(%rdi,%rax,4),%ecx
cmp    0x1c(%rsi,%rax,4),%ecx
mov    %r9,%rax
je     1118 <test2+0x18>
mov    %r9d,%eax
jmp    1198 <test2+0x98>
add    $0x1,%eax
jmp    1198 <test2+0x98>
add    $0x2,%eax
jmp    1198 <test2+0x98>
add    $0x3,%eax
jmp    1198 <test2+0x98>
add    $0x4,%eax
jmp    1198 <test2+0x98>
add    $0x5,%eax
jmp    1198 <test2+0x98>
add    $0x6,%eax
jmp    1198 <test2+0x98>
add    $0x7,%eax
lea    -0x4(,%rax,4),%eax
cmp    %edx,%eax
jge    11c3 <test2+0xc3>
cltq
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rdi,%rax,1),%ecx
cmp    (%rsi,%rax,1),%cl
jne    11c3 <test2+0xc3>
add    $0x1,%rax
cmp    %eax,%edx
jne    11b0 <test2+0xb0>
mov    %edx,%eax
ret

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

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