int check(int *b, int x) {
  int sum = 0, c_sum, k, i;
  int *pointer = b;
  for (i = 0; i < x; i++) {
    sum = sum + *(pointer + i);
  }
  c_sum = 0;
  for (i = 0; i < x; i++) {
    for (k = 0; k < x; k++) {
      c_sum = c_sum + *(pointer + k + (i * x));
    }
    if (c_sum != sum) {
      return 1;
    }
    c_sum = 0;
  }
  c_sum = 0;
  for (i = 0; i < x; i++) {
    for (k = 0; k < x; k++) {
      c_sum = c_sum + *(pointer + i + (k * x));
    }
    if (c_sum != sum) {
      return 1;
    }
    c_sum = 0;
  }
  c_sum = 0;
  for (i = 0; i < x; i++) {
    c_sum = c_sum + *(pointer + (i * (x + 1)));
  }
  if (c_sum != sum) {
    return 1;
  }
  c_sum = 0;
  for (i = 0; i < x; i++) {
    c_sum = c_sum + *(pointer + 2 + (i * (x - 1)));
  }
  if (c_sum != sum) {
    return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<check>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    114c <check+0x4c>
mov    -0x18(%rbp),%eax
mov    -0x30(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x18(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1121 <check+0x21>
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11d6 <check+0xd6>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11a9 <check+0xa9>
mov    -0x1c(%rbp),%eax
mov    -0x30(%rbp),%rcx
movslq -0x20(%rbp),%rdx
shl    $0x2,%rdx
add    %rdx,%rcx
mov    -0x24(%rbp),%edx
imul   -0x14(%rbp),%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    116d <check+0x6d>
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     11c1 <check+0xc1>
movl   $0x1,-0x4(%rbp)
jmp    1320 <check+0x220>
movl   $0x0,-0x1c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    115a <check+0x5a>
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1260 <check+0x160>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1233 <check+0x133>
mov    -0x1c(%rbp),%eax
mov    -0x30(%rbp),%rcx
movslq -0x24(%rbp),%rdx
shl    $0x2,%rdx
add    %rdx,%rcx
mov    -0x20(%rbp),%edx
imul   -0x14(%rbp),%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11f7 <check+0xf7>
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     124b <check+0x14b>
movl   $0x1,-0x4(%rbp)
jmp    1320 <check+0x220>
movl   $0x0,-0x1c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11e4 <check+0xe4>
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12a4 <check+0x1a4>
mov    -0x1c(%rbp),%eax
mov    -0x30(%rbp),%rcx
mov    -0x24(%rbp),%edx
mov    -0x14(%rbp),%esi
add    $0x1,%esi
imul   %esi,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    126e <check+0x16e>
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     12bc <check+0x1bc>
movl   $0x1,-0x4(%rbp)
jmp    1320 <check+0x220>
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1301 <check+0x201>
mov    -0x1c(%rbp),%eax
mov    -0x30(%rbp),%rcx
mov    -0x24(%rbp),%edx
mov    -0x14(%rbp),%esi
sub    $0x1,%esi
imul   %esi,%edx
movslq %edx,%rdx
add    0x8(%rcx,%rdx,4),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12ca <check+0x1ca>
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     1319 <check+0x219>
movl   $0x1,-0x4(%rbp)
jmp    1320 <check+0x220>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<check>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %esi,%esi
jle    1122 <check+0x22>
mov    %rdi,%r9
mov    %esi,%ecx
cmp    $0x8,%esi
jae    1134 <check+0x34>
xor    %eax,%eax
xor    %r15d,%r15d
jmp    1240 <check+0x140>
xor    %r15d,%r15d
xor    %edx,%edx
xor    %eax,%eax
cmp    %r15d,%edx
setne  %al
jmp    14b3 <check+0x3b3>
mov    %rsi,%rdi
mov    %ecx,%eax
and    $0xfffffff8,%eax
lea    -0x8(%rax),%rsi
mov    %rsi,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
mov    %edx,%ebx
and    $0x3,%ebx
cmp    $0x18,%rsi
jae    1165 <check+0x65>
pxor   %xmm0,%xmm0
xor    %ebp,%ebp
pxor   %xmm1,%xmm1
mov    %rdi,%rsi
jmp    11e1 <check+0xe1>
and    $0xfffffffffffffffc,%rdx
pxor   %xmm0,%xmm0
xor    %ebp,%ebp
pxor   %xmm1,%xmm1
mov    %rdi,%rsi
cs nopw 0x0(%rax,%rax,1)
movdqu (%r9,%rbp,4),%xmm2
paddd  %xmm0,%xmm2
movdqu 0x10(%r9,%rbp,4),%xmm0
paddd  %xmm1,%xmm0
movdqu 0x20(%r9,%rbp,4),%xmm1
movdqu 0x30(%r9,%rbp,4),%xmm3
movdqu 0x40(%r9,%rbp,4),%xmm4
paddd  %xmm1,%xmm4
paddd  %xmm2,%xmm4
movdqu 0x50(%r9,%rbp,4),%xmm2
paddd  %xmm3,%xmm2
paddd  %xmm0,%xmm2
movdqu 0x60(%r9,%rbp,4),%xmm0
paddd  %xmm4,%xmm0
movdqu 0x70(%r9,%rbp,4),%xmm1
paddd  %xmm2,%xmm1
add    $0x20,%rbp
add    $0xfffffffffffffffc,%rdx
jne    1180 <check+0x80>
test   %rbx,%rbx
je     121c <check+0x11c>
lea    (%r9,%rbp,4),%rdx
add    $0x10,%rdx
shl    $0x5,%rbx
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqu -0x10(%rdx,%rdi,1),%xmm2
paddd  %xmm2,%xmm0
movdqu (%rdx,%rdi,1),%xmm2
paddd  %xmm2,%xmm1
add    $0x20,%rdi
cmp    %rdi,%rbx
jne    1200 <check+0x100>
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%r15d
cmp    %rcx,%rax
je     124d <check+0x14d>
nopl   0x0(%rax)
add    (%r9,%rax,4),%r15d
add    $0x1,%rax
cmp    %rax,%rcx
jne    1240 <check+0x140>
test   %esi,%esi
jle    1484 <check+0x384>
mov    %ecx,%edi
and    $0xfffffff8,%edi
lea    -0x8(%rdi),%r10
mov    %r10,%r11
shr    $0x3,%r11
add    $0x1,%r11
mov    %r11d,%r14d
and    $0x3,%r14d
and    $0xfffffffffffffffc,%r11
lea    0x70(%r9),%rbx
lea    0x0(,%rcx,4),%r8
mov    %r14,%r13
shl    $0x5,%r13
xor    %r12d,%r12d
mov    %r9,%rbp
nopl   (%rax)
cmp    $0x8,%esi
jae    12a0 <check+0x1a0>
xor    %eax,%eax
xor    %edx,%edx
jmp    1380 <check+0x280>
xchg   %ax,%ax
pxor   %xmm0,%xmm0
cmp    $0x18,%r10
jae    12c0 <check+0x1c0>
xor    %eax,%eax
pxor   %xmm1,%xmm1
jmp    1329 <check+0x229>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r11,%rdx
xor    %eax,%eax
pxor   %xmm1,%xmm1
nopl   0x0(%rax)
movdqu -0x70(%rbx,%rax,4),%xmm2
paddd  %xmm0,%xmm2
movdqu -0x60(%rbx,%rax,4),%xmm0
paddd  %xmm1,%xmm0
movdqu -0x50(%rbx,%rax,4),%xmm1
movdqu -0x40(%rbx,%rax,4),%xmm3
movdqu -0x30(%rbx,%rax,4),%xmm4
paddd  %xmm1,%xmm4
paddd  %xmm2,%xmm4
movdqu -0x20(%rbx,%rax,4),%xmm2
paddd  %xmm3,%xmm2
paddd  %xmm0,%xmm2
movdqu -0x10(%rbx,%rax,4),%xmm0
paddd  %xmm4,%xmm0
movdqu (%rbx,%rax,4),%xmm1
paddd  %xmm2,%xmm1
add    $0x20,%rax
add    $0xfffffffffffffffc,%rdx
jne    12d0 <check+0x1d0>
test   %r14,%r14
je     135c <check+0x25c>
lea    0x0(,%rax,4),%rax
add    %rbp,%rax
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movdqu (%rax,%rdx,1),%xmm2
paddd  %xmm2,%xmm0
movdqu 0x10(%rax,%rdx,1),%xmm2
paddd  %xmm2,%xmm1
add    $0x20,%rdx
cmp    %rdx,%r13
jne    1340 <check+0x240>
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%edx
mov    %rdi,%rax
cmp    %rcx,%rdi
je     138d <check+0x28d>
xchg   %ax,%ax
add    0x0(%rbp,%rax,4),%edx
add    $0x1,%rax
cmp    %rax,%rcx
jne    1380 <check+0x280>
mov    $0x1,%eax
cmp    %r15d,%edx
jne    14b3 <check+0x3b3>
add    $0x1,%r12
add    %r8,%rbx
add    %r8,%rbp
cmp    %rcx,%r12
jne    1290 <check+0x190>
test   %esi,%esi
jle    1484 <check+0x384>
mov    %rsi,-0x10(%rsp)
lea    -0x1(%rcx),%rdx
mov    %rdx,-0x8(%rsp)
mov    %ecx,%esi
and    $0x3,%esi
mov    %ecx,%r12d
and    $0xfffffffc,%r12d
mov    %rcx,%rdx
shl    $0x4,%rdx
lea    (%r8,%r8,2),%r13
xor    %r11d,%r11d
mov    %r9,%r10
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmpq   $0x3,-0x8(%rsp)
jae    1400 <check+0x300>
xor    %ebp,%ebp
xor    %ebx,%ebx
jmp    142b <check+0x32b>
xchg   %ax,%ax
xor    %ebp,%ebp
mov    %r10,%r14
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
add    (%r14),%ebx
add    (%r14,%rcx,4),%ebx
add    (%r14,%rcx,8),%ebx
add    (%r14,%r13,1),%ebx
add    $0x4,%rbp
add    %rdx,%r14
cmp    %rbp,%r12
jne    1410 <check+0x310>
test   %rsi,%rsi
je     144c <check+0x34c>
imul   %rcx,%rbp
lea    (%r10,%rbp,4),%rbp
mov    %rsi,%rdi
nopl   0x0(%rax,%rax,1)
add    0x0(%rbp),%ebx
add    %r8,%rbp
add    $0xffffffffffffffff,%rdi
jne    1440 <check+0x340>
cmp    %r15d,%ebx
jne    14b3 <check+0x3b3>
add    $0x1,%r11
add    $0x4,%r10
cmp    %rcx,%r11
jne    13f0 <check+0x2f0>
mov    -0x10(%rsp),%rsi
test   %esi,%esi
jle    1484 <check+0x384>
lea    0x1(%rsi),%eax
mov    %ecx,%edx
and    $0x3,%edx
cmpq   $0x3,-0x8(%rsp)
jae    1530 <check+0x430>
xor    %ebx,%ebx
xor    %ebp,%ebp
jmp    1578 <check+0x478>
xor    %ebp,%ebp
mov    $0x1,%eax
cmp    %r15d,%ebp
jne    14b3 <check+0x3b3>
test   %esi,%esi
jle    1125 <check+0x25>
add    $0xffffffff,%esi
lea    -0x1(%rcx),%rdx
mov    %ecx,%eax
and    $0x3,%eax
cmp    $0x3,%rdx
jae    14be <check+0x3be>
xor    %ebp,%ebp
xor    %edx,%edx
mov    %rsi,%rdi
jmp    14f7 <check+0x3f7>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0x8(%r9),%rbx
and    $0xfffffffc,%ecx
mov    %rsi,%r8
shl    $0x4,%r8
lea    0x0(,%rsi,4),%rdx
mov    %rsi,%rdi
lea    (%rdx,%rdx,2),%rsi
xor    %ebp,%ebp
xor    %edx,%edx
nop
add    (%rbx),%edx
add    (%rbx,%rdi,4),%edx
add    (%rbx,%rdi,8),%edx
add    (%rbx,%rsi,1),%edx
add    $0x4,%rbp
add    %r8,%rbx
cmp    %rbp,%rcx
jne    14e0 <check+0x3e0>
test   %rax,%rax
je     1127 <check+0x27>
mov    %rdi,%rsi
imul   %rdi,%rbp
lea    (%r9,%rbp,4),%rcx
add    $0x8,%rcx
shl    $0x2,%rsi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    (%rcx),%edx
add    %rsi,%rcx
add    $0xffffffffffffffff,%rax
jne    1520 <check+0x420>
jmp    1127 <check+0x27>
mov    %ecx,%r8d
and    $0xfffffffc,%r8d
mov    %rax,%rsi
shl    $0x4,%rsi
lea    0x0(,%rax,4),%rdi
lea    (%rdi,%rdi,2),%r11
xor    %ebx,%ebx
mov    %r9,%rdi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    (%rdi),%ebp
add    (%rdi,%rax,4),%ebp
add    (%rdi,%rax,8),%ebp
add    (%rdi,%r11,1),%ebp
add    $0x4,%rbx
add    %rsi,%rdi
cmp    %rbx,%r8
jne    1560 <check+0x460>
test   %rdx,%rdx
mov    -0x10(%rsp),%rsi
je     1486 <check+0x386>
imul   %rax,%rbx
lea    (%r9,%rbx,4),%rdi
shl    $0x2,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    (%rdi),%ebp
add    %rax,%rdi
add    $0xffffffffffffffff,%rdx
jne    15a0 <check+0x4a0>
jmp    1486 <check+0x386>

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

LLVM IR (-O2):
define i32 @check(i32* nocapture %0, i32 %1) {
%3 = icmp sgt i32 %1, 0
br i1 %3, label %4, label %371
4: ; preds = %2
%5 = zext i32 %1 to i64
%6 = icmp ult i32 %1, 8
br i1 %6, label %88, label %7
7: ; preds = %4
%8 = and i64 %5, 4294967288
%9 = add nsw i64 %8, -8
%10 = lshr exact i64 %9, 3
%11 = add nuw nsw i64 %10, 1
%12 = and i64 %11, 3
%13 = icmp ult i64 %9, 24
br i1 %13, label %59, label %14
14: ; preds = %7
%15 = and i64 %11, 4611686018427387900
br label %16
16: ; preds = %16, %14
%17 = phi i64 [ 0, %14 ], [ %56, %16 ]
%18 = phi <4 x i32> [ zeroinitializer, %14 ], [ %54, %16 ]
%19 = phi <4 x i32> [ zeroinitializer, %14 ], [ %55, %16 ]
%20 = phi i64 [ 0, %14 ], [ %57, %16 ]
%21 = getelementptr inbounds i32, i32* %0, i64 %17
%22 = bitcast i32* %21 to <4 x i32>*
%23 = load <4 x i32>, <4 x i32>* %22
%24 = getelementptr inbounds i32, i32* %21, i64 4
%25 = bitcast i32* %24 to <4 x i32>*
%26 = load <4 x i32>, <4 x i32>* %25
%27 = add <4 x i32> %23, %18
%28 = add <4 x i32> %26, %19
%29 = or i64 %17, 8
%30 = getelementptr inbounds i32, i32* %0, i64 %29
%31 = bitcast i32* %30 to <4 x i32>*
%32 = load <4 x i32>, <4 x i32>* %31
%33 = getelementptr inbounds i32, i32* %30, i64 4
%34 = bitcast i32* %33 to <4 x i32>*
%35 = load <4 x i32>, <4 x i32>* %34
%36 = add <4 x i32> %32, %27
%37 = add <4 x i32> %35, %28
%38 = or i64 %17, 16
%39 = getelementptr inbounds i32, i32* %0, i64 %38
%40 = bitcast i32* %39 to <4 x i32>*
%41 = load <4 x i32>, <4 x i32>* %40
%42 = getelementptr inbounds i32, i32* %39, i64 4
%43 = bitcast i32* %42 to <4 x i32>*
%44 = load <4 x i32>, <4 x i32>* %43
%45 = add <4 x i32> %41, %36
%46 = add <4 x i32> %44, %37
%47 = or i64 %17, 24
%48 = getelementptr inbounds i32, i32* %0, i64 %47
%49 = bitcast i32* %48 to <4 x i32>*
%50 = load <4 x i32>, <4 x i32>* %49
%51 = getelementptr inbounds i32, i32* %48, i64 4
%52 = bitcast i32* %51 to <4 x i32>*
%53 = load <4 x i32>, <4 x i32>* %52
%54 = add <4 x i32> %50, %45
%55 = add <4 x i32> %53, %46
%56 = add nuw i64 %17, 32
%57 = add i64 %20, 4
%58 = icmp eq i64 %57, %15
br i1 %58, label %59, label %16
59: ; preds = %16, %7
%60 = phi <4 x i32> [ undef, %7 ], [ %54, %16 ]
%61 = phi <4 x i32> [ undef, %7 ], [ %55, %16 ]
%62 = phi i64 [ 0, %7 ], [ %56, %16 ]
%63 = phi <4 x i32> [ zeroinitializer, %7 ], [ %54, %16 ]
%64 = phi <4 x i32> [ zeroinitializer, %7 ], [ %55, %16 ]
%65 = icmp eq i64 %12, 0
br i1 %65, label %82, label %66
66: ; preds = %59, %66
%67 = phi i64 [ %79, %66 ], [ %62, %59 ]
%68 = phi <4 x i32> [ %77, %66 ], [ %63, %59 ]
%69 = phi <4 x i32> [ %78, %66 ], [ %64, %59 ]
%70 = phi i64 [ %80, %66 ], [ 0, %59 ]
%71 = getelementptr inbounds i32, i32* %0, i64 %67
%72 = bitcast i32* %71 to <4 x i32>*
%73 = load <4 x i32>, <4 x i32>* %72
%74 = getelementptr inbounds i32, i32* %71, i64 4
%75 = bitcast i32* %74 to <4 x i32>*
%76 = load <4 x i32>, <4 x i32>* %75
%77 = add <4 x i32> %73, %68
%78 = add <4 x i32> %76, %69
%79 = add nuw i64 %67, 8
%80 = add i64 %70, 1
%81 = icmp eq i64 %80, %12
br i1 %81, label %82, label %66
82: ; preds = %66, %59
%83 = phi <4 x i32> [ %60, %59 ], [ %77, %66 ]
%84 = phi <4 x i32> [ %61, %59 ], [ %78, %66 ]
%85 = add <4 x i32> %84, %83
%86 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %85)
%87 = icmp eq i64 %8, %5
br i1 %87, label %91, label %88
88: ; preds = %4, %82
%89 = phi i64 [ 0, %4 ], [ %8, %82 ]
%90 = phi i32 [ 0, %4 ], [ %86, %82 ]
br label %107
91: ; preds = %107, %82
%92 = phi i32 [ %86, %82 ], [ %112, %107 ]
br i1 %3, label %93, label %316
93: ; preds = %91
%94 = zext i32 %1 to i64
%95 = zext i32 %1 to i64
%96 = and i64 %5, 4294967288
%97 = add nsw i64 %96, -8
%98 = lshr exact i64 %97, 3
%99 = add nuw nsw i64 %98, 1
%100 = icmp ult i32 %1, 8
%101 = and i64 %5, 4294967288
%102 = and i64 %99, 3
%103 = icmp ult i64 %97, 24
%104 = and i64 %99, 4611686018427387900
%105 = icmp eq i64 %102, 0
%106 = icmp eq i64 %101, %5
br label %117
107: ; preds = %88, %107
%108 = phi i64 [ %113, %107 ], [ %89, %88 ]
%109 = phi i32 [ %112, %107 ], [ %90, %88 ]
%110 = getelementptr inbounds i32, i32* %0, i64 %108
%111 = load i32, i32* %110
%112 = add nsw i32 %111, %109
%113 = add nuw nsw i64 %108, 1
%114 = icmp eq i64 %113, %5
br i1 %114, label %91, label %107
115: ; preds = %212
%116 = icmp eq i64 %215, %95
br i1 %116, label %195, label %117
117: ; preds = %115, %93
%118 = phi i64 [ 0, %93 ], [ %215, %115 ]
%119 = mul nsw i64 %118, %94
%120 = getelementptr inbounds i32, i32* %0, i64 %119
br i1 %100, label %192, label %121
121: ; preds = %117
br i1 %103, label %165, label %122
122: ; preds = %121, %122
%123 = phi i64 [ %162, %122 ], [ 0, %121 ]
%124 = phi <4 x i32> [ %160, %122 ], [ zeroinitializer, %121 ]
%125 = phi <4 x i32> [ %161, %122 ], [ zeroinitializer, %121 ]
%126 = phi i64 [ %163, %122 ], [ 0, %121 ]
%127 = getelementptr inbounds i32, i32* %120, i64 %123
%128 = bitcast i32* %127 to <4 x i32>*
%129 = load <4 x i32>, <4 x i32>* %128
%130 = getelementptr inbounds i32, i32* %127, i64 4
%131 = bitcast i32* %130 to <4 x i32>*
%132 = load <4 x i32>, <4 x i32>* %131
%133 = add <4 x i32> %129, %124
%134 = add <4 x i32> %132, %125
%135 = or i64 %123, 8
%136 = getelementptr inbounds i32, i32* %120, i64 %135
%137 = bitcast i32* %136 to <4 x i32>*
%138 = load <4 x i32>, <4 x i32>* %137
%139 = getelementptr inbounds i32, i32* %136, i64 4
%140 = bitcast i32* %139 to <4 x i32>*
%141 = load <4 x i32>, <4 x i32>* %140
%142 = add <4 x i32> %138, %133
%143 = add <4 x i32> %141, %134
%144 = or i64 %123, 16
%145 = getelementptr inbounds i32, i32* %120, i64 %144
%146 = bitcast i32* %145 to <4 x i32>*
%147 = load <4 x i32>, <4 x i32>* %146
%148 = getelementptr inbounds i32, i32* %145, i64 4
%149 = bitcast i32* %148 to <4 x i32>*
%150 = load <4 x i32>, <4 x i32>* %149
%151 = add <4 x i32> %147, %142
%152 = add <4 x i32> %150, %143
%153 = or i64 %123, 24
%154 = getelementptr inbounds i32, i32* %120, i64 %153
%155 = bitcast i32* %154 to <4 x i32>*
%156 = load <4 x i32>, <4 x i32>* %155
%157 = getelementptr inbounds i32, i32* %154, i64 4
%158 = bitcast i32* %157 to <4 x i32>*
%159 = load <4 x i32>, <4 x i32>* %158
%160 = add <4 x i32> %156, %151
%161 = add <4 x i32> %159, %152
%162 = add nuw i64 %123, 32
%163 = add i64 %126, 4
%164 = icmp eq i64 %163, %104
br i1 %164, label %165, label %122
165: ; preds = %122, %121
%166 = phi <4 x i32> [ undef, %121 ], [ %160, %122 ]
%167 = phi <4 x i32> [ undef, %121 ], [ %161, %122 ]
%168 = phi i64 [ 0, %121 ], [ %162, %122 ]
%169 = phi <4 x i32> [ zeroinitializer, %121 ], [ %160, %122 ]
%170 = phi <4 x i32> [ zeroinitializer, %121 ], [ %161, %122 ]
br i1 %105, label %187, label %171
171: ; preds = %165, %171
%172 = phi i64 [ %184, %171 ], [ %168, %165 ]
%173 = phi <4 x i32> [ %182, %171 ], [ %169, %165 ]
%174 = phi <4 x i32> [ %183, %171 ], [ %170, %165 ]
%175 = phi i64 [ %185, %171 ], [ 0, %165 ]
%176 = getelementptr inbounds i32, i32* %120, i64 %172
%177 = bitcast i32* %176 to <4 x i32>*
%178 = load <4 x i32>, <4 x i32>* %177
%179 = getelementptr inbounds i32, i32* %176, i64 4
%180 = bitcast i32* %179 to <4 x i32>*
%181 = load <4 x i32>, <4 x i32>* %180
%182 = add <4 x i32> %178, %173
%183 = add <4 x i32> %181, %174
%184 = add nuw i64 %172, 8
%185 = add i64 %175, 1
%186 = icmp eq i64 %185, %102
br i1 %186, label %187, label %171
187: ; preds = %171, %165
%188 = phi <4 x i32> [ %166, %165 ], [ %182, %171 ]
%189 = phi <4 x i32> [ %167, %165 ], [ %183, %171 ]
%190 = add <4 x i32> %189, %188
%191 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %190)
br i1 %106, label %212, label %192
192: ; preds = %117, %187
%193 = phi i64 [ 0, %117 ], [ %101, %187 ]
%194 = phi i32 [ 0, %117 ], [ %191, %187 ]
br label %204
195: ; preds = %115
br i1 %3, label %196, label %316
196: ; preds = %195
%197 = zext i32 %1 to i64
%198 = zext i32 %1 to i64
%199 = add nsw i64 %5, -1
%200 = and i64 %5, 3
%201 = icmp ult i64 %199, 3
%202 = and i64 %5, 4294967292
%203 = icmp eq i64 %200, 0
br label %218
204: ; preds = %192, %204
%205 = phi i64 [ %210, %204 ], [ %193, %192 ]
%206 = phi i32 [ %209, %204 ], [ %194, %192 ]
%207 = getelementptr inbounds i32, i32* %120, i64 %205
%208 = load i32, i32* %207
%209 = add nsw i32 %208, %206
%210 = add nuw nsw i64 %205, 1
%211 = icmp eq i64 %210, %95
br i1 %211, label %212, label %204
212: ; preds = %204, %187
%213 = phi i32 [ %191, %187 ], [ %209, %204 ]
%214 = icmp eq i32 %213, %92
%215 = add nuw nsw i64 %118, 1
br i1 %214, label %115, label %376
216: ; preds = %270
%217 = icmp eq i64 %273, %198
br i1 %217, label %221, label %218
218: ; preds = %216, %196
%219 = phi i64 [ 0, %196 ], [ %273, %216 ]
%220 = getelementptr inbounds i32, i32* %0, i64 %219
br i1 %201, label %255, label %229
221: ; preds = %216
br i1 %3, label %222, label %316
222: ; preds = %221
%223 = add nuw nsw i32 %1, 1
%224 = zext i32 %223 to i64
%225 = and i64 %5, 3
%226 = icmp ult i64 %199, 3
br i1 %226, label %300, label %227
227: ; preds = %222
%228 = and i64 %5, 4294967292
br label %274
229: ; preds = %218, %229
%230 = phi i64 [ %252, %229 ], [ 0, %218 ]
%231 = phi i32 [ %251, %229 ], [ 0, %218 ]
%232 = phi i64 [ %253, %229 ], [ 0, %218 ]
%233 = mul nsw i64 %230, %197
%234 = getelementptr inbounds i32, i32* %220, i64 %233
%235 = load i32, i32* %234
%236 = add nsw i32 %235, %231
%237 = or i64 %230, 1
%238 = mul nsw i64 %237, %197
%239 = getelementptr inbounds i32, i32* %220, i64 %238
%240 = load i32, i32* %239
%241 = add nsw i32 %240, %236
%242 = or i64 %230, 2
%243 = mul nsw i64 %242, %197
%244 = getelementptr inbounds i32, i32* %220, i64 %243
%245 = load i32, i32* %244
%246 = add nsw i32 %245, %241
%247 = or i64 %230, 3
%248 = mul nsw i64 %247, %197
%249 = getelementptr inbounds i32, i32* %220, i64 %248
%250 = load i32, i32* %249
%251 = add nsw i32 %250, %246
%252 = add nuw nsw i64 %230, 4
%253 = add i64 %232, 4
%254 = icmp eq i64 %253, %202
br i1 %254, label %255, label %229
255: ; preds = %229, %218
%256 = phi i32 [ undef, %218 ], [ %251, %229 ]
%257 = phi i64 [ 0, %218 ], [ %252, %229 ]
%258 = phi i32 [ 0, %218 ], [ %251, %229 ]
br i1 %203, label %270, label %259
259: ; preds = %255, %259
%260 = phi i64 [ %267, %259 ], [ %257, %255 ]
%261 = phi i32 [ %266, %259 ], [ %258, %255 ]
%262 = phi i64 [ %268, %259 ], [ 0, %255 ]
%263 = mul nsw i64 %260, %197
%264 = getelementptr inbounds i32, i32* %220, i64 %263
%265 = load i32, i32* %264
%266 = add nsw i32 %265, %261
%267 = add nuw nsw i64 %260, 1
%268 = add i64 %262, 1
%269 = icmp eq i64 %268, %200
br i1 %269, label %270, label %259
270: ; preds = %259, %255
%271 = phi i32 [ %256, %255 ], [ %266, %259 ]
%272 = icmp eq i32 %271, %92
%273 = add nuw nsw i64 %219, 1
br i1 %272, label %216, label %376
274: ; preds = %274, %227
%275 = phi i64 [ 0, %227 ], [ %297, %274 ]
%276 = phi i32 [ 0, %227 ], [ %296, %274 ]
%277 = phi i64 [ 0, %227 ], [ %298, %274 ]
%278 = mul nsw i64 %275, %224
%279 = getelementptr inbounds i32, i32* %0, i64 %278
%280 = load i32, i32* %279
%281 = add nsw i32 %280, %276
%282 = or i64 %275, 1
%283 = mul nsw i64 %282, %224
%284 = getelementptr inbounds i32, i32* %0, i64 %283
%285 = load i32, i32* %284
%286 = add nsw i32 %285, %281
%287 = or i64 %275, 2
%288 = mul nsw i64 %287, %224
%289 = getelementptr inbounds i32, i32* %0, i64 %288
%290 = load i32, i32* %289
%291 = add nsw i32 %290, %286
%292 = or i64 %275, 3
%293 = mul nsw i64 %292, %224
%294 = getelementptr inbounds i32, i32* %0, i64 %293
%295 = load i32, i32* %294
%296 = add nsw i32 %295, %291
%297 = add nuw nsw i64 %275, 4
%298 = add i64 %277, 4
%299 = icmp eq i64 %298, %228
br i1 %299, label %300, label %274
300: ; preds = %274, %222
%301 = phi i32 [ undef, %222 ], [ %296, %274 ]
%302 = phi i64 [ 0, %222 ], [ %297, %274 ]
%303 = phi i32 [ 0, %222 ], [ %296, %274 ]
%304 = icmp eq i64 %225, 0
br i1 %304, label %316, label %305
305: ; preds = %300, %305
%306 = phi i64 [ %313, %305 ], [ %302, %300 ]
%307 = phi i32 [ %312, %305 ], [ %303, %300 ]
%308 = phi i64 [ %314, %305 ], [ 0, %300 ]
%309 = mul nsw i64 %306, %224
%310 = getelementptr inbounds i32, i32* %0, i64 %309
%311 = load i32, i32* %310
%312 = add nsw i32 %311, %307
%313 = add nuw nsw i64 %306, 1
%314 = add i64 %308, 1
%315 = icmp eq i64 %314, %225
br i1 %315, label %316, label %305
316: ; preds = %300, %305, %91, %195, %221
%317 = phi i32 [ 0, %221 ], [ 0, %195 ], [ 0, %91 ], [ %301, %300 ], [ %312, %305 ]
%318 = icmp eq i32 %317, %92
br i1 %318, label %319, label %376
319: ; preds = %316
br i1 %3, label %320, label %371
320: ; preds = %319
%321 = getelementptr inbounds i32, i32* %0, i64 2
%322 = add nsw i32 %1, -1
%323 = zext i32 %322 to i64
%324 = add nsw i64 %5, -1
%325 = and i64 %5, 3
%326 = icmp ult i64 %324, 3
br i1 %326, label %355, label %327
327: ; preds = %320
%328 = and i64 %5, 4294967292
br label %329
329: ; preds = %329, %327
%330 = phi i64 [ 0, %327 ], [ %352, %329 ]
%331 = phi i32 [ 0, %327 ], [ %351, %329 ]
%332 = phi i64 [ 0, %327 ], [ %353, %329 ]
%333 = mul nsw i64 %330, %323
%334 = getelementptr inbounds i32, i32* %321, i64 %333
%335 = load i32, i32* %334
%336 = add nsw i32 %335, %331
%337 = or i64 %330, 1
%338 = mul nsw i64 %337, %323
%339 = getelementptr inbounds i32, i32* %321, i64 %338
%340 = load i32, i32* %339
%341 = add nsw i32 %340, %336
%342 = or i64 %330, 2
%343 = mul nsw i64 %342, %323
%344 = getelementptr inbounds i32, i32* %321, i64 %343
%345 = load i32, i32* %344
%346 = add nsw i32 %345, %341
%347 = or i64 %330, 3
%348 = mul nsw i64 %347, %323
%349 = getelementptr inbounds i32, i32* %321, i64 %348
%350 = load i32, i32* %349
%351 = add nsw i32 %350, %346
%352 = add nuw nsw i64 %330, 4
%353 = add i64 %332, 4
%354 = icmp eq i64 %353, %328
br i1 %354, label %355, label %329
355: ; preds = %329, %320
%356 = phi i32 [ undef, %320 ], [ %351, %329 ]
%357 = phi i64 [ 0, %320 ], [ %352, %329 ]
%358 = phi i32 [ 0, %320 ], [ %351, %329 ]
%359 = icmp eq i64 %325, 0
br i1 %359, label %371, label %360
360: ; preds = %355, %360
%361 = phi i64 [ %368, %360 ], [ %357, %355 ]
%362 = phi i32 [ %367, %360 ], [ %358, %355 ]
%363 = phi i64 [ %369, %360 ], [ 0, %355 ]
%364 = mul nsw i64 %361, %323
%365 = getelementptr inbounds i32, i32* %321, i64 %364
%366 = load i32, i32* %365
%367 = add nsw i32 %366, %362
%368 = add nuw nsw i64 %361, 1
%369 = add i64 %363, 1
%370 = icmp eq i64 %369, %325
br i1 %370, label %371, label %360
371: ; preds = %355, %360, %2, %319
%372 = phi i32 [ %92, %319 ], [ 0, %2 ], [ %92, %360 ], [ %92, %355 ]
%373 = phi i32 [ 0, %319 ], [ 0, %2 ], [ %356, %355 ], [ %367, %360 ]
%374 = icmp ne i32 %373, %372
%375 = zext i1 %374 to i32
br label %376
376: ; preds = %212, %270, %371, %316
%377 = phi i32 [ 1, %316 ], [ %375, %371 ], [ 1, %270 ], [ 1, %212 ]
ret i32 %377
}