// File: /workspace/github_c_makefile_star2_O0/oridb[P]mc/6/ra.c
// Function: regalloc
void
regalloc(Isel *s)
{
	int spilled;
	size_t i;
	Loc **aliasmap;

	/* Initialize the list of prepainted registers */
	s->prepainted = mkbs();
	bsput(s->prepainted, 0);
	for (i = 0; i < Nreg; i++)
		bsput(s->prepainted, i);

	s->shouldspill = mkbs();
	s->neverspill = mkbs();
	s->initial = mkbs();
	for (i = 0; i < s->nsaved; i++)
		bsput(s->shouldspill, s->calleesave[i]->reg.id);
	do {
		aliasmap = NULL;
		setup(s);
		liveness(s);
		build(s);
		mkworklist(s);
		if (debugopt['r'])
			dumpasm(s, stdout);
		do {
			if (s->nwlsimp)
				simp(s);
			else if (s->nwlmove)
				coalesce(s);
			else if (s->nwlfreeze)
				freeze(s);
			else if (s->nwlspill) {
				if (!aliasmap)
					aliasmap = memdup(s->aliasmap, s->nreg * sizeof(Loc*));
				selspill(s);
			}
		} while (s->nwlsimp || s->nwlmove || s->nwlfreeze || s->nwlspill);
		spilled = paint(s);
		if (spilled)
			rewrite(s, aliasmap);
	} while (spilled);
	delnops(s);
	bsfree(s->prepainted);
	bsfree(s->shouldspill);
	bsfree(s->neverspill);
	gfree(s);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
callq 0x48650
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x4c0(%rax)
movq -0x8(%rbp), %rax
movq 0x4c0(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x48a50
movq $0x0, -0x18(%rbp)
cmpq $0x66, -0x18(%rbp)
jae 0x11344
movq -0x8(%rbp), %rax
movq 0x4c0(%rax), %rdi
movq -0x18(%rbp), %rsi
callq 0x48a50
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x1131b
callq 0x48650
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x3f0(%rax)
callq 0x48650
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x3f8(%rax)
callq 0x48650
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x4c8(%rax)
movq $0x0, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x3a8(%rcx), %rax
jae 0x113c5
movq -0x8(%rbp), %rax
movq 0x3f0(%rax), %rdi
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x78(%rax,%rcx,8), %rax
movq 0x10(%rax), %rsi
callq 0x48a50
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x11385
jmp 0x113c7
movq $0x0, -0x20(%rbp)
movq -0x8(%rbp), %rdi
callq 0x11580
movq -0x8(%rbp), %rdi
callq 0x11850
movq -0x8(%rbp), %rdi
callq 0x11ac0
movq -0x8(%rbp), %rdi
callq 0x126d0
leaq 0x6b906(%rip), %rax     # 0x7cd00
cmpb $0x0, 0x72(%rax)
je 0x11413
movq -0x8(%rbp), %rdi
movq 0x4dbc5(%rip), %rax     # 0x5efd0
movq (%rax), %rsi
callq 0x12810
jmp 0x11415
movq -0x8(%rbp), %rax
cmpq $0x0, 0x498(%rax)
je 0x1142e
movq -0x8(%rbp), %rdi
callq 0x12ba0
jmp 0x114a7
movq -0x8(%rbp), %rax
cmpq $0x0, 0x468(%rax)
je 0x11447
movq -0x8(%rbp), %rdi
callq 0x12c70
jmp 0x114a5
movq -0x8(%rbp), %rax
cmpq $0x0, 0x488(%rax)
je 0x11460
movq -0x8(%rbp), %rdi
callq 0x12e50
jmp 0x114a3
movq -0x8(%rbp), %rax
cmpq $0x0, 0x478(%rax)
je 0x114a1
cmpq $0x0, -0x20(%rbp)
jne 0x11498
movq -0x8(%rbp), %rax
movq 0x3e8(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x3d0(%rax), %rsi
shlq $0x3, %rsi
callq 0x485f0
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
callq 0x12eb0
jmp 0x114a3
jmp 0x114a5
jmp 0x114a7
jmp 0x114a9
movq -0x8(%rbp), %rcx
movb $0x1, %al
cmpq $0x0, 0x498(%rcx)
movb %al, -0x21(%rbp)
jne 0x114f4
movq -0x8(%rbp), %rcx
movb $0x1, %al
cmpq $0x0, 0x468(%rcx)
movb %al, -0x21(%rbp)
jne 0x114f4
movq -0x8(%rbp), %rcx
movb $0x1, %al
cmpq $0x0, 0x488(%rcx)
movb %al, -0x21(%rbp)
jne 0x114f4
movq -0x8(%rbp), %rax
cmpq $0x0, 0x478(%rax)
setne %al
movb %al, -0x21(%rbp)
movb -0x21(%rbp), %al
testb $0x1, %al
jne 0x11415
movq -0x8(%rbp), %rdi
callq 0x13060
movl %eax, -0xc(%rbp)
cmpl $0x0, -0xc(%rbp)
je 0x1151e
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13350
jmp 0x11520
cmpl $0x0, -0xc(%rbp)
jne 0x113c7
movq -0x8(%rbp), %rdi
callq 0x13430
movq -0x8(%rbp), %rax
movq 0x4c0(%rax), %rdi
callq 0x48690
movq -0x8(%rbp), %rax
movq 0x3f0(%rax), %rdi
callq 0x48690
movq -0x8(%rbp), %rax
movq 0x3f8(%rax), %rdi
callq 0x48690
movq -0x8(%rbp), %rdi
callq 0x13570
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)