Jlm
Namespaces | Functions
cfg-structure.cpp File Reference
#include <jlm/llvm/ir/basic-block.hpp>
#include <jlm/llvm/ir/cfg-structure.hpp>
#include <jlm/llvm/ir/operators/operators.hpp>
#include <algorithm>
#include <unordered_map>
Include dependency graph for cfg-structure.cpp:

Go to the source code of this file.

Namespaces

 jlm
 
 jlm::llvm
 Global memory state passed between functions.
 

Functions

static void jlm::llvm::strongconnect (ControlFlowGraphNode *node, ControlFlowGraphNode *exit, std::unordered_map< ControlFlowGraphNode *, std::pair< size_t, size_t >> &map, std::vector< ControlFlowGraphNode * > &node_stack, size_t &index, std::vector< StronglyConnectedComponent > &sccs)
 
std::vector< StronglyConnectedComponent > jlm::llvm::find_sccs (const ControlFlowGraph &cfg)
 
std::vector< StronglyConnectedComponent > jlm::llvm::find_sccs (ControlFlowGraphNode *entry, ControlFlowGraphNode *exit)
 
static std::unique_ptr< ControlFlowGraph > jlm::llvm::copy_structural (const ControlFlowGraph &in)
 
static bool jlm::llvm::is_loop (const jlm::llvm::ControlFlowGraphNode *node) noexcept
 
static bool jlm::llvm::is_linear_reduction (const jlm::llvm::ControlFlowGraphNode *node) noexcept
 
static jlm::llvm::ControlFlowGraphNodejlm::llvm::find_join (const jlm::llvm::ControlFlowGraphNode *split) noexcept
 
static bool jlm::llvm::is_branch (const jlm::llvm::ControlFlowGraphNode *split) noexcept
 
static bool jlm::llvm::is_proper_branch (const jlm::llvm::ControlFlowGraphNode *split) noexcept
 
static bool jlm::llvm::is_T1 (const jlm::llvm::ControlFlowGraphNode *node) noexcept
 
static bool jlm::llvm::is_T2 (const jlm::llvm::ControlFlowGraphNode *node) noexcept
 
static void jlm::llvm::reduce_loop (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit)
 
static void jlm::llvm::reduce_linear (jlm::llvm::ControlFlowGraphNode *entry, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit)
 
static void jlm::llvm::reduce_branch (jlm::llvm::ControlFlowGraphNode *split, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit)
 
static void jlm::llvm::reduce_proper_branch (jlm::llvm::ControlFlowGraphNode *split, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit)
 
static void jlm::llvm::reduce_T1 (jlm::llvm::ControlFlowGraphNode *node)
 
static void jlm::llvm::reduce_T2 (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit)
 
static bool jlm::llvm::reduce_proper_structured (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit)
 
static bool jlm::llvm::reduce_structured (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit)
 
static bool jlm::llvm::reduce_reducible (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit)
 
static bool jlm::llvm::has_valid_phis (const BasicBlock &bb)
 
static bool jlm::llvm::is_valid_basic_block (const BasicBlock &bb)
 
static bool jlm::llvm::has_valid_entry (const ControlFlowGraph &cfg)
 
static bool jlm::llvm::has_valid_exit (const ControlFlowGraph &cfg)
 
bool jlm::llvm::is_valid (const ControlFlowGraph &cfg)
 
bool jlm::llvm::is_closed (const ControlFlowGraph &cfg)
 
bool jlm::llvm::is_linear (const ControlFlowGraph &cfg)
 
static bool jlm::llvm::reduce (const ControlFlowGraph &cfg, const std::function< bool(llvm::ControlFlowGraphNode *, std::unordered_set< llvm::ControlFlowGraphNode * > &)> &f)
 
bool jlm::llvm::is_structured (const ControlFlowGraph &cfg)
 
bool jlm::llvm::is_proper_structured (const ControlFlowGraph &cfg)
 
bool jlm::llvm::is_reducible (const ControlFlowGraph &cfg)
 
void jlm::llvm::straighten (ControlFlowGraph &cfg)
 
void jlm::llvm::purge (ControlFlowGraph &cfg)
 Remove all basic blocks without instructions. More...
 
static std::unordered_set< const ControlFlowGraphNode * > jlm::llvm::compute_livenodes (const ControlFlowGraph &cfg)
 
static std::unordered_set< ControlFlowGraphNode * > jlm::llvm::compute_deadnodes (ControlFlowGraph &cfg)
 
static std::unordered_set< BasicBlock * > jlm::llvm::compute_live_sinks (const std::unordered_set< ControlFlowGraphNode * > &deadnodes)
 
static void jlm::llvm::update_phi_operands (llvm::ThreeAddressCode &phitac, const std::unordered_set< ControlFlowGraphNode * > &deadnodes)
 
static void jlm::llvm::update_phi_operands (const std::unordered_set< BasicBlock * > &sinks, const std::unordered_set< ControlFlowGraphNode * > &deadnodes)
 
static void jlm::llvm::remove_deadnodes (const std::unordered_set< ControlFlowGraphNode * > &deadnodes)
 
void jlm::llvm::prune (ControlFlowGraph &cfg)