#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 incX(int, int, int, int);
int incY(int, int, int, int);
void localIDGenerator(int *localSize0, int *localSize1, int *numCore,
                      unsigned int *coreID, int *id0x, int *id0y, int *id1x,
                      int *id1y, int *id2x, int *id2y, int *id3x, int *id3y,
                      int *id4x, int *id4y, int *id5x, int *id5y, int *id6x,
                      int *id6y) {
#pragma HLS INTERFACE s_axilite port = return bundle = BUS_CMD
#pragma HLS INTERFACE s_axilite register port = numCore bundle = BUS_CMD
#pragma HLS INTERFACE s_axilite register port = localSize0 bundle = BUS_CMD
#pragma HLS INTERFACE s_axilite register port = localSize1 bundle = BUS_CMD
#pragma HLS INTERFACE axis register port = coreID
#pragma HLS INTERFACE axis register port = id0x
#pragma HLS INTERFACE axis register port = id0y
#pragma HLS INTERFACE axis register port = id1x
#pragma HLS INTERFACE axis register port = id1y
#pragma HLS INTERFACE axis register port = id2x
#pragma HLS INTERFACE axis register port = id2y
#pragma HLS INTERFACE axis register port = id3x
#pragma HLS INTERFACE axis register port = id3y
#pragma HLS INTERFACE axis register port = id4x
#pragma HLS INTERFACE axis register port = id4y
#pragma HLS INTERFACE axis register port = id5x
#pragma HLS INTERFACE axis register port = id5y
#pragma HLS INTERFACE axis register port = id6x
#pragma HLS INTERFACE axis register port = id6y
  int numOfX = *localSize0;
  int numOfY = *localSize1;
  int total = numOfX * numOfY;
  unsigned int finish = 0;
  unsigned int cnt = 0;
  int idx = 0;
  int idy = 0;
  unsigned int currNumCore = *numCore;
  int i;
  for (i = 0; i < (total + currNumCore); i++) {
    unsigned int currCoreID = *coreID;
    if (currCoreID == 0) {
      if (cnt >= total) {
        *id0x = -1;
        *id0y = -1;
      } else {
        *id0x = idx;
        *id0y = idy;
        idx = incX(idx, idy, numOfX, numOfY);
        idy = incY(idx, idy, numOfX, numOfY);
        cnt = cnt + 1;
      }
    }
    if (currCoreID == 1) {
      if (cnt >= total) {
        *id1x = -1;
        *id1y = -1;
      } else {
        *id1x = idx;
        *id1y = idy;
        idx = incX(idx, idy, numOfX, numOfY);
        idy = incY(idx, idy, numOfX, numOfY);
        cnt = cnt + 1;
      }
    }
    if (currCoreID == 2) {
      if (cnt >= total) {
        *id2x = -1;
        *id2y = -1;
      } else {
        *id2x = idx;
        *id2y = idy;
        idx = incX(idx, idy, numOfX, numOfY);
        idy = incY(idx, idy, numOfX, numOfY);
        cnt = cnt + 1;
      }
    }
    if (currCoreID == 3) {
      if (cnt >= total) {
        *id3x = -1;
        *id3y = -1;
      } else {
        *id3x = idx;
        *id3y = idy;
        idx = incX(idx, idy, numOfX, numOfY);
        idy = incY(idx, idy, numOfX, numOfY);
        cnt = cnt + 1;
      }
    }
    if (currCoreID == 4) {
      if (cnt >= total) {
        *id4x = -1;
        *id4y = -1;
      } else {
        *id4x = idx;
        *id4y = idy;
        idx = incX(idx, idy, numOfX, numOfY);
        idy = incY(idx, idy, numOfX, numOfY);
        cnt = cnt + 1;
      }
    }
    if (currCoreID == 5) {
      if (cnt >= total) {
        *id5x = -1;
        *id5y = -1;
      } else {
        *id5x = idx;
        *id5y = idy;
        idx = incX(idx, idy, numOfX, numOfY);
        idy = incY(idx, idy, numOfX, numOfY);
        cnt = cnt + 1;
      }
    }
    if (currCoreID == 6) {
      if (cnt >= total) {
        *id6x = -1;
        *id6y = -1;
      } else {
        *id6x = idx;
        *id6y = idy;
        idx = incX(idx, idy, numOfX, numOfY);
        idy = incY(idx, idy, numOfX, numOfY);
        cnt = cnt + 1;
      }
    }
  }
}


