Jlm
Loading...
Searching...
No Matches
CfgOrderingsTests.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2018 Nico Reißmann <nico.reissmann@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
6#include <gtest/gtest.h>
7
8#include <jlm/llvm/ir/cfg.hpp>
10
11TEST(ControlFlowGraphOrderTests, test)
12{
13 using namespace jlm::llvm;
14
15 // Arrange
17
18 ControlFlowGraph cfg(im);
19 auto bb0 = BasicBlock::create(cfg);
20 auto bb1 = BasicBlock::create(cfg);
21 auto bb2 = BasicBlock::create(cfg);
22 auto bb3 = BasicBlock::create(cfg);
23
24 cfg.exit()->divert_inedges(bb0);
25 bb0->add_outedge(bb1);
26 bb0->add_outedge(bb2);
27 bb1->add_outedge(bb3);
28 bb2->add_outedge(bb3);
29 bb3->add_outedge(cfg.exit());
30
31 // check orderings
32 std::vector<ControlFlowGraphNode *> po1({ cfg.exit(), bb3, bb2, bb1, bb0, cfg.entry() });
33 std::vector<ControlFlowGraphNode *> po2({ cfg.exit(), bb3, bb1, bb2, bb0, cfg.entry() });
34 EXPECT_TRUE(postorder(cfg) == po1 || postorder(cfg) == po2);
35
36 std::vector<ControlFlowGraphNode *> rpo1({ cfg.entry(), bb0, bb1, bb2, bb3, cfg.exit() });
37 std::vector<ControlFlowGraphNode *> rpo2({ cfg.entry(), bb0, bb2, bb1, bb3, cfg.exit() });
38 EXPECT_TRUE(reverse_postorder(cfg) == rpo1 || reverse_postorder(cfg) == rpo2);
39}
TEST(ControlFlowGraphOrderTests, test)
void divert_inedges(llvm::ControlFlowGraphNode *new_successor)
Definition cfg-node.hpp:171
ExitNode * exit() const noexcept
Definition cfg.hpp:212
EntryNode * entry() const noexcept
Definition cfg.hpp:206
Global memory state passed between functions.