void GeneratePattern(int pattern[][100]) {
  int i;
  for (i = 0; i < 100; i++) {
    if (i / 10 == 0 || i / 10 == 1 || i % 10 == 4 || i % 10 == 5) {
      pattern[0][i] = 1;
    } else {
      pattern[0][i] = -1;
    }
  }
  for (i = 0; i < 100; i++) {
    if (i / 10 == 0 || i / 10 == 1 || i / 10 == 8 || i / 10 == 9) {
      pattern[1][i] = 1;
    } else if (i % 10 == 0 || i % 10 == 1 || i % 10 == 8 || i % 10 == 9) {
      pattern[1][i] = 1;
    } else {
      pattern[1][i] = -1;
    }
  }
  for (i = 0; i < 100; i++) {
    if ((i >= 41 && i < 60) || i % 10 == 0 || i % 10 == 1 || i % 10 == 8 ||
        i % 10 == 9)
      pattern[2][i] = 1;
    else
      pattern[2][i] = -1;
  }
}


x86 assembly (clang, -O0):
<GeneratePattern>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x64,-0xc(%rbp)
jge    119f <GeneratePattern+0x9f>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%eax
je     1169 <GeneratePattern+0x69>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x1,%eax
je     1169 <GeneratePattern+0x69>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x4,%edx
je     1169 <GeneratePattern+0x69>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x5,%edx
jne    117d <GeneratePattern+0x7d>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    118c <GeneratePattern+0x8c>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0xffffffff,(%rax,%rcx,4)
jmp    1191 <GeneratePattern+0x91>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    110f <GeneratePattern+0xf>
movl   $0x0,-0xc(%rbp)
cmpl   $0x64,-0xc(%rbp)
jge    12ab <GeneratePattern+0x1ab>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%eax
je     1200 <GeneratePattern+0x100>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x1,%eax
je     1200 <GeneratePattern+0x100>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x8,%eax
je     1200 <GeneratePattern+0x100>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x9,%eax
jne    1218 <GeneratePattern+0x118>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x1,0x190(%rax,%rcx,4)
jmp    1298 <GeneratePattern+0x198>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     1268 <GeneratePattern+0x168>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x1,%edx
je     1268 <GeneratePattern+0x168>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x8,%edx
je     1268 <GeneratePattern+0x168>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x9,%edx
jne    1280 <GeneratePattern+0x180>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x1,0x190(%rax,%rcx,4)
jmp    1293 <GeneratePattern+0x193>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0xffffffff,0x190(%rax,%rcx,4)
ff ff ff ff
jmp    1298 <GeneratePattern+0x198>
jmp    129d <GeneratePattern+0x19d>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11a6 <GeneratePattern+0xa6>
movl   $0x0,-0xc(%rbp)
cmpl   $0x64,-0xc(%rbp)
jge    135e <GeneratePattern+0x25e>
cmpl   $0x29,-0xc(%rbp)
jl     12d0 <GeneratePattern+0x1d0>
cmpl   $0x3c,-0xc(%rbp)
jl     1320 <GeneratePattern+0x220>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     1320 <GeneratePattern+0x220>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x1,%edx
je     1320 <GeneratePattern+0x220>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x8,%edx
je     1320 <GeneratePattern+0x220>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x9,%edx
jne    1338 <GeneratePattern+0x238>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x1,0x320(%rax,%rcx,4)
jmp    134b <GeneratePattern+0x24b>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0xffffffff,0x320(%rax,%rcx,4)
ff ff ff ff
jmp    1350 <GeneratePattern+0x250>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12b2 <GeneratePattern+0x1b2>
pop    %rbp
ret

x86 assembly (clang, -O2):
<GeneratePattern>:
xor    %eax,%eax
jmp    111d <GeneratePattern+0x1d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %ecx,(%rdi,%rax,4)
add    $0x1,%rax
cmp    $0x64,%rax
je     115c <GeneratePattern+0x5c>
mov    %rax,%rdx
mov    $0x1,%ecx
sub    $0xa,%rdx
jb     1110 <GeneratePattern+0x10>
cmp    $0xa,%edx
jb     1110 <GeneratePattern+0x10>
movzbl %al,%ecx
imul   $0xcd,%ecx,%ecx
shr    $0xa,%ecx
and    $0xfffffffe,%ecx
lea    (%rcx,%rcx,4),%ecx
neg    %ecx
movzbl %cl,%ecx
add    %eax,%ecx
and    $0xe,%cl
xor    %edx,%edx
cmp    $0x4,%cl
sete   %dl
lea    (%rdx,%rdx,1),%ecx
add    $0xffffffff,%ecx
jmp    1110 <GeneratePattern+0x10>
xor    %ecx,%ecx
movabs $0xcccccccccccccccd,%r9
cc cc cc
lea    0xe91(%rip),%r8
jmp    1191 <GeneratePattern+0x91>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %eax,0x190(%rdi,%rcx,4)
add    $0x1,%rcx
cmp    $0x64,%rcx
je     11cd <GeneratePattern+0xcd>
mov    %rcx,%rax
mul    %r9
mov    %rcx,%rsi
mov    $0x1,%eax
sub    $0xa,%rsi
jb     1180 <GeneratePattern+0x80>
cmp    $0xa,%esi
jb     1180 <GeneratePattern+0x80>
lea    -0x50(%rcx),%esi
cmp    $0xa,%esi
jb     1180 <GeneratePattern+0x80>
lea    -0x5a(%rcx),%esi
cmp    $0xa,%esi
jb     1180 <GeneratePattern+0x80>
and    $0xfffffffffffffff8,%rdx
lea    (%rdx,%rdx,4),%rax
mov    %r8,%rdx
sub    %rax,%rdx
mov    (%rdx,%rcx,4),%eax
jmp    1180 <GeneratePattern+0x80>
xor    %ecx,%ecx
jmp    11f1 <GeneratePattern+0xf1>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %eax,0x320(%rdi,%rcx,4)
add    $0x1,%rcx
cmp    $0x64,%rcx
je     1217 <GeneratePattern+0x117>
mov    %rcx,%rax
mul    %r9
lea    -0x29(%rcx),%esi
mov    $0x1,%eax
cmp    $0x13,%esi
jb     11e0 <GeneratePattern+0xe0>
and    $0xfffffffffffffff8,%rdx
lea    (%rdx,%rdx,4),%rax
mov    %r8,%rdx
sub    %rax,%rdx
mov    (%rdx,%rcx,4),%eax
jmp    11e0 <GeneratePattern+0xe0>
ret

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

