void barrier(int *numCore, unsigned int *icore0, unsigned int *icore1,
             unsigned int *icore2, unsigned int *icore3, unsigned int *icore4,
             unsigned int *icore5, unsigned int *icore6, unsigned int *ocore0,
             unsigned int *ocore1, unsigned int *ocore2, unsigned int *ocore3,
             unsigned int *ocore4, unsigned int *ocore5, unsigned int *ocore6) {
#pragma HLS INTERFACE s_axilite port = return bundle = BUS_CMD
#pragma HLS INTERFACE s_axilite register port = numCore bundle = BUS_CMD
#pragma HLS INTERFACE axis register port = icore0
#pragma HLS INTERFACE axis register port = icore1
#pragma HLS INTERFACE axis register port = icore2
#pragma HLS INTERFACE axis register port = icore3
#pragma HLS INTERFACE axis register port = icore4
#pragma HLS INTERFACE axis register port = icore5
#pragma HLS INTERFACE axis register port = icore6
#pragma HLS INTERFACE axis register port = ocore0
#pragma HLS INTERFACE axis register port = ocore1
#pragma HLS INTERFACE axis register port = ocore2
#pragma HLS INTERFACE axis register port = ocore3
#pragma HLS INTERFACE axis register port = ocore4
#pragma HLS INTERFACE axis register port = ocore5
#pragma HLS INTERFACE axis register port = ocore6
  unsigned int in0 = 0;
  unsigned int in1 = 0;
  unsigned int in2 = 0;
  unsigned int in3 = 0;
  unsigned int in4 = 0;
  unsigned int in5 = 0;
  unsigned int in6 = 0;
  unsigned int trigger = 0;
  unsigned int num;
  num = *numCore;
  if (num == 1) {
    in0 = *icore0;
    if ((in0 == 1)) {
      *ocore0 = in0;
    }
  }
  if (num == 2) {
    in0 = *icore0;
    in1 = *icore1;
    if ((in0 == 1) && (in1 == 1)) {
      *ocore0 = in0;
      *ocore1 = in1;
    }
  }
  if (num == 3) {
    in0 = *icore0;
    in1 = *icore1;
    in2 = *icore2;
    if ((in0 == 1) && (in1 == 1) && (in2 == 1)) {
      *ocore0 = in0;
      *ocore1 = in1;
      *ocore2 = in2;
    }
  }
  if (num == 4) {
    in0 = *icore0;
    in1 = *icore1;
    in2 = *icore2;
    in3 = *icore3;
    if ((in0 == 1) && (in1 == 1) && (in2 == 1) && (in3 == 1)) {
      *ocore0 = in0;
      *ocore1 = in1;
      *ocore2 = in2;
      *ocore3 = in3;
    }
  }
  if (num == 5) {
    in0 = *icore0;
    in1 = *icore1;
    in2 = *icore2;
    in3 = *icore3;
    in4 = *icore4;
    if ((in0 == 1) && (in1 == 1) && (in2 == 1) && (in3 == 1) && (in4 == 1)) {
      *ocore0 = in0;
      *ocore1 = in1;
      *ocore2 = in2;
      *ocore3 = in3;
      *ocore4 = in4;
    }
  }
  if (num == 6) {
    in0 = *icore0;
    in1 = *icore1;
    in2 = *icore2;
    in3 = *icore3;
    in4 = *icore4;
    in5 = *icore5;
    if ((in0 == 1) && (in1 == 1) && (in2 == 1) && (in3 == 1) && (in4 == 1) &&
        (in5 == 1)) {
      *ocore0 = in0;
      *ocore1 = in1;
      *ocore2 = in2;
      *ocore3 = in3;
      *ocore4 = in4;
      *ocore5 = in5;
    }
  }
  if (num == 7) {
    in0 = *icore0;
    in1 = *icore1;
    in2 = *icore2;
    in3 = *icore3;
    in4 = *icore4;
    in5 = *icore5;
    in6 = *icore6;
    if ((in0 == 1) && (in1 == 1) && (in2 == 1) && (in3 == 1) && (in4 == 1) &&
        (in5 == 1) && (in6 == 1)) {
      *ocore0 = in0;
      *ocore1 = in1;
      *ocore2 = in2;
      *ocore3 = in3;
      *ocore4 = in4;
      *ocore5 = in5;
      *ocore6 = in6;
    }
  }
}


