#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 */

/* Variables and functions */
int /*<<< orphan*/ printf(char *);
int main() {
  int array_1d[10];
  int array_2d[10][20];
  int i, j;
  for (i = 0; i < 10; i++) {
    array_1d[i] = 0;
    for (j = 0; j < 20; j++) {
      array_2d[i][j] = 0;
    }
  }
#pragma acc data create(array_1d, array_2d)
  {
#pragma acc update device(array_1d)
#pragma acc update device(array_2d)
#pragma acc parallel loop
    for (i = 0; i < 10; i++)
      array_1d[i] += i;
#pragma acc parallel loop collapse(2)
    for (i = 0; i < 10; i++) {
      for (j = 0; j < 20; j++) {
        array_2d[i][j] += i * 10 + j;
      }
    }
#pragma acc update host(array_2d)
#pragma acc update host(array_1d)
  }
  for (i = 0; i < 10; i++) {
    if (array_1d[i] != i)
      return 1;
  }
  for (i = 0; i < 10; i++) {
    for (j = 0; j < 20; j++) {
      if (array_2d[i][j] != i * 10 + j)
        return 2;
    }
  }
  printf("PASS\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x360,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x354(%rbp)
cmpl   $0xa,-0x354(%rbp)
jge    11af <main+0x9f>
movslq -0x354(%rbp),%rax
movl   $0x0,-0x30(%rbp,%rax,4)
movl   $0x0,-0x358(%rbp)
cmpl   $0x14,-0x358(%rbp)
jge    1196 <main+0x86>
movslq -0x354(%rbp),%rcx
lea    -0x350(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x358(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x358(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x358(%rbp)
jmp    1152 <main+0x42>
jmp    119b <main+0x8b>
mov    -0x354(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x354(%rbp)
jmp    112c <main+0x1c>
movl   $0x0,-0x354(%rbp)
cmpl   $0xa,-0x354(%rbp)
jge    11ef <main+0xdf>
mov    -0x354(%rbp),%ecx
movslq -0x354(%rbp),%rax
add    -0x30(%rbp,%rax,4),%ecx
mov    %ecx,-0x30(%rbp,%rax,4)
mov    -0x354(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x354(%rbp)
jmp    11b9 <main+0xa9>
movl   $0x0,-0x354(%rbp)
cmpl   $0xa,-0x354(%rbp)
jge    1279 <main+0x169>
movl   $0x0,-0x358(%rbp)
cmpl   $0x14,-0x358(%rbp)
jge    1260 <main+0x150>
imul   $0xa,-0x354(%rbp),%edx
add    -0x358(%rbp),%edx
movslq -0x354(%rbp),%rcx
lea    -0x350(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x358(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x358(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x358(%rbp)
jmp    1210 <main+0x100>
jmp    1265 <main+0x155>
mov    -0x354(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x354(%rbp)
jmp    11f9 <main+0xe9>
movl   $0x0,-0x354(%rbp)
cmpl   $0xa,-0x354(%rbp)
jge    12cc <main+0x1bc>
movslq -0x354(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
cmp    -0x354(%rbp),%eax
je     12b3 <main+0x1a3>
movl   $0x1,-0x4(%rbp)
jmp    137f <main+0x26f>
jmp    12b8 <main+0x1a8>
mov    -0x354(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x354(%rbp)
jmp    1283 <main+0x173>
movl   $0x0,-0x354(%rbp)
cmpl   $0xa,-0x354(%rbp)
jge    136c <main+0x25c>
movl   $0x0,-0x358(%rbp)
cmpl   $0x14,-0x358(%rbp)
jge    1353 <main+0x243>
movslq -0x354(%rbp),%rcx
lea    -0x350(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x358(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
imul   $0xa,-0x354(%rbp),%ecx
add    -0x358(%rbp),%ecx
cmp    %ecx,%eax
je     133a <main+0x22a>
movl   $0x2,-0x4(%rbp)
jmp    137f <main+0x26f>
jmp    133f <main+0x22f>
mov    -0x358(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x358(%rbp)
jmp    12ed <main+0x1dd>
jmp    1358 <main+0x248>
mov    -0x354(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x354(%rbp)
jmp    12d6 <main+0x1c6>
lea    0xc8d(%rip),%rdi
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x360,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x320,%rsp
mov    %rsp,%rdi
xor    %ebx,%ebx
mov    $0x320,%edx
xor    %esi,%esi
call   1040 <memset@plt>
movdqa 0xebe(%rip),%xmm8
movdqa 0xec6(%rip),%xmm1
movdqa 0xece(%rip),%xmm2
movdqa 0xed6(%rip),%xmm3
movdqa 0xede(%rip),%xmm4
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movd   %ebx,%xmm5
lea    0x1(%rbx),%eax
pshufd $0x50,%xmm5,%xmm6
paddd  %xmm8,%xmm6
movd   %eax,%xmm7
pshufd $0x0,%xmm5,%xmm0
punpckldq %xmm7,%xmm5
punpcklqdq %xmm6,%xmm5
paddd  (%rsp,%rbx,8),%xmm5
movdqa %xmm5,(%rsp,%rbx,8)
movdqa 0x10(%rsp,%rbx,8),%xmm5
paddd  %xmm0,%xmm5
paddd  %xmm1,%xmm5
movdqa %xmm5,0x10(%rsp,%rbx,8)
movdqa 0x20(%rsp,%rbx,8),%xmm5
paddd  %xmm0,%xmm5
paddd  %xmm2,%xmm5
movdqa %xmm5,0x20(%rsp,%rbx,8)
movdqa 0x30(%rsp,%rbx,8),%xmm5
paddd  %xmm0,%xmm5
paddd  %xmm3,%xmm5
movdqa %xmm5,0x30(%rsp,%rbx,8)
paddd  0x40(%rsp,%rbx,8),%xmm0
paddd  %xmm4,%xmm0
movdqa %xmm0,0x40(%rsp,%rbx,8)
add    $0xa,%rbx
cmp    $0x64,%rbx
jne    1170 <main+0x50>
mov    $0x13,%ecx
mov    $0x2,%eax
lea    -0x13(%rcx),%rdx
mov    -0x98(%rsp,%rcx,8),%esi
cmp    %rsi,%rdx
jne    135e <main+0x23e>
mov    -0x94(%rsp,%rcx,8),%edx
lea    -0x12(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x90(%rsp,%rcx,8),%edx
lea    -0x11(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x8c(%rsp,%rcx,8),%edx
lea    -0x10(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x88(%rsp,%rcx,8),%edx
lea    -0xf(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x84(%rsp,%rcx,8),%edx
lea    -0xe(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x80(%rsp,%rcx,8),%edx
lea    -0xd(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x7c(%rsp,%rcx,8),%edx
lea    -0xc(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x78(%rsp,%rcx,8),%edx
lea    -0xb(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x74(%rsp,%rcx,8),%edx
lea    -0xa(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x70(%rsp,%rcx,8),%edx
lea    -0x9(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x6c(%rsp,%rcx,8),%edx
lea    -0x8(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x68(%rsp,%rcx,8),%edx
lea    -0x7(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x64(%rsp,%rcx,8),%edx
lea    -0x6(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x60(%rsp,%rcx,8),%edx
lea    -0x5(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x5c(%rsp,%rcx,8),%edx
lea    -0x4(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x58(%rsp,%rcx,8),%edx
lea    -0x3(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x54(%rsp,%rcx,8),%edx
lea    -0x2(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x50(%rsp,%rcx,8),%edx
lea    -0x1(%rcx),%rsi
cmp    %rdx,%rsi
jne    135e <main+0x23e>
mov    -0x4c(%rsp,%rcx,8),%edx
cmp    %rdx,%rcx
jne    135e <main+0x23e>
add    $0xa,%rcx
cmp    $0x77,%rcx
jne    1200 <main+0xe0>
lea    0xcf9(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
add    $0x320,%rsp
pop    %rbx
ret

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

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