LLVM IR (-O2):
@switch.table.GeneratePattern.1 = [10 x i32] [i32 1, i32 1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 1, i32 1]
define void @GeneratePattern([100 x i32]* nocapture writeonly %0) {
br label %2
2: ; preds = %1, %15
%3 = phi i64 [ 0, %1 ], [ %18, %15 ]
%4 = icmp ult i64 %3, 10
%5 = trunc i64 %3 to i32
%6 = add i32 %5, -10
%7 = icmp ult i32 %6, 10
%8 = select i1 %4, i1 true, i1 %7
br i1 %8, label %15, label %9
9: ; preds = %2
%10 = trunc i64 %3 to i8
%11 = urem i8 %10, 10
%12 = and i8 %11, 14
%13 = icmp eq i8 %12, 4
%14 = select i1 %13, i32 1, i32 -1
br label %15
15: ; preds = %9, %2
%16 = phi i32 [ 1, %2 ], [ %14, %9 ]
%17 = getelementptr inbounds [100 x i32], [100 x i32]* %0, i64 0, i64 %3
store i32 %16, i32* %17
%18 = add nuw nsw i64 %3, 1
%19 = icmp eq i64 %18, 100
br i1 %19, label %20, label %2
20: ; preds = %15, %41
%21 = phi i64 [ %44, %41 ], [ 0, %15 ]
%22 = icmp ult i64 %21, 10
%23 = trunc i64 %21 to i32
%24 = add i32 %23, -10
%25 = icmp ult i32 %24, 10
%26 = select i1 %22, i1 true, i1 %25
%27 = trunc i64 %21 to i32
%28 = add i32 %27, -80
%29 = icmp ult i32 %28, 10
%30 = select i1 %26, i1 true, i1 %29
%31 = trunc i64 %21 to i32
%32 = add i32 %31, -90
%33 = icmp ult i32 %32, 10
%34 = select i1 %30, i1 true, i1 %33
br i1 %34, label %41, label %35
35: ; preds = %20
%36 = trunc i64 %21 to i8
%37 = urem i8 %36, 10
%38 = zext i8 %37 to i64
%39 = getelementptr inbounds [10 x i32], [10 x i32]* @switch.table.GeneratePattern.1, i64 0, i64 %38
%40 = load i32, i32* %39
br label %41
41: ; preds = %35, %20
%42 = phi i32 [ 1, %20 ], [ %40, %35 ]
%43 = getelementptr inbounds [100 x i32], [100 x i32]* %0, i64 1, i64 %21
store i32 %42, i32* %43
%44 = add nuw nsw i64 %21, 1
%45 = icmp eq i64 %44, 100
br i1 %45, label %46, label %20
46: ; preds = %41, %57
%47 = phi i64 [ %60, %57 ], [ 0, %41 ]
%48 = trunc i64 %47 to i32
%49 = add i32 %48, -41
%50 = icmp ult i32 %49, 19
br i1 %50, label %57, label %51
51: ; preds = %46
%52 = trunc i64 %47 to i8
%53 = urem i8 %52, 10
%54 = zext i8 %53 to i64
%55 = getelementptr inbounds [10 x i32], [10 x i32]* @switch.table.GeneratePattern.1, i64 0, i64 %54
%56 = load i32, i32* %55
br label %57
57: ; preds = %51, %46
%58 = phi i32 [ 1, %46 ], [ %56, %51 ]
%59 = getelementptr inbounds [100 x i32], [100 x i32]* %0, i64 2, i64 %47
store i32 %58, i32* %59
%60 = add nuw nsw i64 %47, 1
%61 = icmp eq i64 %60, 100
br i1 %61, label %62, label %46
62: ; preds = %57
ret void
}