x86 assembly (clang, -O0):
<barrier>:
push   %rbp
mov    %rsp,%rbp
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)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0x0,-0x50(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x54(%rbp)
cmpl   $0x1,-0x54(%rbp)
jne    11ac <barrier+0xac>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x1,-0x34(%rbp)
jne    11a7 <barrier+0xa7>
mov    -0x34(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    11ac <barrier+0xac>
cmpl   $0x2,-0x54(%rbp)
jne    11f3 <barrier+0xf3>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x1,-0x34(%rbp)
jne    11ee <barrier+0xee>
cmpl   $0x1,-0x38(%rbp)
jne    11ee <barrier+0xee>
mov    -0x34(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x38(%rbp),%ecx
mov    0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    11f3 <barrier+0xf3>
cmpl   $0x3,-0x54(%rbp)
jne    1256 <barrier+0x156>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x1,-0x34(%rbp)
jne    1251 <barrier+0x151>
cmpl   $0x1,-0x38(%rbp)
jne    1251 <barrier+0x151>
cmpl   $0x1,-0x3c(%rbp)
jne    1251 <barrier+0x151>
mov    -0x34(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x38(%rbp),%ecx
mov    0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x3c(%rbp),%ecx
mov    0x30(%rbp),%rax
mov    %ecx,(%rax)
jmp    1256 <barrier+0x156>
cmpl   $0x4,-0x54(%rbp)
jne    12d5 <barrier+0x1d5>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x1,-0x34(%rbp)
jne    12d0 <barrier+0x1d0>
cmpl   $0x1,-0x38(%rbp)
jne    12d0 <barrier+0x1d0>
cmpl   $0x1,-0x3c(%rbp)
jne    12d0 <barrier+0x1d0>
cmpl   $0x1,-0x40(%rbp)
jne    12d0 <barrier+0x1d0>
mov    -0x34(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x38(%rbp),%ecx
mov    0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x3c(%rbp),%ecx
mov    0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%ecx
mov    0x38(%rbp),%rax
mov    %ecx,(%rax)
jmp    12d5 <barrier+0x1d5>
cmpl   $0x5,-0x54(%rbp)
jne    1370 <barrier+0x270>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x1,-0x34(%rbp)
jne    136b <barrier+0x26b>
cmpl   $0x1,-0x38(%rbp)
jne    136b <barrier+0x26b>
cmpl   $0x1,-0x3c(%rbp)
jne    136b <barrier+0x26b>
cmpl   $0x1,-0x40(%rbp)
jne    136b <barrier+0x26b>
cmpl   $0x1,-0x44(%rbp)
jne    136b <barrier+0x26b>
mov    -0x34(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x38(%rbp),%ecx
mov    0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x3c(%rbp),%ecx
mov    0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%ecx
mov    0x38(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%ecx
mov    0x40(%rbp),%rax
mov    %ecx,(%rax)
jmp    1370 <barrier+0x270>
cmpl   $0x6,-0x54(%rbp)
jne    1427 <barrier+0x327>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x44(%rbp)
mov    0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x1,-0x34(%rbp)
jne    1422 <barrier+0x322>
cmpl   $0x1,-0x38(%rbp)
jne    1422 <barrier+0x322>
cmpl   $0x1,-0x3c(%rbp)
jne    1422 <barrier+0x322>
cmpl   $0x1,-0x40(%rbp)
jne    1422 <barrier+0x322>
cmpl   $0x1,-0x44(%rbp)
jne    1422 <barrier+0x322>
cmpl   $0x1,-0x48(%rbp)
jne    1422 <barrier+0x322>
mov    -0x34(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x38(%rbp),%ecx
mov    0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x3c(%rbp),%ecx
mov    0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%ecx
mov    0x38(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%ecx
mov    0x40(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%ecx
mov    0x48(%rbp),%rax
mov    %ecx,(%rax)
jmp    1427 <barrier+0x327>
cmpl   $0x7,-0x54(%rbp)
jne    14fa <barrier+0x3fa>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x44(%rbp)
mov    0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x48(%rbp)
mov    0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x1,-0x34(%rbp)
jne    14f5 <barrier+0x3f5>
cmpl   $0x1,-0x38(%rbp)
jne    14f5 <barrier+0x3f5>
cmpl   $0x1,-0x3c(%rbp)
jne    14f5 <barrier+0x3f5>
cmpl   $0x1,-0x40(%rbp)
jne    14f5 <barrier+0x3f5>
cmpl   $0x1,-0x44(%rbp)
jne    14f5 <barrier+0x3f5>
cmpl   $0x1,-0x48(%rbp)
jne    14f5 <barrier+0x3f5>
cmpl   $0x1,-0x4c(%rbp)
jne    14f5 <barrier+0x3f5>
mov    -0x34(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x38(%rbp),%ecx
mov    0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x3c(%rbp),%ecx
mov    0x30(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%ecx
mov    0x38(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%ecx
mov    0x40(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x48(%rbp),%ecx
mov    0x48(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4c(%rbp),%ecx
mov    0x50(%rbp),%rax
mov    %ecx,(%rax)
jmp    14fa <barrier+0x3fa>
pop    %rbp
ret

x86 assembly (clang, -O2):
<barrier>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    (%rdi),%ebx
add    $0xffffffff,%ebx
cmp    $0x6,%ebx
ja     12cd <barrier+0x1cd>
mov    0x68(%rsp),%r12
mov    0x60(%rsp),%r14
mov    0x58(%rsp),%r11
mov    0x50(%rsp),%r10
mov    0x48(%rsp),%r13
mov    0x40(%rsp),%rax
mov    0x30(%rsp),%r15
lea    0xebf(%rip),%rdi
movslq (%rdi,%rbx,4),%rbx
add    %rdi,%rbx
jmp    *%rbx
cmpl   $0x1,(%rsi)
je     12c7 <barrier+0x1c7>
jmp    12cd <barrier+0x1cd>
cmpl   $0x1,(%rsi)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rdx)
je     12be <barrier+0x1be>
jmp    12cd <barrier+0x1cd>
cmpl   $0x1,(%rsi)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rdx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rcx)
je     12b2 <barrier+0x1b2>
jmp    12cd <barrier+0x1cd>
cmpl   $0x1,(%rsi)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rdx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rcx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r8)
je     12a3 <barrier+0x1a3>
jmp    12cd <barrier+0x1cd>
cmpl   $0x1,(%rsi)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rdx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rcx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r8)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r9)
je     1291 <barrier+0x191>
jmp    12cd <barrier+0x1cd>
cmpl   $0x1,(%rsi)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rdx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rcx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r8)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r9)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r15)
je     127c <barrier+0x17c>
jmp    12cd <barrier+0x1cd>
cmpl   $0x1,(%rsi)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rdx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%rcx)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r8)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r9)
jne    12cd <barrier+0x1cd>
cmpl   $0x1,(%r15)
jne    12cd <barrier+0x1cd>
mov    0x38(%rsp),%rcx
cmpl   $0x1,(%rcx)
jne    12cd <barrier+0x1cd>
movl   $0x1,(%rax)
mov    %r13,%rax
mov    %r10,%r13
mov    %r11,%r10
mov    %r14,%r11
mov    %r12,%r14
mov    0x70(%rsp),%r12
movl   $0x1,(%rax)
mov    %r13,%rax
mov    %r10,%r13
mov    %r11,%r10
mov    %r14,%r11
mov    %r12,%r14
movl   $0x1,(%rax)
mov    %r13,%rax
mov    %r10,%r13
mov    %r11,%r10
mov    %r14,%r11
movl   $0x1,(%rax)
mov    %r13,%rax
mov    %r10,%r13
mov    %r11,%r10
movl   $0x1,(%rax)
mov    %r13,%rax
mov    %r10,%r13
movl   $0x1,(%rax)
mov    %r13,%rax
movl   $0x1,(%rax)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

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

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