// File: /workspace/github_c_makefile_star2_O0/oridb[P]mc/mi/dfcheck.c
// Function: checkundef
static void
checkundef(Node *n, Reaching *r, Bitset *reach, Bitset *kill)
{
	size_t i, j, did;
	Node *def;
	Type *t;

	if (n->type != Nexpr)
		return;
	if (exprop(n) == Ovar) {
		did = n->expr.did;
		if (decls[did]->decl.isconst)
			return;
		for (j = 0; j < r->ndefs[did]; j++) {
			t = tybase(exprtype(n));
			if (t->type == Tystruct || t->type == Tyunion || t->type == Tyarray ||
				t->type == Tytuple || t->type == Tyvoid)
				continue;
			if (bshas(kill, r->defs[did][j]))
				continue;
			if (!bshas(reach, r->defs[did][j]))
				continue;
			def = nodes[r->defs[did][j]];
			if (exprop(def) == Oundef)
				fatal(n, "%s used before definition", namestr(n->expr.args[0]));
		}
	} else {
		switch (exprop(n)) {
		case Oset:
		case Oasn:
		case Oblit:
			checkundef(n->expr.args[1], r, reach, kill);
			break;
		case Oaddr:
		case Oslice:
			/* these don't actually look at the value of args[0], so they're ok. */
			for (i = 1; i < n->expr.nargs; i++)
				checkundef(n->expr.args[i], r, reach, kill);
			break;
		case Ocall:
			for (i = 1; i < n->expr.nargs; i++)
				if (exprop(n->expr.args[i]) != Oaddr)
					checkundef(n->expr.args[i], r, reach, kill);
			break;
		default:
			for (i = 0; i < n->expr.nargs; i++)
				checkundef(n->expr.args[i], r, reach, kill);
			break;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
cmpl $0x8, 0x8(%rax)
je 0x44267
jmp 0x44542
movq -0x8(%rbp), %rdi
callq 0x2f210
cmpl $0x33, %eax
jne 0x443db
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x38(%rbp)
leaq 0x391fc(%rip), %rax     # 0x7d488
movq (%rax), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rax
cmpb $0x0, 0x72(%rax)
je 0x442a2
jmp 0x44542
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x38(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x443d6
movq -0x8(%rbp), %rdi
callq 0x30340
movq %rax, %rdi
callq 0x36a30
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpl $0x17, (%rax)
je 0x44306
movq -0x48(%rbp), %rax
cmpl $0x18, (%rax)
je 0x44306
movq -0x48(%rbp), %rax
cmpl $0x15, (%rax)
je 0x44306
movq -0x48(%rbp), %rax
cmpl $0x16, (%rax)
je 0x44306
movq -0x48(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x4430b
jmp 0x443c5
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x44550
cmpl $0x0, %eax
je 0x44336
jmp 0x443c5
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x44550
cmpl $0x0, %eax
jne 0x4435e
jmp 0x443c5
leaq 0x3910b(%rip), %rax     # 0x7d470
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x38(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq -0x30(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
callq 0x2f210
cmpl $0x3c, %eax
jne 0x443c3
movq -0x8(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq (%rax), %rdi
callq 0x30600
movq -0x50(%rbp), %rdi
movq %rax, %rdx
leaq 0x10d4b(%rip), %rsi     # 0x55107
movb $0x0, %al
callq 0x1dfe0
jmp 0x443c5
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x442aa
jmp 0x44542
movq -0x8(%rbp), %rdi
callq 0x2f210
movl %eax, %ecx
movl %ecx, -0x54(%rbp)
subl $0x12, %eax
je 0x4444c
jmp 0x443f0
movl -0x54(%rbp), %eax
subl $0x1d, %eax
je 0x4442a
jmp 0x443fa
movl -0x54(%rbp), %eax
subl $0x29, %eax
je 0x4444c
jmp 0x44404
movl -0x54(%rbp), %eax
subl $0x2d, %eax
je 0x44496
jmp 0x44412
movl -0x54(%rbp), %eax
subl $0x40, %eax
je 0x4442a
jmp 0x4441c
movl -0x54(%rbp), %eax
subl $0x46, %eax
jne 0x444f9
jmp 0x4442a
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq 0x8(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x44240
jmp 0x44540
movq $0x1, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x40(%rcx), %rax
jae 0x44491
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x44240
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x44454
jmp 0x44540
movq $0x1, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x40(%rcx), %rax
jae 0x444f7
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x2f210
cmpl $0x12, %eax
je 0x444e7
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x44240
jmp 0x444e9
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x4449e
jmp 0x44540
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x40(%rcx), %rax
jae 0x4453e
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x44240
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x44501
jmp 0x44540
jmp 0x44542
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax,%rax)