6 #include <gtest/gtest.h>
14 TEST(ControlFlowGraphStructureTests, test_straightening)
28 bb1->add_outedge(bb2);
29 bb2->add_outedge(bb3);
30 bb3->add_outedge(cfg.
exit());
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);
49 TEST(ControlFlowGraphStructureTests, test_is_structured)
61 split->add_outedge(join);
62 split->add_outedge(bb);
63 bb->add_outedge(join);
64 join->add_outedge(cfg.
exit());
TEST(ControlFlowGraphStructureTests, test_straightening)
static std::unique_ptr< Argument > create(const std::string &name, std::shared_ptr< const jlm::rvsdg::Type > type, const AttributeSet &attributes)
ThreeAddressCode * last() const noexcept
static BasicBlock * create(ControlFlowGraph &cfg)
ControlFlowGraphNode * sink() const noexcept
ControlFlowGraphEdge * OutEdge(size_t n) const
void divert_inedges(llvm::ControlFlowGraphNode *new_successor)
static std::string ToAscii(const ControlFlowGraph &controlFlowGraph)
EntryNode * entry() const noexcept
ExitNode * exit() const noexcept
size_t nnodes() const noexcept
llvm::Argument * append_argument(std::unique_ptr< llvm::Argument > arg)
static std::unique_ptr< llvm::ThreeAddressCode > create(std::unique_ptr< rvsdg::SimpleOperation > operation, const std::vector< const Variable * > &operands)
static std::shared_ptr< const TestType > createValueType()
Global memory state passed between functions.
bool is_structured(const ControlFlowGraph &cfg)
void straighten(ControlFlowGraph &cfg)