// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/simplify.c
// Function: kill_insn
int kill_insn(struct instruction *insn, int force)
{
	if (!insn || !insn->bb)
		return 0;

	switch (insn->opcode) {
	case OP_SEL:
	case OP_RANGE:
		kill_use(&insn->src3);
		/* fall through */

	case OP_BINARY ... OP_BINCMP_END:
		kill_use(&insn->src2);
		/* fall through */

	case OP_UNOP ... OP_UNOP_END:
	case OP_SLICE:
	case OP_PHISOURCE:
	case OP_SYMADDR:
	case OP_CBR:
	case OP_SWITCH:
	case OP_COMPUTEDGOTO:
		kill_use(&insn->src1);
		break;

	case OP_PHI:
		kill_use_list(insn->phi_list);
		break;

	case OP_CALL:
		if (!force) {
			/* a "pure" function can be killed too */
			struct symbol *fntype = first_symbol(insn->fntypes);

			if (!(fntype->ctype.modifiers & MOD_PURE))
				return 0;
		}
		kill_use_list(insn->arguments);
		if (insn->func->type == PSEUDO_REG)
			kill_use(&insn->func);
		break;

	case OP_LOAD:
		if (!force && insn->is_volatile)
			return 0;
		kill_use(&insn->src);
		break;

	case OP_STORE:
		if (!force)
			return 0;
		kill_use(&insn->src);
		kill_use(&insn->target);
		break;

	case OP_ASM:
		if (!force)
			return 0;
		kill_asm(insn);
		break;

	case OP_ENTRY:
		/* ignore */
		return 0;

	case OP_BR:
	case OP_LABEL:
	case OP_SETVAL:
	case OP_SETFVAL:
	default:
		break;
	}

	insn->bb = NULL;
	return repeat_phase |= REPEAT_CSE;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x35281
movq -0x10(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x3528d
movl $0x0, -0x4(%rbp)
jmp 0x35411
movq -0x10(%rbp), %rax
movl (%rax), %eax
andl $0x7f, %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x28(%rbp)
subl $0x4f, %eax
ja 0x353eb
movq -0x28(%rbp), %rax
leaq 0x33462(%rip), %rcx     # 0x68714
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rdi
addq $0x30, %rdi
addq $0x10, %rdi
callq 0x35160
movq -0x10(%rbp), %rdi
addq $0x30, %rdi
addq $0x8, %rdi
callq 0x35160
jmp 0x352df
movq -0x10(%rbp), %rdi
addq $0x30, %rdi
callq 0x35160
jmp 0x353ed
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x35420
jmp 0x353ed
cmpl $0x0, -0x14(%rbp)
jne 0x3533c
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rdi
callq 0x354f0
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x68(%rax), %rax
andq $0x1000000, %rax        # imm = 0x1000000
cmpq $0x0, %rax
jne 0x3533a
movl $0x0, -0x4(%rbp)
jmp 0x35411
jmp 0x3533c
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x35420
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
cmpl $0x3, 0x4(%rax)
jne 0x35364
movq -0x10(%rbp), %rdi
addq $0x30, %rdi
callq 0x35160
jmp 0x353ed
cmpl $0x0, -0x14(%rbp)
jne 0x3538c
movq -0x10(%rbp), %rax
movb 0x40(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0x3538c
movl $0x0, -0x4(%rbp)
jmp 0x35411
movq -0x10(%rbp), %rdi
addq $0x30, %rdi
callq 0x35160
jmp 0x353ed
cmpl $0x0, -0x14(%rbp)
jne 0x353aa
movl $0x0, -0x4(%rbp)
jmp 0x35411
movq -0x10(%rbp), %rdi
addq $0x30, %rdi
callq 0x35160
movq -0x10(%rbp), %rdi
addq $0x20, %rdi
callq 0x35160
jmp 0x353ed
cmpl $0x0, -0x14(%rbp)
jne 0x353d5
movl $0x0, -0x4(%rbp)
jmp 0x35411
movq -0x10(%rbp), %rdi
callq 0x35510
jmp 0x353ed
movl $0x0, -0x4(%rbp)
jmp 0x35411
jmp 0x353eb
jmp 0x353ed
movq -0x10(%rbp), %rax
movq $0x0, 0x8(%rax)
leaq 0x57d54(%rip), %rax     # 0x8d154
movl (%rax), %eax
orl $0x1, %eax
leaq 0x57d48(%rip), %rcx     # 0x8d154
movl %eax, (%rcx)
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)