// File: /workspace/github_c_makefile_star2_O0/pwelke[P]GraphMiningTools/localEasySubtreeIsomorphism.c
// Function: subtreeCheckForOneBlockSpanningTree
static void subtreeCheckForOneBlockSpanningTree(struct SubtreeIsoDataStore* current, struct SpanningtreeTree* sptTree, int blockDoesNotContainGlobalRoot, struct GraphPool* gp) {

	struct Graph* g = current->g;
	struct Graph* h = current->h;


	struct CachedGraph* cachedB = initCachedGraph(gp, h->n);

	current->foundIso = 0;
	// we can skip the computation if w = v, unless v is the global root of the graph
	// v is the last vertex in the postorder.
	for (int wi=0; wi<g->n-blockDoesNotContainGlobalRoot; ++wi) {
		struct Vertex* w = g->vertices[current->postorder[wi]];

		for (int ui=0; ui<h->n; ++ui) {
			struct Vertex* u = h->vertices[ui];

			// check if vertex labels match
			if (labelCmp(u->label, w->label) != 0) { continue; }

			// if w is not a root, life is easy, we do not need to process all \theta \in \Theta_{vw}
			// if w = v (i.e. if it is the global root) we just compute characteristics in the current spanning tree
			if ((w->d == -1) || (w->number == 0)) {
				computeCharacteristics(current, NULL, cachedB, u, w, NULL, gp);
				if (current->foundIso) {
					dumpCachedGraph(cachedB);
					return;
				}

			} else {
				// if w is a root unequal v
				// loop over the spanning trees of the w-rooted components
				for (struct SupportSetElement* e=sptTree->characteristics[w->d]->first; e!=NULL; e=e->next) {
//					if (e->next) {
//						fprintf(stderr, "processing multiple children at v=%i for w=%i\n", g->vertices[0]->d, w->d);
//					}
					struct Vertex* wBelow = e->data.g->vertices[0];
					computeCharacteristics(current, &(e->data), cachedB, u, w, wBelow, gp);
					if (current->foundIso) {
						dumpCachedGraph(cachedB);
						return;
					}
				}
			}
		}
	}
	dumpCachedGraph(cachedB);
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movl %edx, 0x64(%rsp)
movq %rcx, 0x58(%rsp)
movq 0x70(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x50(%rsp)
movq 0x70(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x48(%rsp)
movq 0x58(%rsp), %rdi
movq 0x48(%rsp), %rax
movl (%rax), %esi
callq 0x2bb0
movq %rax, 0x40(%rsp)
movq 0x70(%rsp), %rax
movl $0x0, 0x20(%rax)
movl $0x0, 0x3c(%rsp)
movl 0x3c(%rsp), %eax
movq 0x50(%rsp), %rcx
movl (%rcx), %ecx
subl 0x64(%rsp), %ecx
cmpl %ecx, %eax
jge 0x183bb
movq 0x50(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x70(%rsp), %rcx
movq (%rcx), %rcx
movslq 0x3c(%rsp), %rdx
movslq (%rcx,%rdx,4), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x30(%rsp)
movl $0x0, 0x2c(%rsp)
movl 0x2c(%rsp), %eax
movq 0x48(%rsp), %rcx
cmpl (%rcx), %eax
jge 0x183a9
movq 0x48(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x2c(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq (%rax), %rdi
movq 0x30(%rsp), %rax
movq (%rax), %rsi
callq 0x2dcf0
cmpl $0x0, %eax
je 0x182a6
jmp 0x18399
movq 0x30(%rsp), %rax
cmpl $-0x1, 0x28(%rax)
je 0x182bc
movq 0x30(%rsp), %rax
cmpl $0x0, 0x18(%rax)
jne 0x18305
movq 0x70(%rsp), %rdi
movq 0x40(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x30(%rsp), %r8
movq 0x58(%rsp), %rax
xorl %esi, %esi
movl %esi, %r9d
movq %r9, %rsi
movq %rax, (%rsp)
callq 0x17a30
movq 0x70(%rsp), %rax
cmpl $0x0, 0x20(%rax)
je 0x18300
movq 0x40(%rsp), %rdi
callq 0x2db0
jmp 0x183c5
jmp 0x18397
movq 0x68(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x30(%rsp), %rcx
movslq 0x28(%rcx), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, 0x18(%rsp)
je 0x18395
movq 0x18(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x70(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x40(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x30(%rsp), %r8
movq 0x10(%rsp), %r9
movq 0x58(%rsp), %rax
movq %rax, (%rsp)
callq 0x17a30
movq 0x70(%rsp), %rax
cmpl $0x0, 0x20(%rax)
je 0x18383
movq 0x40(%rsp), %rdi
callq 0x2db0
jmp 0x183c5
jmp 0x18385
movq 0x18(%rsp), %rax
movq 0x28(%rax), %rax
movq %rax, 0x18(%rsp)
jmp 0x18323
jmp 0x18397
jmp 0x18399
movl 0x2c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2c(%rsp)
jmp 0x1825f
jmp 0x183ab
movl 0x3c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3c(%rsp)
jmp 0x1821d
movq 0x40(%rsp), %rdi
callq 0x2db0
addq $0x78, %rsp
retq
nopw (%rax,%rax)