#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*/ cellularAutomataRound(short **, char *, char *);
short fillContiguousRegion(short **, short, short, short);
int /*<<< orphan*/ fillGrid(short **, int /*<<< orphan*/);
scalar_t__ rand_percent(short);
void createBlobOnGrid(short **grid, short *retMinX, short *retMinY,
                      short *retWidth, short *retHeight, short roundCount,
                      short minBlobWidth, short minBlobHeight,
                      short maxBlobWidth, short maxBlobHeight,
                      short percentSeeded, char birthParameters[9],
                      char survivalParameters[9]) {
  short i, j, k;
  short blobNumber, blobSize, topBlobNumber, topBlobSize;
  short topBlobMinX, topBlobMinY, topBlobMaxX, topBlobMaxY, blobWidth,
      blobHeight;
  char foundACellThisLine;
  do {
    fillGrid(grid, 0);
    for (i = 0; i < maxBlobWidth; i++) {
      for (j = 0; j < maxBlobHeight; j++) {
        grid[i][j] = (rand_percent(percentSeeded) ? 1 : 0);
      }
    }
    for (k = 0; k < roundCount; k++) {
      cellularAutomataRound(grid, birthParameters, survivalParameters);
    }
    topBlobSize = 0;
    topBlobNumber = 0;
    topBlobMinX = maxBlobWidth;
    topBlobMaxX = 0;
    topBlobMinY = maxBlobHeight;
    topBlobMaxY = 0;
    blobNumber = 2;
    for (i = 0; i < (100 - 20 - 1); i++) {
      for (j = 0; j < ((31 + 3) - 3 - 2); j++) {
        if (grid[i][j] == 1) {
          blobSize = fillContiguousRegion(grid, i, j, blobNumber);
          if (blobSize > topBlobSize) {
            topBlobSize = blobSize;
            topBlobNumber = blobNumber;
          }
          blobNumber++;
        }
      }
    }
    for (i = 0; i < (100 - 20 - 1); i++) {
      foundACellThisLine = 0;
      for (j = 0; j < ((31 + 3) - 3 - 2); j++) {
        if (grid[i][j] == topBlobNumber) {
          foundACellThisLine = 1;
          break;
        }
      }
      if (foundACellThisLine) {
        if (i < topBlobMinX) {
          topBlobMinX = i;
        }
        if (i > topBlobMaxX) {
          topBlobMaxX = i;
        }
      }
    }
    for (j = 0; j < ((31 + 3) - 3 - 2); j++) {
      foundACellThisLine = 0;
      for (i = 0; i < (100 - 20 - 1); i++) {
        if (grid[i][j] == topBlobNumber) {
          foundACellThisLine = 1;
          break;
        }
      }
      if (foundACellThisLine) {
        if (j < topBlobMinY) {
          topBlobMinY = j;
        }
        if (j > topBlobMaxY) {
          topBlobMaxY = j;
        }
      }
    }
    blobWidth = (topBlobMaxX - topBlobMinX) + 1;
    blobHeight = (topBlobMaxY - topBlobMinY) + 1;
  } while (blobWidth < minBlobWidth || blobHeight < minBlobHeight ||
           topBlobNumber == 0);
  for (i = 0; i < (100 - 20 - 1); i++) {
    for (j = 0; j < ((31 + 3) - 3 - 2); j++) {
      if (grid[i][j] == topBlobNumber) {
        grid[i][j] = 1;
      } else {
        grid[i][j] = 0;
      }
    }
  }
  *retMinX = topBlobMinX;
  *retMinY = topBlobMinY;
  *retWidth = blobWidth;
  *retHeight = blobHeight;
}


