int test_func(int a[100], char correct_val) {
  int i;
  char results[4] = {0};
#pragma acc data pcopy(a)
#pragma acc parallel loop
  for (i = 0; i < 100; i++) {
    a[i] = i;
  }
  for (i = 0; i < 100; i++) {
    if (a[i] != i)
      results[0] = 1;
  }
#pragma acc data pcopyin(a)
#pragma acc parallel loop
  for (i = 0; i < 100; i++) {
    a[i] = i + 1;
  }
  for (i = 0; i < 100; i++) {
    if (a[i] != i)
      results[1] = 1;
  }
#pragma acc data pcopyout(a)
#pragma acc parallel loop
  for (i = 0; i < 100; i++) {
    a[i] = i + 2;
  }
  for (i = 0; i < 100; i++) {
    if (a[i] != i + 2)
      results[2] = 1;
  }
#pragma acc data pcreate(a)
#pragma acc parallel loop
  for (i = 0; i < 100; i++) {
    a[i] = i + 3;
  }
  for (i = 0; i < 100; i++) {
    if (a[i] != i + 2)
      results[3] = 1;
  }
  for (i = 0; i < 4; i++) {
    if (results[i] != correct_val)
      return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<test_func>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %sil,%al
mov    %rdi,-0x10(%rbp)
mov    %al,-0x11(%rbp)
lea    -0x1c(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1030 <memset@plt>
movl   $0x0,-0x18(%rbp)
cmpl   $0x64,-0x18(%rbp)
jge    115f <test_func+0x4f>
mov    -0x18(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1139 <test_func+0x29>
movl   $0x0,-0x18(%rbp)
cmpl   $0x64,-0x18(%rbp)
jge    119b <test_func+0x8b>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x18(%rbp),%eax
je     1188 <test_func+0x78>
movb   $0x1,-0x1c(%rbp)
jmp    118d <test_func+0x7d>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1166 <test_func+0x56>
movl   $0x0,-0x18(%rbp)
cmpl   $0x64,-0x18(%rbp)
jge    11cb <test_func+0xbb>
mov    -0x18(%rbp),%edx
add    $0x1,%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11a2 <test_func+0x92>
movl   $0x0,-0x18(%rbp)
cmpl   $0x64,-0x18(%rbp)
jge    1207 <test_func+0xf7>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x18(%rbp),%eax
je     11f4 <test_func+0xe4>
movb   $0x1,-0x1b(%rbp)
jmp    11f9 <test_func+0xe9>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11d2 <test_func+0xc2>
movl   $0x0,-0x18(%rbp)
cmpl   $0x64,-0x18(%rbp)
jge    1237 <test_func+0x127>
mov    -0x18(%rbp),%edx
add    $0x2,%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    120e <test_func+0xfe>
movl   $0x0,-0x18(%rbp)
cmpl   $0x64,-0x18(%rbp)
jge    1278 <test_func+0x168>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
je     1265 <test_func+0x155>
movb   $0x1,-0x1a(%rbp)
jmp    126a <test_func+0x15a>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    123e <test_func+0x12e>
movl   $0x0,-0x18(%rbp)
cmpl   $0x64,-0x18(%rbp)
jge    12a8 <test_func+0x198>
mov    -0x18(%rbp),%edx
add    $0x3,%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    127f <test_func+0x16f>
movl   $0x0,-0x18(%rbp)
cmpl   $0x64,-0x18(%rbp)
jge    12e9 <test_func+0x1d9>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
je     12d6 <test_func+0x1c6>
movb   $0x1,-0x19(%rbp)
jmp    12db <test_func+0x1cb>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12af <test_func+0x19f>
movl   $0x0,-0x18(%rbp)
cmpl   $0x4,-0x18(%rbp)
jge    132e <test_func+0x21e>
movslq -0x18(%rbp),%rax
movsbl -0x1c(%rbp,%rax,1),%eax
movsbl -0x11(%rbp),%ecx
cmp    %ecx,%eax
je     131b <test_func+0x20b>
movl   $0x1,-0x4(%rbp)
jmp    1335 <test_func+0x225>
jmp    1320 <test_func+0x210>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12f0 <test_func+0x1e0>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_func>:
push   %rbp
push   %r14
push   %rbx
movaps 0xef5(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xefb(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0xf00(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0xf05(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movaps 0xf0a(%rip),%xmm0
movups %xmm0,0x40(%rdi)
movaps 0xf0f(%rip),%xmm0
movups %xmm0,0x50(%rdi)
movaps 0xf14(%rip),%xmm0
movups %xmm0,0x60(%rdi)
movaps 0xf19(%rip),%xmm0
movups %xmm0,0x70(%rdi)
movaps 0xf1e(%rip),%xmm0
movups %xmm0,0x80(%rdi)
movaps 0xf20(%rip),%xmm0
movups %xmm0,0x90(%rdi)
movaps 0xf22(%rip),%xmm0
movups %xmm0,0xa0(%rdi)
movaps 0xf24(%rip),%xmm0
movups %xmm0,0xb0(%rdi)
movaps 0xf26(%rip),%xmm0
movups %xmm0,0xc0(%rdi)
movaps 0xf28(%rip),%xmm0
movups %xmm0,0xd0(%rdi)
movaps 0xf2a(%rip),%xmm0
movups %xmm0,0xe0(%rdi)
movaps 0xf2c(%rip),%xmm0
movups %xmm0,0xf0(%rdi)
movaps 0xf2e(%rip),%xmm0
movups %xmm0,0x100(%rdi)
movaps 0xf30(%rip),%xmm0
movups %xmm0,0x110(%rdi)
movaps 0xf32(%rip),%xmm0
movups %xmm0,0x120(%rdi)
movaps 0xf34(%rip),%xmm0
movups %xmm0,0x130(%rdi)
movaps 0xf36(%rip),%xmm0
movups %xmm0,0x140(%rdi)
movaps 0xf38(%rip),%xmm0
movups %xmm0,0x150(%rdi)
movaps 0xf3a(%rip),%xmm0
movups %xmm0,0x160(%rdi)
movaps 0xf3c(%rip),%xmm0
movups %xmm0,0x170(%rdi)
movaps 0xf3e(%rip),%xmm0
movups %xmm0,0x180(%rdi)
xor    %eax,%eax
mov    $0x1,%r9d
xor    %r8d,%r8d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rdi,%rax,4),%edx
mov    0x4(%rdi,%rax,4),%r10d
xor    %rax,%rdx
lea    0x1(%rax),%rcx
xor    %r10,%rcx
or     %rdx,%rcx
mov    0x8(%rdi,%rax,4),%r10d
lea    0x2(%rax),%rdx
xor    %r10,%rdx
or     %rcx,%rdx
mov    0xc(%rdi,%rax,4),%r10d
lea    0x3(%rax),%r11
xor    %r10,%r11
mov    0x10(%rdi,%rax,4),%r10d
lea    0x4(%rax),%rcx
xor    %r10,%rcx
or     %r11,%rcx
movzbl %r8b,%r8d
or     %rdx,%rcx
cmovne %r9d,%r8d
add    $0x5,%rax
cmp    $0x64,%rax
jne    1260 <test_func+0x160>
movaps 0xed5(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xedb(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0xee0(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0xee5(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movaps 0xeea(%rip),%xmm0
movups %xmm0,0x40(%rdi)
movaps 0xeef(%rip),%xmm0
movups %xmm0,0x50(%rdi)
movaps 0xef4(%rip),%xmm0
movups %xmm0,0x60(%rdi)
movaps 0xef9(%rip),%xmm0
movups %xmm0,0x70(%rdi)
movaps 0xefe(%rip),%xmm0
movups %xmm0,0x80(%rdi)
movaps 0xf00(%rip),%xmm0
movups %xmm0,0x90(%rdi)
movaps 0xf02(%rip),%xmm0
movups %xmm0,0xa0(%rdi)
movaps 0xf04(%rip),%xmm0
movups %xmm0,0xb0(%rdi)
movaps 0xf06(%rip),%xmm0
movups %xmm0,0xc0(%rdi)
movaps 0xf08(%rip),%xmm0
movups %xmm0,0xd0(%rdi)
movaps 0xf0a(%rip),%xmm0
movups %xmm0,0xe0(%rdi)
movaps 0xf0c(%rip),%xmm0
movups %xmm0,0xf0(%rdi)
movaps 0xf0e(%rip),%xmm0
movups %xmm0,0x100(%rdi)
movaps 0xf10(%rip),%xmm0
movups %xmm0,0x110(%rdi)
movaps 0xf12(%rip),%xmm0
movups %xmm0,0x120(%rdi)
movaps 0xf14(%rip),%xmm0
movups %xmm0,0x130(%rdi)
movaps 0xf16(%rip),%xmm0
movups %xmm0,0x140(%rdi)
movaps 0xf18(%rip),%xmm0
movups %xmm0,0x150(%rdi)
movaps 0xf1a(%rip),%xmm0
movups %xmm0,0x160(%rdi)
movaps 0xf1c(%rip),%xmm0
movups %xmm0,0x170(%rdi)
movaps 0xf1e(%rip),%xmm0
movups %xmm0,0x180(%rdi)
xor    %eax,%eax
mov    $0x1,%r10d
xor    %r9d,%r9d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rdi,%rax,4),%edx
mov    0x4(%rdi,%rax,4),%r11d
xor    %rax,%rdx
lea    0x1(%rax),%rcx
xor    %r11,%rcx
or     %rdx,%rcx
mov    0x8(%rdi,%rax,4),%r11d
lea    0x2(%rax),%rdx
xor    %r11,%rdx
or     %rcx,%rdx
mov    0xc(%rdi,%rax,4),%r11d
lea    0x3(%rax),%rcx
xor    %r11,%rcx
mov    0x10(%rdi,%rax,4),%r11d
lea    0x4(%rax),%rbx
xor    %r11,%rbx
or     %rcx,%rbx
movzbl %r9b,%r9d
or     %rdx,%rbx
cmovne %r10d,%r9d
add    $0x5,%rax
cmp    $0x64,%rax
jne    1410 <test_func+0x310>
movaps 0xeb5(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xebb(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0xec0(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0xec5(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movaps 0xeca(%rip),%xmm0
movups %xmm0,0x40(%rdi)
movaps 0xecf(%rip),%xmm0
movups %xmm0,0x50(%rdi)
movaps 0xed4(%rip),%xmm0
movups %xmm0,0x60(%rdi)
movaps 0xed9(%rip),%xmm0
movups %xmm0,0x70(%rdi)
movaps 0xede(%rip),%xmm0
movups %xmm0,0x80(%rdi)
movaps 0xee0(%rip),%xmm0
movups %xmm0,0x90(%rdi)
movaps 0xee2(%rip),%xmm0
movups %xmm0,0xa0(%rdi)
movaps 0xee4(%rip),%xmm0
movups %xmm0,0xb0(%rdi)
movaps 0xee6(%rip),%xmm0
movups %xmm0,0xc0(%rdi)
movaps 0xee8(%rip),%xmm0
movups %xmm0,0xd0(%rdi)
movaps 0xeea(%rip),%xmm0
movups %xmm0,0xe0(%rdi)
movaps 0xeec(%rip),%xmm0
movups %xmm0,0xf0(%rdi)
movaps 0xeee(%rip),%xmm0
movups %xmm0,0x100(%rdi)
movaps 0xef0(%rip),%xmm0
movups %xmm0,0x110(%rdi)
movaps 0xef2(%rip),%xmm0
movups %xmm0,0x120(%rdi)
movaps 0xef4(%rip),%xmm0
movups %xmm0,0x130(%rdi)
movaps 0xef6(%rip),%xmm0
movups %xmm0,0x140(%rdi)
movaps 0xef8(%rip),%xmm0
movups %xmm0,0x150(%rdi)
movaps 0xefa(%rip),%xmm0
movups %xmm0,0x160(%rdi)
movaps 0xefc(%rip),%xmm0
movups %xmm0,0x170(%rdi)
movaps 0xefe(%rip),%xmm0
movups %xmm0,0x180(%rdi)
mov    $0x6,%eax
xor    %r14d,%r14d
mov    $0x1,%r10d
nopw   0x0(%rax,%rax,1)
mov    -0x18(%rdi,%rax,4),%ebx
mov    -0x14(%rdi,%rax,4),%r11d
lea    -0x4(%rax),%rcx
xor    %rbx,%rcx
lea    -0x3(%rax),%rbx
xor    %r11,%rbx
or     %rcx,%rbx
mov    -0x10(%rdi,%rax,4),%ecx
lea    -0x2(%rax),%rdx
xor    %rcx,%rdx
or     %rbx,%rdx
mov    -0xc(%rdi,%rax,4),%ecx
lea    -0x1(%rax),%rbx
xor    %rcx,%rbx
mov    -0x8(%rdi,%rax,4),%ecx
xor    %rax,%rcx
or     %rbx,%rcx
movzbl %r14b,%r14d
or     %rdx,%rcx
cmovne %r10d,%r14d
add    $0x5,%rax
cmp    $0x6a,%rax
jne    15c0 <test_func+0x4c0>
movaps 0xe97(%rip),%xmm0
movups %xmm0,(%rdi)
movaps 0xe9d(%rip),%xmm0
movups %xmm0,0x10(%rdi)
movaps 0xea2(%rip),%xmm0
movups %xmm0,0x20(%rdi)
movaps 0xea7(%rip),%xmm0
movups %xmm0,0x30(%rdi)
movaps 0xeac(%rip),%xmm0
movups %xmm0,0x40(%rdi)
movaps 0xeb1(%rip),%xmm0
movups %xmm0,0x50(%rdi)
movaps 0xeb6(%rip),%xmm0
movups %xmm0,0x60(%rdi)
movaps 0xebb(%rip),%xmm0
movups %xmm0,0x70(%rdi)
movaps 0xec0(%rip),%xmm0
movups %xmm0,0x80(%rdi)
movaps 0xec2(%rip),%xmm0
movups %xmm0,0x90(%rdi)
movaps 0xec4(%rip),%xmm0
movups %xmm0,0xa0(%rdi)
movaps 0xec6(%rip),%xmm0
movups %xmm0,0xb0(%rdi)
movaps 0xec8(%rip),%xmm0
movups %xmm0,0xc0(%rdi)
movaps 0xeca(%rip),%xmm0
movups %xmm0,0xd0(%rdi)
movaps 0xecc(%rip),%xmm0
movups %xmm0,0xe0(%rdi)
movaps 0xece(%rip),%xmm0
movups %xmm0,0xf0(%rdi)
movaps 0xed0(%rip),%xmm0
movups %xmm0,0x100(%rdi)
movaps 0xed2(%rip),%xmm0
movups %xmm0,0x110(%rdi)
movaps 0xed4(%rip),%xmm0
movups %xmm0,0x120(%rdi)
movaps 0xed6(%rip),%xmm0
movups %xmm0,0x130(%rdi)
movaps 0xed8(%rip),%xmm0
movups %xmm0,0x140(%rdi)
movaps 0xeda(%rip),%xmm0
movups %xmm0,0x150(%rdi)
movaps 0xedc(%rip),%xmm0
movups %xmm0,0x160(%rdi)
movaps 0xede(%rip),%xmm0
movups %xmm0,0x170(%rdi)
movaps 0xee0(%rip),%xmm0
movups %xmm0,0x180(%rdi)
mov    $0x6,%eax
xor    %ecx,%ecx
mov    $0x1,%r10d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    -0x18(%rdi,%rax,4),%edx
mov    -0x14(%rdi,%rax,4),%r11d
lea    -0x4(%rax),%rbx
xor    %rdx,%rbx
lea    -0x3(%rax),%rdx
xor    %r11,%rdx
or     %rbx,%rdx
mov    -0x10(%rdi,%rax,4),%ebx
lea    -0x2(%rax),%rbp
xor    %rbx,%rbp
or     %rdx,%rbp
mov    -0xc(%rdi,%rax,4),%edx
lea    -0x1(%rax),%rbx
xor    %rdx,%rbx
mov    -0x8(%rdi,%rax,4),%edx
xor    %rax,%rdx
or     %rbx,%rdx
movzbl %cl,%ecx
or     %rbp,%rdx
cmovne %r10d,%ecx
add    $0x5,%rax
cmp    $0x6a,%rax
jne    1770 <test_func+0x670>
xor    %sil,%r8b
xor    %sil,%r9b
or     %r8b,%r9b
xor    %sil,%r14b
or     %r9b,%r14b
xor    %sil,%cl
xor    %eax,%eax
or     %r14b,%cl
setne  %al
pop    %rbx
pop    %r14
pop    %rbp
ret

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

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