// File: /workspace/github_cpp_makefile_star2_O3/eryxcc[P]lois/tests/tutorial.cpp
// Function: lois::lsetof<lois::lpair<lois::term, lois::term>> reach<lois::lpair<lois::term, lois::term>>(lois::lsetof<lois::lpair<lois::lpair<lois::term, lois::term>, lois::lpair<lois::term, lois::term>>>, lois::lsetof<lois::lpair<lois::term, lois::term>>)
lsetof<T> reach 
  (lsetof<lpair<T,T>> E, 
     lsetof<T> S) {
  lsetof<T> R = S;
  lsetof<T> P;
  While (P!=R) {
    P = R;
    for (auto& e: E) 
      If (memberof(e.first, R))
        R += e.second;
  }
  return R;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movq %rsi, %r13
movq %rdi, 0x8(%rsp)
movq %rdx, %rsi
callq 0x313d0
leaq 0x188(%rsp), %rdi
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rdi)
movups %xmm0, (%rdi)
leaq 0x500df(%rip), %rsi     # 0x632c8
movq (%rsi), %rax
movq %rax, -0x8(%rdi)
addq $0x8, %rsi
callq 0x14586
leaq 0x500d8(%rip), %rdi     # 0x632d8
callq 0x35cb9
movl %eax, 0x4(%rsp)
leaq 0x500c8(%rip), %rdi     # 0x632d8
callq 0x35cbc
movb %al, 0x3(%rsp)
cmpb %al, 0x4(%rsp)
je 0x13576
leaq 0x28(%rsp), %r12
leaq 0x120(%rsp), %rbx
leaq 0xf0(%rsp), %rbp
leaq 0x10(%rsp), %r14
leaq 0x50(%rsp), %rdi
leaq 0x180(%rsp), %rsi
movq 0x8(%rsp), %rdx
callq 0x3159e
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rdi
movq %rax, 0x28(%rsp)
movq %rdi, 0x30(%rsp)
testq %rdi, %rdi
je 0x13286
movq 0x4fd54(%rip), %rax     # 0x62fc8
cmpb $0x0, (%rax)
je 0x13290
incl 0x8(%rdi)
movl $0x2, 0x38(%rsp)
jmp 0x132a6
movl $0x2, 0x38(%rsp)
jmp 0x132ab
lock
incl 0x8(%rdi)
movq 0x58(%rsp), %rdi
movl $0x2, 0x38(%rsp)
testq %rdi, %rdi
je 0x132ab
callq 0x13d46
leaq 0x60(%rsp), %rdi
movq %r12, %rsi
callq 0x35be4
leaq 0xc0(%rsp), %rdi
movq %r12, %rsi
callq 0x35c6b
movl 0x88(%rsp), %eax
cmpl 0xe8(%rsp), %eax
je 0x13503
addl $-0x4, %eax
cmpl $-0x2, %eax
jae 0x132f1
movl $0x0, 0x4(%rsp)
jmp 0x134f4
leaq 0x180(%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x315f4
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0x32d2c
leaq 0x150(%rsp), %rdi
movq %r13, %rsi
movl $0x77359400, %edx       # imm = 0x77359400
callq 0x32d2c
movslq 0x128(%rsp), %rax
testq %rax, %rax
js 0x13359
movq 0x120(%rsp), %rcx
movq 0x18(%rcx), %rdx
subq 0x10(%rcx), %rdx
sarq $0x4, %rdx
cmpq %rax, %rdx
jbe 0x13359
cmpl 0x158(%rsp), %eax
jne 0x13387
jmp 0x134df
movslq 0x158(%rsp), %rax
testq %rax, %rax
js 0x134df
movq 0x150(%rsp), %rcx
movq 0x18(%rcx), %rdx
subq 0x10(%rcx), %rdx
sarq $0x4, %rdx
cmpq %rax, %rdx
jbe 0x134df
movq %r12, %rbx
movq %r13, %r12
movq 0x130(%rsp), %r13
leaq 0x40(%rsp), %rdi
movq 0x8(%rsp), %rsi
movq %r13, %rdx
callq 0x31f98
movq 0x40(%rsp), %rax
movq 0x48(%rsp), %rdi
movq %rax, 0x10(%rsp)
movq %rdi, 0x18(%rsp)
testq %rdi, %rdi
je 0x133d9
movq 0x4fc01(%rip), %rax     # 0x62fc8
cmpb $0x0, (%rax)
je 0x133e3
incl 0x8(%rdi)
movl $0x0, 0x20(%rsp)
jmp 0x133f9
movl $0x0, 0x20(%rsp)
jmp 0x133fe
lock
incl 0x8(%rdi)
movq 0x48(%rsp), %rdi
movl $0x0, 0x20(%rsp)
testq %rdi, %rdi
je 0x133fe
callq 0x13d46
movq %rbp, %rdi
movq %r14, %r15
movq %r14, %rsi
callq 0x35be4
leaq 0x90(%rsp), %rdi
movq %r15, %rsi
callq 0x35c6b
addq $0x20, %r13
movl 0x118(%rsp), %eax
cmpl 0xb8(%rsp), %eax
je 0x1344f
addl $-0x4, %eax
cmpl $-0x3, %eax
ja 0x13445
movq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0x11ff0
movq %rbp, %rdi
callq 0x35bd0
jmp 0x13420
leaq 0x4dbe2(%rip), %rax     # 0x61038
movq %rax, 0x90(%rsp)
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x13470
callq 0x13d46
leaq 0x90(%rsp), %rdi
callq 0x13c96
leaq 0x4dbb4(%rip), %rax     # 0x61038
movq %rax, 0xf0(%rsp)
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
movq %r12, %r13
je 0x134a1
callq 0x13d46
movq %rbp, %rdi
callq 0x13c96
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
movq %rbx, %r12
je 0x134bb
callq 0x13d46
leaq 0x120(%rsp), %rbx
movq %rbx, %rdi
callq 0x33c92
incl 0x128(%rsp)
movq %rbx, %rdi
callq 0x32d78
jmp 0x13325
leaq 0x150(%rsp), %rdi
callq 0x318a8
movq %rbx, %rdi
callq 0x318a8
leaq 0x60(%rsp), %rdi
callq 0x35bd0
jmp 0x132c8
leaq 0x4db2e(%rip), %rax     # 0x61038
movq %rax, 0xc0(%rsp)
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x13524
callq 0x13d46
leaq 0xc0(%rsp), %rdi
callq 0x13c96
leaq 0x4db00(%rip), %rax     # 0x61038
movq %rax, 0x60(%rsp)
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x1354f
callq 0x13d46
leaq 0x60(%rsp), %rdi
callq 0x13c96
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x13568
callq 0x13d46
movb 0x3(%rsp), %al
cmpb %al, 0x4(%rsp)
jne 0x1323d
leaq 0x190(%rsp), %r14
movq %r14, %rdi
callq 0x14958
movq -0x8(%r14), %rdi
testq %rdi, %rdi
je 0x13594
callq 0x13d46
movq 0x8(%rsp), %rax
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x135b7
jmp 0x135b7
movq %rax, %r14
jmp 0x136cc
movq %rax, %r14
jmp 0x136db
movq %rax, %r14
jmp 0x136a4
jmp 0x135d3
movq %rax, %r14
jmp 0x13669
jmp 0x135d3
movq %rax, %r14
jmp 0x13676
movq %rax, %r14
jmp 0x1364d
movq %rax, %r14
jmp 0x1361f
jmp 0x135e7
movq %rax, %r14
jmp 0x1365c
jmp 0x135ee
movq %rax, %r14
leaq 0x4da40(%rip), %rax     # 0x61038
movq %rax, 0x90(%rsp)
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x13612
callq 0x13d46
leaq 0x90(%rsp), %rdi
callq 0x13c96
leaq 0x4da12(%rip), %rax     # 0x61038
movq %rax, 0xf0(%rsp)
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x13640
callq 0x13d46
leaq 0xf0(%rsp), %rdi
callq 0x13c96
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x1365c
callq 0x13d46
leaq 0x150(%rsp), %rdi
callq 0x318a8
leaq 0x120(%rsp), %rdi
callq 0x318a8
leaq 0x4d9bb(%rip), %rax     # 0x61038
movq %rax, 0xc0(%rsp)
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x13697
callq 0x13d46
leaq 0xc0(%rsp), %rdi
callq 0x13c96
leaq 0x4d98d(%rip), %rax     # 0x61038
movq %rax, 0x60(%rsp)
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x136c2
callq 0x13d46
leaq 0x60(%rsp), %rdi
callq 0x13c96
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x136db
callq 0x13d46
leaq 0x190(%rsp), %r15
movq %r15, %rdi
callq 0x14958
movq -0x8(%r15), %rdi
testq %rdi, %rdi
je 0x136f9
callq 0x13d46
movq 0x8(%rsp), %rbx
leaq 0x10(%rbx), %rdi
callq 0x14958
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x13715
callq 0x13d46
movq %r14, %rdi
callq 0x7420
nop