コード例 #1
0
ファイル: cfg-analyzer-test.c プロジェクト: headius/jato
void test_branch_opcode_ends_basic_block(void)
{
	struct basic_block *bb1, *bb2, *bb3;
	struct compilation_unit *cu;
	struct cafebabe_method_info method_info;
	struct vm_method method = {
		.code_attribute.code = default_string,
		.code_attribute.code_length = ARRAY_SIZE(default_string),
		.method = &method_info,
	};
	
	cu = compilation_unit_alloc(&method);

	analyze_control_flow(cu);

	assert_int_equals(3, nr_bblocks(cu));

	bb1 = bb_entry(cu->bb_list.next);
	bb2 = bb_entry(bb1->bb_list_node.next);
	bb3 = bb_entry(bb2->bb_list_node.next);

	assert_basic_block(cu, 0, 4, bb1);
	assert_basic_block(cu, 4, 7, bb2);
	assert_basic_block(cu, 7, 9, bb3);

	assert_basic_block_successors((struct basic_block*[]){bb2, bb3}, 2, bb1);
	assert_basic_block_successors((struct basic_block*[]){bb3     }, 1, bb2);
コード例 #2
0
ファイル: switch-bc-test.c プロジェクト: jiangecho/jato
void test_convert_tableswitch_bbs1(void)
{
	struct basic_block *bb0, *bb1, *bb2, *bb3, *bb4, *bb5, *bb6;
	struct compilation_unit *cu;

	struct cafebabe_method_info method_info;
	struct vm_method method = {
		.code_attribute.code = tableswitch1,
		.code_attribute.code_length = ARRAY_SIZE(tableswitch1),
		.method = &method_info,
	};

	memset(&method_info, 0, sizeof(method_info));

	cu = compilation_unit_alloc(&method);

	analyze_control_flow(cu);
	convert_to_ir(cu);
	assert_int_equals(7, nr_bblocks(cu));

	bb0 = bb_entry(cu->bb_list.next);
	bb1 = bb_entry(bb0->bb_list_node.next);
	bb2 = bb_entry(bb1->bb_list_node.next);
	bb3 = bb_entry(bb2->bb_list_node.next);
	bb4 = bb_entry(bb3->bb_list_node.next);
	bb5 = bb_entry(bb4->bb_list_node.next);
	bb6 = bb_entry(bb5->bb_list_node.next);

	assert_basic_block_successors((struct basic_block*[]){bb6, bb1}, 2, bb0);
	assert_basic_block_successors((struct basic_block*[]){bb6, bb2}, 2, bb1);