#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 wchar_t;

/* Variables and functions */
int wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n) {
  wchar_t c1 = L'\0';
  wchar_t c2 = L'\0';
  if (n >= 4) {
    size_t n4 = n >> 2;
    do {
      c1 = *s1++;
      c2 = *s2++;
      if (c1 == L'\0' || c1 != c2)
        return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
      c1 = *s1++;
      c2 = *s2++;
      if (c1 == L'\0' || c1 != c2)
        return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
      c1 = *s1++;
      c2 = *s2++;
      if (c1 == L'\0' || c1 != c2)
        return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
      c1 = *s1++;
      c2 = *s2++;
      if (c1 == L'\0' || c1 != c2)
        return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
    } while (--n4 > 0);
    n &= 3;
  }
  while (n > 0) {
    c1 = *s1++;
    c2 = *s2++;
    if (c1 == L'\0' || c1 != c2)
      return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
    n--;
  }
  return 0;
}


x86 assembly (clang, -O0):
<wcsncmp>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
cmpq   $0x4,-0x20(%rbp)
jb     1338 <wcsncmp+0x238>
mov    -0x20(%rbp),%rax
shr    $0x2,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     1173 <wcsncmp+0x73>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     11ac <wcsncmp+0xac>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    118c <wcsncmp+0x8c>
mov    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11a1 <wcsncmp+0xa1>
mov    -0x24(%rbp),%edx
mov    -0x28(%rbp),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    13d7 <wcsncmp+0x2d7>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     11ea <wcsncmp+0xea>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1223 <wcsncmp+0x123>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    1203 <wcsncmp+0x103>
mov    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1218 <wcsncmp+0x118>
mov    -0x24(%rbp),%edx
mov    -0x28(%rbp),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    13d7 <wcsncmp+0x2d7>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     1261 <wcsncmp+0x161>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     129a <wcsncmp+0x19a>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    127a <wcsncmp+0x17a>
mov    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    128f <wcsncmp+0x18f>
mov    -0x24(%rbp),%edx
mov    -0x28(%rbp),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    13d7 <wcsncmp+0x2d7>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     12d8 <wcsncmp+0x1d8>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1311 <wcsncmp+0x211>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    12f1 <wcsncmp+0x1f1>
mov    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1306 <wcsncmp+0x206>
mov    -0x24(%rbp),%edx
mov    -0x28(%rbp),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    13d7 <wcsncmp+0x2d7>
jmp    1316 <wcsncmp+0x216>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
cmp    $0x0,%rax
ja     1135 <wcsncmp+0x35>
mov    -0x20(%rbp),%rax
and    $0x3,%rax
mov    %rax,-0x20(%rbp)
jmp    133d <wcsncmp+0x23d>
cmpq   $0x0,-0x20(%rbp)
jbe    13d0 <wcsncmp+0x2d0>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     1386 <wcsncmp+0x286>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     13bf <wcsncmp+0x2bf>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    139f <wcsncmp+0x29f>
mov    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    13b4 <wcsncmp+0x2b4>
mov    -0x24(%rbp),%edx
mov    -0x28(%rbp),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    13d7 <wcsncmp+0x2d7>
mov    -0x20(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x20(%rbp)
jmp    133d <wcsncmp+0x23d>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<wcsncmp>:
cmp    $0x4,%rdx
jb     118e <wcsncmp+0x8e>
mov    %rdx,%r10
shr    $0x2,%r10
lea    0x0(,%rdx,4),%r9
and    $0xfffffffffffffff0,%r9
lea    (%rdi,%r9,1),%r8
add    %rsi,%r9
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
mov    (%rdi,%rax,1),%ecx
mov    (%rsi,%rax,1),%r11d
test   %ecx,%ecx
je     11bc <wcsncmp+0xbc>
cmp    %r11d,%ecx
jne    11bc <wcsncmp+0xbc>
mov    0x4(%rdi,%rax,1),%ecx
mov    0x4(%rsi,%rax,1),%r11d
test   %ecx,%ecx
je     11bc <wcsncmp+0xbc>
cmp    %r11d,%ecx
jne    11bc <wcsncmp+0xbc>
mov    0x8(%rdi,%rax,1),%ecx
mov    0x8(%rsi,%rax,1),%r11d
test   %ecx,%ecx
je     11bc <wcsncmp+0xbc>
cmp    %r11d,%ecx
jne    11bc <wcsncmp+0xbc>
mov    0xc(%rdi,%rax,1),%ecx
mov    0xc(%rsi,%rax,1),%r11d
test   %ecx,%ecx
je     11bc <wcsncmp+0xbc>
cmp    %r11d,%ecx
jne    11bc <wcsncmp+0xbc>
add    $0x10,%rax
add    $0xffffffffffffffff,%r10
jne    1130 <wcsncmp+0x30>
and    $0x3,%edx
test   %rdx,%rdx
jne    1199 <wcsncmp+0x99>
jmp    11b9 <wcsncmp+0xb9>
mov    %rdi,%r8
mov    %rsi,%r9
test   %rdx,%rdx
je     11b9 <wcsncmp+0xb9>
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
mov    (%r8,%rax,4),%ecx
mov    (%r9,%rax,4),%esi
test   %ecx,%ecx
je     11cb <wcsncmp+0xcb>
cmp    %esi,%ecx
jne    11cb <wcsncmp+0xcb>
add    $0x1,%rax
cmp    %rax,%rdx
jne    11a0 <wcsncmp+0xa0>
xor    %eax,%eax
ret
xor    %edx,%edx
cmp    %r11d,%ecx
setl   %dl
neg    %edx
cmp    %r11d,%ecx
jmp    11d6 <wcsncmp+0xd6>
xor    %edx,%edx
cmp    %esi,%ecx
setl   %dl
neg    %edx
cmp    %esi,%ecx
mov    $0x1,%eax
cmovle %edx,%eax
ret

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

LLVM IR (-O2):
define i32 @wcsncmp(i32* nocapture %0, i32* nocapture %1, i64 %2) {
%4 = icmp ugt i64 %2, 3
br i1 %4, label %5, label %70
5: ; preds = %3
%6 = lshr i64 %2, 2
%7 = and i64 %2, -4
%8 = getelementptr i32, i32* %0, i64 %7
%9 = getelementptr i32, i32* %1, i64 %7
br label %10
10: ; preds = %63, %5
%11 = phi i32* [ %0, %5 ], [ %65, %63 ]
%12 = phi i32* [ %1, %5 ], [ %64, %63 ]
%13 = phi i64 [ %6, %5 ], [ %66, %63 ]
%14 = load i32, i32* %11
%15 = load i32, i32* %12
%16 = icmp ne i32 %14, 0
%17 = icmp eq i32 %14, %15
%18 = select i1 %16, i1 %17, i1 false
br i1 %18, label %24, label %19
19: ; preds = %10
%20 = icmp sgt i32 %14, %15
%21 = icmp slt i32 %14, %15
%22 = sext i1 %21 to i32
%23 = select i1 %20, i32 1, i32 %22
br label %94
24: ; preds = %10
%25 = getelementptr inbounds i32, i32* %12, i64 1
%26 = getelementptr inbounds i32, i32* %11, i64 1
%27 = load i32, i32* %26
%28 = load i32, i32* %25
%29 = icmp ne i32 %27, 0
%30 = icmp eq i32 %27, %28
%31 = select i1 %29, i1 %30, i1 false
br i1 %31, label %37, label %32
32: ; preds = %24
%33 = icmp sgt i32 %27, %28
%34 = icmp slt i32 %27, %28
%35 = sext i1 %34 to i32
%36 = select i1 %33, i32 1, i32 %35
br label %94
37: ; preds = %24
%38 = getelementptr inbounds i32, i32* %12, i64 2
%39 = getelementptr inbounds i32, i32* %11, i64 2
%40 = load i32, i32* %39
%41 = load i32, i32* %38
%42 = icmp ne i32 %40, 0
%43 = icmp eq i32 %40, %41
%44 = select i1 %42, i1 %43, i1 false
br i1 %44, label %50, label %45
45: ; preds = %37
%46 = icmp sgt i32 %40, %41
%47 = icmp slt i32 %40, %41
%48 = sext i1 %47 to i32
%49 = select i1 %46, i32 1, i32 %48
br label %94
50: ; preds = %37
%51 = getelementptr inbounds i32, i32* %12, i64 3
%52 = getelementptr inbounds i32, i32* %11, i64 3
%53 = load i32, i32* %52
%54 = load i32, i32* %51
%55 = icmp ne i32 %53, 0
%56 = icmp eq i32 %53, %54
%57 = select i1 %55, i1 %56, i1 false
br i1 %57, label %63, label %58
58: ; preds = %50
%59 = icmp sgt i32 %53, %54
%60 = icmp slt i32 %53, %54
%61 = sext i1 %60 to i32
%62 = select i1 %59, i32 1, i32 %61
br label %94
63: ; preds = %50
%64 = getelementptr inbounds i32, i32* %12, i64 4
%65 = getelementptr inbounds i32, i32* %11, i64 4
%66 = add nsw i64 %13, -1
%67 = icmp eq i64 %66, 0
br i1 %67, label %68, label %10
68: ; preds = %63
%69 = and i64 %2, 3
br label %70
70: ; preds = %68, %3
%71 = phi i32* [ %8, %68 ], [ %0, %3 ]
%72 = phi i32* [ %9, %68 ], [ %1, %3 ]
%73 = phi i64 [ %69, %68 ], [ %2, %3 ]
%74 = icmp eq i64 %73, 0
br i1 %74, label %94, label %75
75: ; preds = %70, %89
%76 = phi i64 [ %92, %89 ], [ %73, %70 ]
%77 = phi i32* [ %90, %89 ], [ %72, %70 ]
%78 = phi i32* [ %91, %89 ], [ %71, %70 ]
%79 = load i32, i32* %78
%80 = load i32, i32* %77
%81 = icmp ne i32 %79, 0
%82 = icmp eq i32 %79, %80
%83 = select i1 %81, i1 %82, i1 false
br i1 %83, label %89, label %84
84: ; preds = %75
%85 = icmp sgt i32 %79, %80
%86 = icmp slt i32 %79, %80
%87 = sext i1 %86 to i32
%88 = select i1 %85, i32 1, i32 %87
br label %94
89: ; preds = %75
%90 = getelementptr inbounds i32, i32* %77, i64 1
%91 = getelementptr inbounds i32, i32* %78, i64 1
%92 = add i64 %76, -1
%93 = icmp eq i64 %92, 0
br i1 %93, label %94, label %75
94: ; preds = %89, %70, %58, %45, %32, %19, %84
%95 = phi i32 [ %88, %84 ], [ %62, %58 ], [ %49, %45 ], [ %36, %32 ], [ %23, %19 ], [ 0, %70 ], [ 0, %89 ]
ret i32 %95
}