x86 assembly (clang, -O0):
<localIDGenerator>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
imul   -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x50(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x3c(%rbp),%ecx
add    -0x50(%rbp),%ecx
cmp    %ecx,%eax
jae    1526 <localIDGenerator+0x406>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x58(%rbp)
cmpl   $0x0,-0x58(%rbp)
jne    1249 <localIDGenerator+0x129>
mov    -0x44(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jb     1201 <localIDGenerator+0xe1>
mov    -0x28(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    -0x30(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    1244 <localIDGenerator+0x124>
mov    -0x48(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4c(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1040 <incX@plt>
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1030 <incY@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1249 <localIDGenerator+0x129>
cmpl   $0x1,-0x58(%rbp)
jne    12c0 <localIDGenerator+0x1a0>
mov    -0x44(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jb     1278 <localIDGenerator+0x158>
mov    0x10(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    0x18(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    12bb <localIDGenerator+0x19b>
mov    -0x48(%rbp),%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4c(%rbp),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1040 <incX@plt>
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1030 <incY@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12c0 <localIDGenerator+0x1a0>
cmpl   $0x2,-0x58(%rbp)
jne    1337 <localIDGenerator+0x217>
mov    -0x44(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jb     12ef <localIDGenerator+0x1cf>
mov    0x20(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    0x28(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    1332 <localIDGenerator+0x212>
mov    -0x48(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4c(%rbp),%ecx
mov    0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1040 <incX@plt>
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1030 <incY@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1337 <localIDGenerator+0x217>
cmpl   $0x3,-0x58(%rbp)
jne    13ae <localIDGenerator+0x28e>
mov    -0x44(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jb     1366 <localIDGenerator+0x246>
mov    0x30(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    0x38(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    13a9 <localIDGenerator+0x289>
mov    -0x48(%rbp),%ecx
mov    0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4c(%rbp),%ecx
mov    0x38(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1040 <incX@plt>
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1030 <incY@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    13ae <localIDGenerator+0x28e>
cmpl   $0x4,-0x58(%rbp)
jne    1425 <localIDGenerator+0x305>
mov    -0x44(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jb     13dd <localIDGenerator+0x2bd>
mov    0x40(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    0x48(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    1420 <localIDGenerator+0x300>
mov    -0x48(%rbp),%ecx
mov    0x40(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4c(%rbp),%ecx
mov    0x48(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1040 <incX@plt>
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1030 <incY@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1425 <localIDGenerator+0x305>
cmpl   $0x5,-0x58(%rbp)
jne    149c <localIDGenerator+0x37c>
mov    -0x44(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jb     1454 <localIDGenerator+0x334>
mov    0x50(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    0x58(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    1497 <localIDGenerator+0x377>
mov    -0x48(%rbp),%ecx
mov    0x50(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4c(%rbp),%ecx
mov    0x58(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1040 <incX@plt>
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1030 <incY@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    149c <localIDGenerator+0x37c>
cmpl   $0x6,-0x58(%rbp)
jne    1513 <localIDGenerator+0x3f3>
mov    -0x44(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jb     14cb <localIDGenerator+0x3ab>
mov    0x60(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    0x68(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    150e <localIDGenerator+0x3ee>
mov    -0x48(%rbp),%ecx
mov    0x60(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4c(%rbp),%ecx
mov    0x68(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1040 <incX@plt>
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%edi
mov    -0x4c(%rbp),%esi
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%ecx
call   1030 <incY@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1513 <localIDGenerator+0x3f3>
jmp    1518 <localIDGenerator+0x3f8>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    11b8 <localIDGenerator+0x98>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<localIDGenerator>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,0x20(%rsp)
mov    %r8,0x18(%rsp)
mov    (%rdi),%eax
mov    (%rsi),%r13d
mov    %r13d,0x8(%rsp)
mov    %eax,0xc(%rsp)
imul   %eax,%r13d
mov    (%rdx),%r12d
add    %r13d,%r12d
je     1345 <localIDGenerator+0x225>
xor    %r15d,%r15d
lea    0xea0(%rip),%rdx
xor    %r14d,%r14d
xor    %ebp,%ebp
mov    %rcx,0x10(%rsp)
mov    %r13d,0x4(%rsp)
jmp    1190 <localIDGenerator+0x70>
movl   $0xffffffff,(%rax)
mov    0x98(%rsp),%rax
nop
movl   $0xffffffff,(%rax)
add    $0xffffffff,%r12d
je     1345 <localIDGenerator+0x225>
mov    (%rcx),%eax
cmp    $0x6,%rax
ja     1186 <localIDGenerator+0x66>
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
cmp    %r13d,%r15d
jae    12fa <localIDGenerator+0x1da>
mov    0x18(%rsp),%rax
mov    %r14d,(%rax)
mov    0x20(%rsp),%rax
mov    %ebp,(%rax)
mov    %r14d,%edi
mov    %ebp,%esi
mov    0xc(%rsp),%ebx
mov    %ebx,%edx
mov    0x8(%rsp),%r13d
mov    %r13d,%ecx
call   1040 <incX@plt>
mov    %eax,%r14d
mov    %eax,%edi
mov    %ebp,%esi
mov    %ebx,%edx
mov    %r13d,%ecx
jmp    12b6 <localIDGenerator+0x196>
mov    0x70(%rsp),%rax
cmp    %r13d,%r15d
jae    12d7 <localIDGenerator+0x1b7>
mov    %r14d,(%rax)
mov    0x78(%rsp),%rax
jmp    1290 <localIDGenerator+0x170>
mov    0x80(%rsp),%rax
cmp    %r13d,%r15d
jae    12e7 <localIDGenerator+0x1c7>
mov    %r14d,(%rax)
mov    0x88(%rsp),%rax
jmp    1290 <localIDGenerator+0x170>
mov    0x90(%rsp),%rax
cmp    %r13d,%r15d
jae    1171 <localIDGenerator+0x51>
mov    %r14d,(%rax)
mov    0x98(%rsp),%rax
jmp    1290 <localIDGenerator+0x170>
mov    0x60(%rsp),%rax
cmp    %r13d,%r15d
jae    130f <localIDGenerator+0x1ef>
mov    %r14d,(%rax)
mov    0x68(%rsp),%rax
jmp    1290 <localIDGenerator+0x170>
mov    0xa0(%rsp),%rax
cmp    %r13d,%r15d
jae    131f <localIDGenerator+0x1ff>
mov    %r14d,(%rax)
mov    0xa8(%rsp),%rax
jmp    1290 <localIDGenerator+0x170>
mov    0xb0(%rsp),%rax
cmp    %r13d,%r15d
jae    1332 <localIDGenerator+0x212>
mov    %r14d,(%rax)
mov    0xb8(%rsp),%rax
nopl   0x0(%rax,%rax,1)
mov    %ebp,(%rax)
mov    %r14d,%edi
mov    %ebp,%esi
mov    0xc(%rsp),%r13d
mov    %r13d,%edx
mov    0x8(%rsp),%ebx
mov    %ebx,%ecx
call   1040 <incX@plt>
mov    %eax,%r14d
mov    %eax,%edi
mov    %ebp,%esi
mov    %r13d,%edx
mov    %ebx,%ecx
call   1030 <incY@plt>
lea    0xd3e(%rip),%rdx
mov    0x4(%rsp),%r13d
mov    0x10(%rsp),%rcx
mov    %eax,%ebp
add    $0x1,%r15d
jmp    1186 <localIDGenerator+0x66>
movl   $0xffffffff,(%rax)
mov    0x78(%rsp),%rax
jmp    1180 <localIDGenerator+0x60>
movl   $0xffffffff,(%rax)
mov    0x88(%rsp),%rax
jmp    1180 <localIDGenerator+0x60>
mov    0x18(%rsp),%rax
movl   $0xffffffff,(%rax)
mov    0x20(%rsp),%rax
jmp    1180 <localIDGenerator+0x60>
movl   $0xffffffff,(%rax)
mov    0x68(%rsp),%rax
jmp    1180 <localIDGenerator+0x60>
movl   $0xffffffff,(%rax)
mov    0xa8(%rsp),%rax
jmp    1180 <localIDGenerator+0x60>
movl   $0xffffffff,(%rax)
mov    0xb8(%rsp),%rax
jmp    1180 <localIDGenerator+0x60>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @localIDGenerator(i32* %0, i32* %1, i32* %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8, i32* %9, i32* %10, i32* %11, i32* %12, i32* %13, i32* %14, i32* %15, i32* %16, i32* %17) {
%19 = alloca i32*
%20 = alloca i32*
%21 = alloca i32*
%22 = alloca i32*
%23 = alloca i32*
%24 = alloca i32*
%25 = alloca i32*
%26 = alloca i32*
%27 = alloca i32*
%28 = alloca i32*
%29 = alloca i32*
%30 = alloca i32*
%31 = alloca i32*
%32 = alloca i32*
%33 = alloca i32*
%34 = alloca i32*
%35 = alloca i32*
%36 = alloca i32*
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32
%45 = alloca i32
%46 = alloca i32
store i32* %0, i32** %19
store i32* %1, i32** %20
store i32* %2, i32** %21
store i32* %3, i32** %22
store i32* %4, i32** %23
store i32* %5, i32** %24
store i32* %6, i32** %25
store i32* %7, i32** %26
store i32* %8, i32** %27
store i32* %9, i32** %28
store i32* %10, i32** %29
store i32* %11, i32** %30
store i32* %12, i32** %31
store i32* %13, i32** %32
store i32* %14, i32** %33
store i32* %15, i32** %34
store i32* %16, i32** %35
store i32* %17, i32** %36
%47 = load i32*, i32** %19
%48 = load i32, i32* %47
store i32 %48, i32* %37
%49 = load i32*, i32** %20
%50 = load i32, i32* %49
store i32 %50, i32* %38
%51 = load i32, i32* %37
%52 = load i32, i32* %38
%53 = mul nsw i32 %51, %52
store i32 %53, i32* %39
store i32 0, i32* %40
store i32 0, i32* %41
store i32 0, i32* %42
store i32 0, i32* %43
%54 = load i32*, i32** %21
%55 = load i32, i32* %54
store i32 %55, i32* %44
store i32 0, i32* %45
br label %56
56: ; preds = %261, %18
%57 = load i32, i32* %45
%58 = load i32, i32* %39
%59 = load i32, i32* %44
%60 = add i32 %58, %59
%61 = icmp ult i32 %57, %60
br i1 %61, label %62, label %264
62: ; preds = %56
%63 = load i32*, i32** %22
%64 = load i32, i32* %63
store i32 %64, i32* %46
%65 = load i32, i32* %46
%66 = icmp eq i32 %65, 0
br i1 %66, label %67, label %92
67: ; preds = %62
%68 = load i32, i32* %41
%69 = load i32, i32* %39
%70 = icmp uge i32 %68, %69
br i1 %70, label %71, label %74
71: ; preds = %67
%72 = load i32*, i32** %23
store i32 -1, i32* %72
%73 = load i32*, i32** %24
store i32 -1, i32* %73
br label %91
74: ; preds = %67
%75 = load i32, i32* %42
%76 = load i32*, i32** %23
store i32 %75, i32* %76
%77 = load i32, i32* %43
%78 = load i32*, i32** %24
store i32 %77, i32* %78
%79 = load i32, i32* %42
%80 = load i32, i32* %43
%81 = load i32, i32* %37
%82 = load i32, i32* %38
%83 = call i32 @incX(i32 %79, i32 %80, i32 %81, i32 %82)
store i32 %83, i32* %42
%84 = load i32, i32* %42
%85 = load i32, i32* %43
%86 = load i32, i32* %37
%87 = load i32, i32* %38
%88 = call i32 @incY(i32 %84, i32 %85, i32 %86, i32 %87)
store i32 %88, i32* %43
%89 = load i32, i32* %41
%90 = add i32 %89, 1
store i32 %90, i32* %41
br label %91
91: ; preds = %74, %71
br label %92
92: ; preds = %91, %62
%93 = load i32, i32* %46
%94 = icmp eq i32 %93, 1
br i1 %94, label %95, label %120
95: ; preds = %92
%96 = load i32, i32* %41
%97 = load i32, i32* %39
%98 = icmp uge i32 %96, %97
br i1 %98, label %99, label %102
99: ; preds = %95
%100 = load i32*, i32** %25
store i32 -1, i32* %100
%101 = load i32*, i32** %26
store i32 -1, i32* %101
br label %119
102: ; preds = %95
%103 = load i32, i32* %42
%104 = load i32*, i32** %25
store i32 %103, i32* %104
%105 = load i32, i32* %43
%106 = load i32*, i32** %26
store i32 %105, i32* %106
%107 = load i32, i32* %42
%108 = load i32, i32* %43
%109 = load i32, i32* %37
%110 = load i32, i32* %38
%111 = call i32 @incX(i32 %107, i32 %108, i32 %109, i32 %110)
store i32 %111, i32* %42
%112 = load i32, i32* %42
%113 = load i32, i32* %43
%114 = load i32, i32* %37
%115 = load i32, i32* %38
%116 = call i32 @incY(i32 %112, i32 %113, i32 %114, i32 %115)
store i32 %116, i32* %43
%117 = load i32, i32* %41
%118 = add i32 %117, 1
store i32 %118, i32* %41
br label %119
119: ; preds = %102, %99
br label %120
120: ; preds = %119, %92
%121 = load i32, i32* %46
%122 = icmp eq i32 %121, 2
br i1 %122, label %123, label %148
123: ; preds = %120
%124 = load i32, i32* %41
%125 = load i32, i32* %39
%126 = icmp uge i32 %124, %125
br i1 %126, label %127, label %130
127: ; preds = %123
%128 = load i32*, i32** %27
store i32 -1, i32* %128
%129 = load i32*, i32** %28
store i32 -1, i32* %129
br label %147
130: ; preds = %123
%131 = load i32, i32* %42
%132 = load i32*, i32** %27
store i32 %131, i32* %132
%133 = load i32, i32* %43
%134 = load i32*, i32** %28
store i32 %133, i32* %134
%135 = load i32, i32* %42
%136 = load i32, i32* %43
%137 = load i32, i32* %37
%138 = load i32, i32* %38
%139 = call i32 @incX(i32 %135, i32 %136, i32 %137, i32 %138)
store i32 %139, i32* %42
%140 = load i32, i32* %42
%141 = load i32, i32* %43
%142 = load i32, i32* %37
%143 = load i32, i32* %38
%144 = call i32 @incY(i32 %140, i32 %141, i32 %142, i32 %143)
store i32 %144, i32* %43
%145 = load i32, i32* %41
%146 = add i32 %145, 1
store i32 %146, i32* %41
br label %147
147: ; preds = %130, %127
br label %148
148: ; preds = %147, %120
%149 = load i32, i32* %46
%150 = icmp eq i32 %149, 3
br i1 %150, label %151, label %176
151: ; preds = %148
%152 = load i32, i32* %41
%153 = load i32, i32* %39
%154 = icmp uge i32 %152, %153
br i1 %154, label %155, label %158
155: ; preds = %151
%156 = load i32*, i32** %29
store i32 -1, i32* %156
%157 = load i32*, i32** %30
store i32 -1, i32* %157
br label %175
158: ; preds = %151
%159 = load i32, i32* %42
%160 = load i32*, i32** %29
store i32 %159, i32* %160
%161 = load i32, i32* %43
%162 = load i32*, i32** %30
store i32 %161, i32* %162
%163 = load i32, i32* %42
%164 = load i32, i32* %43
%165 = load i32, i32* %37
%166 = load i32, i32* %38
%167 = call i32 @incX(i32 %163, i32 %164, i32 %165, i32 %166)
store i32 %167, i32* %42
%168 = load i32, i32* %42
%169 = load i32, i32* %43
%170 = load i32, i32* %37
%171 = load i32, i32* %38
%172 = call i32 @incY(i32 %168, i32 %169, i32 %170, i32 %171)
store i32 %172, i32* %43
%173 = load i32, i32* %41
%174 = add i32 %173, 1
store i32 %174, i32* %41
br label %175
175: ; preds = %158, %155
br label %176
176: ; preds = %175, %148
%177 = load i32, i32* %46
%178 = icmp eq i32 %177, 4
br i1 %178, label %179, label %204
179: ; preds = %176
%180 = load i32, i32* %41
%181 = load i32, i32* %39
%182 = icmp uge i32 %180, %181
br i1 %182, label %183, label %186
183: ; preds = %179
%184 = load i32*, i32** %31
store i32 -1, i32* %184
%185 = load i32*, i32** %32
store i32 -1, i32* %185
br label %203
186: ; preds = %179
%187 = load i32, i32* %42
%188 = load i32*, i32** %31
store i32 %187, i32* %188
%189 = load i32, i32* %43
%190 = load i32*, i32** %32
store i32 %189, i32* %190
%191 = load i32, i32* %42
%192 = load i32, i32* %43
%193 = load i32, i32* %37
%194 = load i32, i32* %38
%195 = call i32 @incX(i32 %191, i32 %192, i32 %193, i32 %194)
store i32 %195, i32* %42
%196 = load i32, i32* %42
%197 = load i32, i32* %43
%198 = load i32, i32* %37
%199 = load i32, i32* %38
%200 = call i32 @incY(i32 %196, i32 %197, i32 %198, i32 %199)
store i32 %200, i32* %43
%201 = load i32, i32* %41
%202 = add i32 %201, 1
store i32 %202, i32* %41
br label %203
203: ; preds = %186, %183
br label %204
204: ; preds = %203, %176
%205 = load i32, i32* %46
%206 = icmp eq i32 %205, 5
br i1 %206, label %207, label %232
207: ; preds = %204
%208 = load i32, i32* %41
%209 = load i32, i32* %39
%210 = icmp uge i32 %208, %209
br i1 %210, label %211, label %214
211: ; preds = %207
%212 = load i32*, i32** %33
store i32 -1, i32* %212
%213 = load i32*, i32** %34
store i32 -1, i32* %213
br label %231
214: ; preds = %207
%215 = load i32, i32* %42
%216 = load i32*, i32** %33
store i32 %215, i32* %216
%217 = load i32, i32* %43
%218 = load i32*, i32** %34
store i32 %217, i32* %218
%219 = load i32, i32* %42
%220 = load i32, i32* %43
%221 = load i32, i32* %37
%222 = load i32, i32* %38
%223 = call i32 @incX(i32 %219, i32 %220, i32 %221, i32 %222)
store i32 %223, i32* %42
%224 = load i32, i32* %42
%225 = load i32, i32* %43
%226 = load i32, i32* %37
%227 = load i32, i32* %38
%228 = call i32 @incY(i32 %224, i32 %225, i32 %226, i32 %227)
store i32 %228, i32* %43
%229 = load i32, i32* %41
%230 = add i32 %229, 1
store i32 %230, i32* %41
br label %231
231: ; preds = %214, %211
br label %232
232: ; preds = %231, %204
%233 = load i32, i32* %46
%234 = icmp eq i32 %233, 6
br i1 %234, label %235, label %260
235: ; preds = %232
%236 = load i32, i32* %41
%237 = load i32, i32* %39
%238 = icmp uge i32 %236, %237
br i1 %238, label %239, label %242
239: ; preds = %235
%240 = load i32*, i32** %35
store i32 -1, i32* %240
%241 = load i32*, i32** %36
store i32 -1, i32* %241
br label %259
242: ; preds = %235
%243 = load i32, i32* %42
%244 = load i32*, i32** %35
store i32 %243, i32* %244
%245 = load i32, i32* %43
%246 = load i32*, i32** %36
store i32 %245, i32* %246
%247 = load i32, i32* %42
%248 = load i32, i32* %43
%249 = load i32, i32* %37
%250 = load i32, i32* %38
%251 = call i32 @incX(i32 %247, i32 %248, i32 %249, i32 %250)
store i32 %251, i32* %42
%252 = load i32, i32* %42
%253 = load i32, i32* %43
%254 = load i32, i32* %37
%255 = load i32, i32* %38
%256 = call i32 @incY(i32 %252, i32 %253, i32 %254, i32 %255)
store i32 %256, i32* %43
%257 = load i32, i32* %41
%258 = add i32 %257, 1
store i32 %258, i32* %41
br label %259
259: ; preds = %242, %239
br label %260
260: ; preds = %259, %232
br label %261
261: ; preds = %260
%262 = load i32, i32* %45
%263 = add nsw i32 %262, 1
store i32 %263, i32* %45
br label %56
264: ; preds = %56
ret void
}

LLVM IR (-O2):
define void @localIDGenerator(i32* nocapture %0, i32* nocapture %1, i32* nocapture %2, i32* nocapture %3, i32* nocapture writeonly %4, i32* nocapture writeonly %5, i32* nocapture writeonly %6, i32* nocapture writeonly %7, i32* nocapture writeonly %8, i32* nocapture writeonly %9, i32* nocapture writeonly %10, i32* nocapture writeonly %11, i32* nocapture writeonly %12, i32* nocapture writeonly %13, i32* nocapture writeonly %14, i32* nocapture writeonly %15, i32* nocapture writeonly %16, i32* nocapture writeonly %17) {
%19 = load i32, i32* %0
%20 = load i32, i32* %1
%21 = mul nsw i32 %20, %19
%22 = load i32, i32* %2
%23 = add i32 %21, %22
%24 = icmp eq i32 %23, 0
br i1 %24, label %86, label %25
25: ; preds = %18, %80
%26 = phi i32 [ %83, %80 ], [ 0, %18 ]
%27 = phi i32 [ %84, %80 ], [ 0, %18 ]
%28 = phi i32 [ %82, %80 ], [ 0, %18 ]
%29 = phi i32 [ %81, %80 ], [ 0, %18 ]
%30 = load i32, i32* %3
switch i32 %30, label %80 [
i32 0, label %31
i32 1, label %38
i32 2, label %45
i32 3, label %52
i32 4, label %59
i32 5, label %66
i32 6, label %73
]
31: ; preds = %25
%32 = icmp ult i32 %26, %21
br i1 %32, label %34, label %33
33: ; preds = %31
store i32 -1, i32* %4
store i32 -1, i32* %5
br label %80
34: ; preds = %31
store i32 %28, i32* %4
store i32 %29, i32* %5
%35 = tail call i32 @incX(i32 %28, i32 %29, i32 %19, i32 %20)
%36 = tail call i32 @incY(i32 %35, i32 %29, i32 %19, i32 %20)
%37 = add nuw i32 %26, 1
br label %80
38: ; preds = %25
%39 = icmp ult i32 %26, %21
br i1 %39, label %41, label %40
40: ; preds = %38
store i32 -1, i32* %6
store i32 -1, i32* %7
br label %80
41: ; preds = %38
store i32 %28, i32* %6
store i32 %29, i32* %7
%42 = tail call i32 @incX(i32 %28, i32 %29, i32 %19, i32 %20)
%43 = tail call i32 @incY(i32 %42, i32 %29, i32 %19, i32 %20)
%44 = add nuw i32 %26, 1
br label %80
45: ; preds = %25
%46 = icmp ult i32 %26, %21
br i1 %46, label %48, label %47
47: ; preds = %45
store i32 -1, i32* %8
store i32 -1, i32* %9
br label %80
48: ; preds = %45
store i32 %28, i32* %8
store i32 %29, i32* %9
%49 = tail call i32 @incX(i32 %28, i32 %29, i32 %19, i32 %20)
%50 = tail call i32 @incY(i32 %49, i32 %29, i32 %19, i32 %20)
%51 = add nuw i32 %26, 1
br label %80
52: ; preds = %25
%53 = icmp ult i32 %26, %21
br i1 %53, label %55, label %54
54: ; preds = %52
store i32 -1, i32* %10
store i32 -1, i32* %11
br label %80
55: ; preds = %52
store i32 %28, i32* %10
store i32 %29, i32* %11
%56 = tail call i32 @incX(i32 %28, i32 %29, i32 %19, i32 %20)
%57 = tail call i32 @incY(i32 %56, i32 %29, i32 %19, i32 %20)
%58 = add nuw i32 %26, 1
br label %80
59: ; preds = %25
%60 = icmp ult i32 %26, %21
br i1 %60, label %62, label %61
61: ; preds = %59
store i32 -1, i32* %12
store i32 -1, i32* %13
br label %80
62: ; preds = %59
store i32 %28, i32* %12
store i32 %29, i32* %13
%63 = tail call i32 @incX(i32 %28, i32 %29, i32 %19, i32 %20)
%64 = tail call i32 @incY(i32 %63, i32 %29, i32 %19, i32 %20)
%65 = add nuw i32 %26, 1
br label %80
66: ; preds = %25
%67 = icmp ult i32 %26, %21
br i1 %67, label %69, label %68
68: ; preds = %66
store i32 -1, i32* %14
store i32 -1, i32* %15
br label %80
69: ; preds = %66
store i32 %28, i32* %14
store i32 %29, i32* %15
%70 = tail call i32 @incX(i32 %28, i32 %29, i32 %19, i32 %20)
%71 = tail call i32 @incY(i32 %70, i32 %29, i32 %19, i32 %20)
%72 = add nuw i32 %26, 1
br label %80
73: ; preds = %25
%74 = icmp ult i32 %26, %21
br i1 %74, label %76, label %75
75: ; preds = %73
store i32 -1, i32* %16
store i32 -1, i32* %17
br label %80
76: ; preds = %73
store i32 %28, i32* %16
store i32 %29, i32* %17
%77 = tail call i32 @incX(i32 %28, i32 %29, i32 %19, i32 %20)
%78 = tail call i32 @incY(i32 %77, i32 %29, i32 %19, i32 %20)
%79 = add nuw i32 %26, 1
br label %80
80: ; preds = %25, %34, %33, %41, %40, %48, %47, %55, %54, %62, %61, %69, %68, %75, %76
%81 = phi i32 [ %29, %75 ], [ %78, %76 ], [ %71, %69 ], [ %29, %68 ], [ %64, %62 ], [ %29, %61 ], [ %57, %55 ], [ %29, %54 ], [ %50, %48 ], [ %29, %47 ], [ %43, %41 ], [ %29, %40 ], [ %36, %34 ], [ %29, %33 ], [ %29, %25 ]
%82 = phi i32 [ %28, %75 ], [ %77, %76 ], [ %70, %69 ], [ %28, %68 ], [ %63, %62 ], [ %28, %61 ], [ %56, %55 ], [ %28, %54 ], [ %49, %48 ], [ %28, %47 ], [ %42, %41 ], [ %28, %40 ], [ %35, %34 ], [ %28, %33 ], [ %28, %25 ]
%83 = phi i32 [ %26, %75 ], [ %79, %76 ], [ %72, %69 ], [ %26, %68 ], [ %65, %62 ], [ %26, %61 ], [ %58, %55 ], [ %26, %54 ], [ %51, %48 ], [ %26, %47 ], [ %44, %41 ], [ %26, %40 ], [ %37, %34 ], [ %26, %33 ], [ %26, %25 ]
%84 = add nuw i32 %27, 1
%85 = icmp eq i32 %84, %23
br i1 %85, label %86, label %25
86: ; preds = %80, %18
ret void
}