14TEST(ControlFlowGraphStructureTests, test_straightening)
23 auto bb1 = BasicBlock::create(cfg);
24 auto bb2 = BasicBlock::create(cfg);
25 auto bb3 = BasicBlock::create(cfg);
28 bb1->add_outedge(bb2);
29 bb2->add_outedge(bb3);
30 bb3->add_outedge(cfg.
exit());
33 bb1->append_last(ThreeAddressCode::create(TestOperation::create({
vt }, {
vt }), { arg }));
34 bb2->append_last(ThreeAddressCode::create(TestOperation::create({
vt }, {
vt }), { arg }));
35 bb3->append_last(ThreeAddressCode::create(TestOperation::create({
vt }, {
vt }), { arg }));
37 auto bb3_last =
static_cast<const BasicBlock *
>(bb3)->tacs().
last();
40 EXPECT_EQ(cfg.
nnodes(), 1u);
43 EXPECT_TRUE(is<BasicBlock>(node));
44 auto & tacs =
static_cast<const BasicBlock *
>(node)->tacs();
45 EXPECT_EQ(tacs.ntacs(), 3u);
46 EXPECT_EQ(tacs.last(), bb3_last);
49TEST(ControlFlowGraphStructureTests, test_is_structured)
56 auto split = BasicBlock::create(cfg);
57 auto bb = BasicBlock::create(cfg);
58 auto join = BasicBlock::create(cfg);
61 split->add_outedge(join);
62 split->add_outedge(bb);
63 bb->add_outedge(join);
64 join->add_outedge(cfg.
exit());
66 std::cout << ControlFlowGraph::ToAscii(cfg) << std::flush;
67 EXPECT_TRUE(is_structured(cfg));
llvm::Argument * append_argument(std::unique_ptr< llvm::Argument > arg)