x86 assembly (clang, -O0):
<createBlobOnGrid>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %r9w,%ax
mov    0x40(%rbp),%r9
mov    0x38(%rbp),%r9
mov    0x30(%rbp),%r9w
mov    0x28(%rbp),%r9w
mov    0x20(%rbp),%r9w
mov    0x18(%rbp),%r9w
mov    0x10(%rbp),%r9w
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %ax,-0x2a(%rbp)
mov    -0x8(%rbp),%rdi
xor    %esi,%esi
call   1050 <fillGrid@plt>
movw   $0x0,-0x2c(%rbp)
movswl -0x2c(%rbp),%eax
movswl 0x20(%rbp),%ecx
cmp    %ecx,%eax
jge    1216 <createBlobOnGrid+0xd6>
movw   $0x0,-0x2e(%rbp)
movswl -0x2e(%rbp),%eax
movswl 0x28(%rbp),%ecx
cmp    %ecx,%eax
jge    1200 <createBlobOnGrid+0xc0>
movswl 0x30(%rbp),%edi
call   1060 <rand_percent@plt>
mov    %rax,%rdx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x0,%rdx
cmovne %ecx,%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
movswq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x2e(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x2e(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2e(%rbp)
jmp    11ac <createBlobOnGrid+0x6c>
jmp    1205 <createBlobOnGrid+0xc5>
mov    -0x2c(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2c(%rbp)
jmp    1196 <createBlobOnGrid+0x56>
movw   $0x0,-0x30(%rbp)
movswl -0x30(%rbp),%eax
movswl -0x2a(%rbp),%ecx
cmp    %ecx,%eax
jge    124e <createBlobOnGrid+0x10e>
mov    -0x8(%rbp),%rdi
mov    0x38(%rbp),%rsi
mov    0x40(%rbp),%rdx
call   1040 <cellularAutomataRound@plt>
mov    -0x30(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x30(%rbp)
jmp    121c <createBlobOnGrid+0xdc>
movw   $0x0,-0x38(%rbp)
movw   $0x0,-0x36(%rbp)
mov    0x20(%rbp),%ax
mov    %ax,-0x3a(%rbp)
movw   $0x0,-0x3e(%rbp)
mov    0x28(%rbp),%ax
mov    %ax,-0x3c(%rbp)
movw   $0x0,-0x40(%rbp)
movw   $0x2,-0x32(%rbp)
movw   $0x0,-0x2c(%rbp)
movswl -0x2c(%rbp),%eax
cmp    $0x4f,%eax
jge    1338 <createBlobOnGrid+0x1f8>
movw   $0x0,-0x2e(%rbp)
movswl -0x2e(%rbp),%eax
cmp    $0x1d,%eax
jge    1322 <createBlobOnGrid+0x1e2>
mov    -0x8(%rbp),%rax
movswq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x2e(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
cmp    $0x1,%eax
jne    130c <createBlobOnGrid+0x1cc>
mov    -0x8(%rbp),%rdi
mov    -0x2c(%rbp),%cx
mov    -0x2e(%rbp),%ax
movswl %cx,%esi
movswl %ax,%edx
movswl -0x32(%rbp),%ecx
call   1030 <fillContiguousRegion@plt>
mov    %ax,-0x34(%rbp)
movswl -0x34(%rbp),%eax
movswl -0x38(%rbp),%ecx
cmp    %ecx,%eax
jle    1300 <createBlobOnGrid+0x1c0>
mov    -0x34(%rbp),%ax
mov    %ax,-0x38(%rbp)
mov    -0x32(%rbp),%ax
mov    %ax,-0x36(%rbp)
mov    -0x32(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x32(%rbp)
jmp    1311 <createBlobOnGrid+0x1d1>
mov    -0x2e(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2e(%rbp)
jmp    1295 <createBlobOnGrid+0x155>
jmp    1327 <createBlobOnGrid+0x1e7>
mov    -0x2c(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2c(%rbp)
jmp    1282 <createBlobOnGrid+0x142>
movw   $0x0,-0x2c(%rbp)
movswl -0x2c(%rbp),%eax
cmp    $0x4f,%eax
jge    13f8 <createBlobOnGrid+0x2b8>
movb   $0x0,-0x45(%rbp)
movw   $0x0,-0x2e(%rbp)
movswl -0x2e(%rbp),%eax
cmp    $0x1d,%eax
jge    13a3 <createBlobOnGrid+0x263>
mov    -0x8(%rbp),%rax
movswq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x2e(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
movswl -0x36(%rbp),%ecx
cmp    %ecx,%eax
jne    138d <createBlobOnGrid+0x24d>
movb   $0x1,-0x45(%rbp)
jmp    13a3 <createBlobOnGrid+0x263>
jmp    1392 <createBlobOnGrid+0x252>
mov    -0x2e(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2e(%rbp)
jmp    1355 <createBlobOnGrid+0x215>
cmpb   $0x0,-0x45(%rbp)
je     13e2 <createBlobOnGrid+0x2a2>
movswl -0x2c(%rbp),%eax
movswl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jge    13c5 <createBlobOnGrid+0x285>
mov    -0x2c(%rbp),%ax
mov    %ax,-0x3a(%rbp)
movswl -0x2c(%rbp),%eax
movswl -0x3e(%rbp),%ecx
cmp    %ecx,%eax
jle    13dd <createBlobOnGrid+0x29d>
mov    -0x2c(%rbp),%ax
mov    %ax,-0x3e(%rbp)
jmp    13e2 <createBlobOnGrid+0x2a2>
jmp    13e7 <createBlobOnGrid+0x2a7>
mov    -0x2c(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2c(%rbp)
jmp    133e <createBlobOnGrid+0x1fe>
movw   $0x0,-0x2e(%rbp)
movswl -0x2e(%rbp),%eax
cmp    $0x1d,%eax
jge    14b8 <createBlobOnGrid+0x378>
movb   $0x0,-0x45(%rbp)
movw   $0x0,-0x2c(%rbp)
movswl -0x2c(%rbp),%eax
cmp    $0x4f,%eax
jge    1463 <createBlobOnGrid+0x323>
mov    -0x8(%rbp),%rax
movswq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x2e(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
movswl -0x36(%rbp),%ecx
cmp    %ecx,%eax
jne    144d <createBlobOnGrid+0x30d>
movb   $0x1,-0x45(%rbp)
jmp    1463 <createBlobOnGrid+0x323>
jmp    1452 <createBlobOnGrid+0x312>
mov    -0x2c(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2c(%rbp)
jmp    1415 <createBlobOnGrid+0x2d5>
cmpb   $0x0,-0x45(%rbp)
je     14a2 <createBlobOnGrid+0x362>
movswl -0x2e(%rbp),%eax
movswl -0x3c(%rbp),%ecx
cmp    %ecx,%eax
jge    1485 <createBlobOnGrid+0x345>
mov    -0x2e(%rbp),%ax
mov    %ax,-0x3c(%rbp)
movswl -0x2e(%rbp),%eax
movswl -0x40(%rbp),%ecx
cmp    %ecx,%eax
jle    149d <createBlobOnGrid+0x35d>
mov    -0x2e(%rbp),%ax
mov    %ax,-0x40(%rbp)
jmp    14a2 <createBlobOnGrid+0x362>
jmp    14a7 <createBlobOnGrid+0x367>
mov    -0x2e(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2e(%rbp)
jmp    13fe <createBlobOnGrid+0x2be>
movswl -0x3e(%rbp),%eax
movswl -0x3a(%rbp),%ecx
sub    %ecx,%eax
add    $0x1,%eax
mov    %ax,-0x42(%rbp)
movswl -0x40(%rbp),%eax
movswl -0x3c(%rbp),%ecx
sub    %ecx,%eax
add    $0x1,%eax
mov    %ax,-0x44(%rbp)
movswl -0x42(%rbp),%ecx
movswl 0x10(%rbp),%edx
mov    $0x1,%al
cmp    %edx,%ecx
mov    %al,-0x46(%rbp)
jl     1511 <createBlobOnGrid+0x3d1>
movswl -0x44(%rbp),%ecx
movswl 0x18(%rbp),%edx
mov    $0x1,%al
cmp    %edx,%ecx
mov    %al,-0x46(%rbp)
jl     1511 <createBlobOnGrid+0x3d1>
movswl -0x36(%rbp),%eax
cmp    $0x0,%eax
sete   %al
mov    %al,-0x46(%rbp)
mov    -0x46(%rbp),%al
test   $0x1,%al
jne    1185 <createBlobOnGrid+0x45>
movw   $0x0,-0x2c(%rbp)
movswl -0x2c(%rbp),%eax
cmp    $0x4f,%eax
jge    15c5 <createBlobOnGrid+0x485>
movw   $0x0,-0x2e(%rbp)
movswl -0x2e(%rbp),%eax
cmp    $0x1d,%eax
jge    15af <createBlobOnGrid+0x46f>
mov    -0x8(%rbp),%rax
movswq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x2e(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
movswl -0x36(%rbp),%ecx
cmp    %ecx,%eax
jne    1581 <createBlobOnGrid+0x441>
mov    -0x8(%rbp),%rax
movswq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x2e(%rbp),%rcx
movw   $0x1,(%rax,%rcx,2)
jmp    1599 <createBlobOnGrid+0x459>
mov    -0x8(%rbp),%rax
movswq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x2e(%rbp),%rcx
movw   $0x0,(%rax,%rcx,2)
jmp    159e <createBlobOnGrid+0x45e>
mov    -0x2e(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2e(%rbp)
jmp    1535 <createBlobOnGrid+0x3f5>
jmp    15b4 <createBlobOnGrid+0x474>
mov    -0x2c(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x2c(%rbp)
jmp    1522 <createBlobOnGrid+0x3e2>
mov    -0x3a(%rbp),%cx
mov    -0x10(%rbp),%rax
mov    %cx,(%rax)
mov    -0x3c(%rbp),%cx
mov    -0x18(%rbp),%rax
mov    %cx,(%rax)
mov    -0x42(%rbp),%cx
mov    -0x20(%rbp),%rax
mov    %cx,(%rax)
mov    -0x44(%rbp),%cx
mov    -0x28(%rbp),%rax
mov    %cx,(%rax)
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<createBlobOnGrid>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9d,0x10(%rsp)
mov    %r8,0x30(%rsp)
mov    %rcx,0x28(%rsp)
mov    %rdx,0x20(%rsp)
mov    %rsi,0x18(%rsp)
movzwl 0x98(%rsp),%r12d
movzwl 0x90(%rsp),%r14d
movzwl %r14w,%eax
mov    %rax,0x40(%rsp)
movzwl %r12w,%eax
mov    %rax,0x38(%rsp)
movswl 0xa0(%rsp),%r8d
mov    %rdi,0x8(%rsp)
mov    %r8d,0x14(%rsp)
xchg   %ax,%ax
xor    %esi,%esi
call   1050 <fillGrid@plt>
test   %r14w,%r14w
jle    1220 <createBlobOnGrid+0xe0>
xor    %ebp,%ebp
jmp    11cb <createBlobOnGrid+0x8b>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbp
cmp    0x40(%rsp),%rbp
je     1220 <createBlobOnGrid+0xe0>
test   %r12w,%r12w
mov    0x8(%rsp),%r14
mov    0x38(%rsp),%r15
mov    0x14(%rsp),%r13d
jle    11c0 <createBlobOnGrid+0x80>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r13d,%edi
call   1060 <rand_percent@plt>
xor    %ecx,%ecx
test   %rax,%rax
setne  %cl
mov    (%r14,%rbp,8),%rax
mov    %cx,(%rax,%rbx,2)
add    $0x1,%rbx
cmp    %rbx,%r15
jne    11f0 <createBlobOnGrid+0xb0>
jmp    11c0 <createBlobOnGrid+0x80>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x10(%rsp),%eax
mov    %eax,%ebx
test   %ax,%ax
mov    0x8(%rsp),%r12
mov    0xb0(%rsp),%rbp
mov    0xa8(%rsp),%r14
jle    1254 <createBlobOnGrid+0x114>
mov    %r12,%rdi
mov    %r14,%rsi
mov    %rbp,%rdx
call   1040 <cellularAutomataRound@plt>
add    $0xffff,%bx
jne    1240 <createBlobOnGrid+0x100>
mov    $0x2,%r13w
xor    %r14d,%r14d
xor    %r15d,%r15d
xor    %ebp,%ebp
mov    %r12,%rdi
jmp    127a <createBlobOnGrid+0x13a>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r14
cmp    $0x4f,%r14
je     12d0 <createBlobOnGrid+0x190>
xor    %r12d,%r12d
jmp    128a <createBlobOnGrid+0x14a>
nop
add    $0x1,%r12
cmp    $0x1d,%r12
je     1270 <createBlobOnGrid+0x130>
mov    (%rdi,%r14,8),%rax
cmpw   $0x1,(%rax,%r12,2)
jne    1280 <createBlobOnGrid+0x140>
movswl %r14w,%esi
movswl %r13w,%r13d
movswl %r12w,%edx
mov    %r13d,%ecx
call   1030 <fillContiguousRegion@plt>
mov    0x8(%rsp),%rdi
cmp    %r15w,%ax
cmovg  %r13d,%ebp
cmovg  %eax,%r15d
add    $0x1,%r13d
jmp    1280 <createBlobOnGrid+0x140>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xor    %edx,%edx
xor    %r10d,%r10d
movzwl 0x90(%rsp),%r14d
mov    %r14d,%r9d
movzwl 0x98(%rsp),%r12d
nopw   0x0(%rax,%rax,1)
mov    (%rdi,%rdx,8),%rsi
cmp    %bp,(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x2(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x4(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x6(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x8(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0xa(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0xc(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0xe(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x10(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x12(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x14(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x16(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x18(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x1a(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x1c(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x1e(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x20(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x22(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x24(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x26(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x28(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x2a(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x2c(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x2e(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x30(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x32(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x34(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x36(%rsi)
je     13d0 <createBlobOnGrid+0x290>
cmp    %bp,0x38(%rsi)
jne    13e6 <createBlobOnGrid+0x2a6>
nopl   0x0(%rax)
movswq %r9w,%r9
cmp    %r9,%rdx
cmovl  %edx,%r9d
movswq %r10w,%r10
cmp    %r10,%rdx
cmovg  %edx,%r10d
add    $0x1,%rdx
cmp    $0x4f,%rdx
jne    12f0 <createBlobOnGrid+0x1b0>
xor    %eax,%eax
xor    %edx,%edx
mov    %r12d,%esi
jmp    141e <createBlobOnGrid+0x2de>
nopl   (%rax)
movswq %si,%rsi
cmp    %rsi,%rax
cmovl  %eax,%esi
movswq %dx,%rdx
cmp    %rdx,%rax
cmovg  %eax,%edx
add    $0x1,%rax
cmp    $0x1d,%rax
je     1470 <createBlobOnGrid+0x330>
mov    $0x3,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    -0x18(%rdi,%rcx,8),%rbx
cmp    %bp,(%rbx,%rax,2)
je     1400 <createBlobOnGrid+0x2c0>
mov    -0x10(%rdi,%rcx,8),%rbx
cmp    %bp,(%rbx,%rax,2)
je     1400 <createBlobOnGrid+0x2c0>
mov    -0x8(%rdi,%rcx,8),%rbx
cmp    %bp,(%rbx,%rax,2)
je     1400 <createBlobOnGrid+0x2c0>
cmp    $0x4f,%rcx
je     1414 <createBlobOnGrid+0x2d4>
mov    (%rdi,%rcx,8),%rbx
cmp    %bp,(%rbx,%rax,2)
je     1400 <createBlobOnGrid+0x2c0>
add    $0x4,%rcx
jmp    1430 <createBlobOnGrid+0x2f0>
nopw   0x0(%rax,%rax,1)
sub    %r9d,%r10d
add    $0x1,%r10d
sub    %esi,%edx
add    $0x1,%edx
cmp    0x80(%rsp),%r10w
jl     11a0 <createBlobOnGrid+0x60>
cmp    0x88(%rsp),%dx
jl     11a0 <createBlobOnGrid+0x60>
test   %bp,%bp
je     11a0 <createBlobOnGrid+0x60>
movd   %ebp,%xmm0
pshuflw $0x0,%xmm0,%xmm0
pshufd $0x0,%xmm0,%xmm0
xor    %r8d,%r8d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%rdi,%r8,8),%rax
movdqu (%rax),%xmm1
movdqu 0x10(%rax),%xmm2
movdqu 0x20(%rax),%xmm3
pcmpeqw %xmm0,%xmm1
psrlw  $0xf,%xmm1
movdqu %xmm1,(%rax)
pcmpeqw %xmm0,%xmm2
psrlw  $0xf,%xmm2
movdqu %xmm2,0x10(%rax)
pcmpeqw %xmm0,%xmm3
psrlw  $0xf,%xmm3
movdqu %xmm3,0x20(%rax)
xor    %ecx,%ecx
cmp    %bp,0x30(%rax)
sete   %cl
mov    %cx,0x30(%rax)
xor    %ecx,%ecx
cmp    %bp,0x32(%rax)
sete   %cl
mov    %cx,0x32(%rax)
xor    %ecx,%ecx
cmp    %bp,0x34(%rax)
sete   %cl
mov    %cx,0x34(%rax)
xor    %ecx,%ecx
cmp    %bp,0x36(%rax)
sete   %cl
mov    %cx,0x36(%rax)
xor    %ecx,%ecx
cmp    %bp,0x38(%rax)
sete   %cl
mov    %cx,0x38(%rax)
add    $0x1,%r8
cmp    $0x4f,%r8
jne    14c0 <createBlobOnGrid+0x380>
mov    0x18(%rsp),%rcx
mov    %r9w,(%rcx)
mov    0x20(%rsp),%rcx
mov    %si,(%rcx)
mov    0x28(%rsp),%rcx
mov    %r10w,(%rcx)
mov    0x30(%rsp),%rax
mov    %dx,(%rax)
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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