|
| ::llvm::APInt | convert_bitvalue_repr (const rvsdg::BitValueRepresentation &vr) |
| |
| static bool | is_identity_mapping (const rvsdg::MatchOperation &op) |
| |
| static const llvm::ThreeAddressCode * | get_match (const llvm::ThreeAddressCode *branch) |
| |
| static bool | has_return_value (const ControlFlowGraph &cfg) |
| |
| static TailControlledLoop | ExtractLoop (ControlFlowGraphNode &loopEntry, ControlFlowGraphNode &loopExit) |
| |
| static void | ReinsertLoop (const TailControlledLoop &loop) |
| |
| static const ThreeAddressCodeVariable * | CreateContinuationVariable (BasicBlock &bb, std::shared_ptr< const rvsdg::ControlType > type) |
| |
| static const ThreeAddressCodeVariable & | CreateLoopExitVariable (BasicBlock &bb, std::shared_ptr< const rvsdg::ControlType > type) |
| |
| static const ThreeAddressCodeVariable & | CreateLoopEntryVariable (BasicBlock &bb, std::shared_ptr< const rvsdg::ControlType > type) |
| |
| static const ThreeAddressCodeVariable & | CreateLoopRepetitionVariable (BasicBlock &basicBlock) |
| |
| static void | AppendBranch (BasicBlock &basicBlock, const Variable *operand) |
| |
| static void | AppendConstantAssignment (BasicBlock &basicBlock, const ThreeAddressCodeVariable &variable, const size_t value) |
| |
| static void | RestructureLoopEntry (const StronglyConnectedComponentStructure &sccStructure, BasicBlock *newEntryNode, const ThreeAddressCodeVariable *entryVariable) |
| |
| static void | RestructureLoopExit (const StronglyConnectedComponentStructure &sccStructure, BasicBlock &newRepetitionNode, BasicBlock &newExitNode, ControlFlowGraphNode ®ionExit, const ThreeAddressCodeVariable &repetitionVariable, const ThreeAddressCodeVariable *exitVariable) |
| |
| static void | RestructureLoopRepetition (const StronglyConnectedComponentStructure &sccStructure, ControlFlowGraphNode &newRepetitionNode, const ThreeAddressCodeVariable *entryVariable, const ThreeAddressCodeVariable &repetitionVariable) |
| |
| static BasicBlock * | GetEntryVariableBlock (ControlFlowGraphNode *node) |
| |
| static void | RestructureControlFlow (ControlFlowGraphNode &, ControlFlowGraphNode &, std::vector< TailControlledLoop > &) |
| |
| static void | RestructureLoops (ControlFlowGraphNode ®ionEntry, ControlFlowGraphNode ®ionExit, std::vector< TailControlledLoop > &loops) |
| |
| static ControlFlowGraphNode & | ComputeHeadBranch (ControlFlowGraphNode &start, ControlFlowGraphNode &end) |
| |
| static util::HashSet< ControlFlowGraphNode * > | ComputeDominatorGraph (const ControlFlowGraphEdge *edge) |
| |
| static Continuation | ComputeContinuation (const ControlFlowGraphNode &headBranch) |
| |
| static void | RestructureBranches (ControlFlowGraphNode &entry, ControlFlowGraphNode &exit) |
| |
| void | RestructureLoops (ControlFlowGraph &cfg) |
| |
| void | RestructureBranches (ControlFlowGraph &cfg) |
| |
| void | RestructureControlFlow (ControlFlowGraph &cfg) |
| |
| static bool | requiresExport (const InterProceduralGraphNode &ipgNode) |
| |
| static void | ConvertAssignment (const llvm::ThreeAddressCode &threeAddressCode, rvsdg::Region &, llvm::VariableMap &variableMap) |
| |
| static void | ConvertSelect (const llvm::ThreeAddressCode &threeAddressCode, rvsdg::Region &, llvm::VariableMap &variableMap) |
| |
| static void | ConvertBranch (const llvm::ThreeAddressCode &threeAddressCode, rvsdg::Region &, llvm::VariableMap &) |
| |
| template<class TNode , class TOperation > |
| static void | Convert (const llvm::ThreeAddressCode &threeAddressCode, rvsdg::Region ®ion, llvm::VariableMap &variableMap) |
| |
| static void | ConvertThreeAddressCode (const llvm::ThreeAddressCode &threeAddressCode, rvsdg::Region ®ion, llvm::VariableMap &variableMap) |
| |
| static void | ConvertBasicBlock (const ThreeAddressCodeList &basicBlock, rvsdg::Region ®ion, llvm::VariableMap &variableMap) |
| |
| static void | ConvertAggregationNode (const AggregationNode &aggregationNode, const AnnotationMap &demandMap, rvsdg::LambdaNode &lambdaNode, RegionalizedVariableMap ®ionalizedVariableMap) |
| |
| static void | Convert (const EntryAggregationNode &entryAggregationNode, const AnnotationMap &demandMap, rvsdg::LambdaNode &lambdaNode, RegionalizedVariableMap ®ionalizedVariableMap) |
| |
| static void | Convert (const ExitAggregationNode &exitAggregationNode, const AnnotationMap &, rvsdg::LambdaNode &lambdaNode, RegionalizedVariableMap ®ionalizedVariableMap) |
| |
| static void | Convert (const BasicBlockAggregationNode &blockAggregationNode, const AnnotationMap &, rvsdg::LambdaNode &, RegionalizedVariableMap ®ionalizedVariableMap) |
| |
| static void | Convert (const LinearAggregationNode &linearAggregationNode, const AnnotationMap &demandMap, rvsdg::LambdaNode &lambdaNode, RegionalizedVariableMap ®ionalizedVariableMap) |
| |
| static void | Convert (const BranchAggregationNode &branchAggregationNode, const AnnotationMap &demandMap, rvsdg::LambdaNode &lambdaNode, RegionalizedVariableMap ®ionalizedVariableMap) |
| |
| static void | Convert (const LoopAggregationNode &loopAggregationNode, const AnnotationMap &demandMap, rvsdg::LambdaNode &lambdaNode, RegionalizedVariableMap ®ionalizedVariableMap) |
| |
| static void | RestructureControlFlowGraph (ControlFlowGraph &controlFlowGraph, const std::string &functionName, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static std::unique_ptr< AggregationNode > | AggregateControlFlowGraph (ControlFlowGraph &controlFlowGraph, const std::string &functionName, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static std::unique_ptr< AnnotationMap > | AnnotateAggregationTree (const AggregationNode &aggregationTreeRoot, const std::string &functionName, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static rvsdg::Output * | ConvertAggregationTreeToLambda (const AggregationNode &aggregationTreeRoot, const AnnotationMap &demandMap, RegionalizedVariableMap &scopedVariableMap, const std::string &functionName, std::shared_ptr< const rvsdg::FunctionType > functionType, const Linkage &functionLinkage, const AttributeSet &functionAttributes, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static rvsdg::Output * | ConvertControlFlowGraph (const FunctionNode &functionNode, RegionalizedVariableMap ®ionalizedVariableMap, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static rvsdg::Output * | ConvertFunctionNode (const FunctionNode &functionNode, RegionalizedVariableMap ®ionalizedVariableMap, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static rvsdg::Output * | ConvertDataNodeInitialization (const DataNodeInit &init, rvsdg::Region ®ion, RegionalizedVariableMap ®ionalizedVariableMap) |
| |
| static rvsdg::Output * | ConvertDataNode (const DataNode &dataNode, RegionalizedVariableMap ®ionalizedVariableMap, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static rvsdg::Output * | ConvertInterProceduralGraphNode (const InterProceduralGraphNode &ipgNode, RegionalizedVariableMap ®ionalizedVariableMap, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static void | ConvertStronglyConnectedComponent (const std::unordered_set< const InterProceduralGraphNode * > &stronglyConnectedComponent, rvsdg::Graph &graph, RegionalizedVariableMap ®ionalizedVariableMap, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| static std::unique_ptr< LlvmRvsdgModule > | ConvertInterProceduralGraphModule (InterProceduralGraphModule &interProceduralGraphModule, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector) |
| |
| std::unique_ptr< LlvmRvsdgModule > | ConvertInterProceduralGraphModule (InterProceduralGraphModule &interProceduralGraphModule, util::StatisticsCollector &statisticsCollector) |
| |
| const Variable * | ConvertValueOrFunction (::llvm::Value *v, tacsvector_t &tacs, Context &ctx) |
| |
| const Variable * | ConvertValue (::llvm::Value *v, tacsvector_t &tacs, Context &ctx) |
| |
| const Variable * | ConvertConstant (::llvm::Constant *, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &, Context &) |
| |
| static rvsdg::BitValueRepresentation | convert_apint (const ::llvm::APInt &value) |
| |
| static const Variable * | convert_int_constant (::llvm::Constant *c, std::vector< std::unique_ptr< ThreeAddressCode >> &tacs, Context &) |
| |
| static const Variable * | convert_undefvalue (::llvm::Constant *c, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_constantExpr (::llvm::Constant *constant, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_constantFP (::llvm::Constant *constant, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_globalVariable (::llvm::Constant *c, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_constantPointerNull (::llvm::Constant *constant, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_blockAddress (::llvm::Constant *constant, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &, Context &) |
| |
| static const Variable * | convert_constantAggregateZero (::llvm::Constant *c, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_constantArray (::llvm::Constant *c, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_constantDataArray (::llvm::Constant *constant, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_constantDataVector (::llvm::Constant *constant, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | ConvertConstantStruct (::llvm::Constant *c, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_constantVector (::llvm::Constant *c, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static const Variable * | convert_globalAlias (::llvm::Constant *constant, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &, Context &) |
| |
| static const Variable * | convert_function (::llvm::Constant *c, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | ConvertConstant (::llvm::PoisonValue *poisonValue, tacsvector_t &threeAddressCodeVector, Context &context) |
| |
| template<class T > |
| static const Variable * | ConvertConstant (::llvm::Constant *constant, tacsvector_t &threeAddressCodeVector, Context &context) |
| |
| std::vector< std::unique_ptr< llvm::ThreeAddressCode > > | ConvertConstant (::llvm::Constant *c, Context &ctx) |
| |
| static const Variable * | convert_return_instruction (::llvm::Instruction *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | ConvertBranchInstruction (::llvm::Instruction *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | ConvertSwitchInstruction (::llvm::Instruction *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_unreachable_instruction (::llvm::Instruction *i, tacsvector_t &, Context &ctx) |
| |
| static std::unique_ptr< rvsdg::BinaryOperation > | ConvertIntegerIcmpPredicate (const ::llvm::CmpInst::Predicate predicate, const std::size_t numBits) |
| |
| static std::unique_ptr< rvsdg::BinaryOperation > | ConvertPointerIcmpPredicate (const ::llvm::CmpInst::Predicate predicate) |
| |
| static const Variable * | convert (const ::llvm::ICmpInst *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_fcmp_instruction (::llvm::Instruction *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | AddIOBarrier (tacsvector_t &tacs, const Variable *operand, const Context &ctx) |
| |
| static const Variable * | convert_load_instruction (::llvm::Instruction *i, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_store_instruction (::llvm::Instruction *i, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | ConvertPhiInstruction (::llvm::Instruction *i, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_getelementptr_instruction (::llvm::Instruction *inst, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_malloc_call (const ::llvm::CallInst *i, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_free_call (const ::llvm::CallInst *i, tacsvector_t &tacs, Context &ctx) |
| |
| static bool | IsVolatile (const ::llvm::Value &value) |
| |
| static const Variable * | convert_memcpy_call (const ::llvm::CallInst *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static bool | IsFMulAddIntrinsic (const ::llvm::Instruction &instruction) |
| |
| static const Variable * | ConvertFMulAddIntrinsic (const ::llvm::CallInst &instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_call_instruction (::llvm::Instruction *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_select_instruction (::llvm::Instruction *i, tacsvector_t &tacs, Context &ctx) |
| |
| static std::unique_ptr< rvsdg::BinaryOperation > | ConvertIntegerBinaryOperation (const ::llvm::Instruction::BinaryOps binaryOperation, std::size_t numBits) |
| |
| static std::unique_ptr< rvsdg::BinaryOperation > | ConvertFloatingPointBinaryOperation (const ::llvm::Instruction::BinaryOps binaryOperation, fpsize floatingPointSize) |
| |
| static const Variable * | convert (const ::llvm::BinaryOperator *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_alloca_instruction (::llvm::Instruction *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_extractvalue (::llvm::Instruction *i, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_extractelement_instruction (::llvm::Instruction *i, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert (::llvm::ShuffleVectorInst *i, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert_insertelement_instruction (::llvm::Instruction *i, tacsvector_t &tacs, Context &ctx) |
| |
| static const Variable * | convert (::llvm::UnaryOperator *unaryOperator, tacsvector_t &threeAddressCodeVector, Context &ctx) |
| |
| template<class OP > |
| static std::unique_ptr< rvsdg::SimpleOperation > | create_unop (std::shared_ptr< const rvsdg::Type > st, std::shared_ptr< const rvsdg::Type > dt) |
| |
| static const Variable * | convert_cast_instruction (::llvm::Instruction *i, tacsvector_t &tacs, Context &ctx) |
| |
| template<class INSTRUCTIONTYPE > |
| static const Variable * | convert (::llvm::Instruction *instruction, tacsvector_t &tacs, Context &ctx) |
| |
| const Variable * | ConvertInstruction (::llvm::Instruction *i, std::vector< std::unique_ptr< llvm::ThreeAddressCode >> &tacs, Context &ctx) |
| |
| static std::vector<::llvm::PHINode * > | convert_instructions (::llvm::Function &function, Context &ctx) |
| |
| static void | PatchPhiOperands (const std::vector<::llvm::PHINode * > &phis, Context &ctx) |
| |
| static BasicBlockMap | convert_basic_blocks (::llvm::Function &f, ControlFlowGraph &cfg) |
| |
| Attribute::kind | ConvertAttributeKind (const ::llvm::Attribute::AttrKind &kind) |
| |
| static EnumAttribute | ConvertEnumAttribute (const ::llvm::Attribute &attribute) |
| |
| static IntAttribute | ConvertIntAttribute (const ::llvm::Attribute &attribute) |
| |
| static TypeAttribute | ConvertTypeAttribute (const ::llvm::Attribute &attribute, Context &ctx) |
| |
| static StringAttribute | ConvertStringAttribute (const ::llvm::Attribute &attribute) |
| |
| static AttributeSet | convert_attributes (const ::llvm::AttributeSet &as, Context &ctx) |
| |
| static std::unique_ptr< llvm::Argument > | convert_argument (const ::llvm::Argument &argument, Context &ctx) |
| |
| static void | EnsureSingleInEdgeToExitNode (ControlFlowGraph &cfg) |
| |
| static std::unique_ptr< ControlFlowGraph > | create_cfg (::llvm::Function &f, Context &ctx) |
| |
| static void | convert_function (::llvm::Function &function, Context &ctx) |
| |
| static const llvm::Linkage & | convert_linkage (const ::llvm::GlobalValue::LinkageTypes &linkage) |
| |
| static void | declare_globals (::llvm::Module &lm, Context &ctx) |
| |
| static std::unique_ptr< DataNodeInit > | create_initialization (::llvm::GlobalVariable &gv, Context &ctx) |
| |
| static void | convert_global_value (::llvm::GlobalVariable &gv, Context &ctx) |
| |
| static void | convert_globals (::llvm::Module &lm, Context &ctx) |
| |
| std::unique_ptr< InterProceduralGraphModule > | ConvertLlvmModule (::llvm::Module &llvmModule) |
| |
| static bool | is_sese_basic_block (const ControlFlowGraphNode *node) noexcept |
| |
| static bool | is_branch_split (const ControlFlowGraphNode *node) noexcept |
| |
| static bool | is_branch_join (const ControlFlowGraphNode *node) noexcept |
| |
| static bool | is_branch (const ControlFlowGraphNode *split) noexcept |
| |
| static bool | is_linear (const ControlFlowGraphNode *node) noexcept |
| |
| static ControlFlowGraphNode * | aggregate (ControlFlowGraphNode *, ControlFlowGraphNode *, AggregationMap &) |
| |
| static void | reduce_loop (const StronglyConnectedComponentStructure &sccstruct, AggregationMap &map) |
| |
| static ControlFlowGraphNode * | reduce_branch (ControlFlowGraphNode *split, ControlFlowGraphNode **entry, AggregationMap &map) |
| |
| static ControlFlowGraphNode * | reduce_linear (ControlFlowGraphNode *source, ControlFlowGraphNode **entry, ControlFlowGraphNode **exit, AggregationMap &map) |
| |
| static void | aggregate_loops (ControlFlowGraphNode *entry, ControlFlowGraphNode *exit, AggregationMap &map) |
| |
| static void | aggregate_acyclic_sese (ControlFlowGraphNode *node, ControlFlowGraphNode **entry, ControlFlowGraphNode **exit, AggregationMap &map) |
| |
| std::unique_ptr< AggregationNode > | aggregate (ControlFlowGraph &cfg) |
| | Aggregate a properly structured CFG to a aggregation tree. More...
|
| |
| size_t | ntacs (const AggregationNode &root) |
| |
| template<class T > |
| static bool | is (const AggregationNode *node) |
| |
| static void | AnnotateReadWrite (const AggregationNode &, AnnotationMap &) |
| |
| static void | AnnotateReadWrite (const EntryAggregationNode &entryAggregationNode, AnnotationMap &demandMap) |
| |
| static void | AnnotateReadWrite (const ExitAggregationNode &exitAggregationNode, AnnotationMap &demandMap) |
| |
| static void | AnnotateReadWrite (const BasicBlockAggregationNode &basicBlockAggregationNode, AnnotationMap &demandMap) |
| |
| static void | AnnotateReadWrite (const LinearAggregationNode &linearAggregationNode, AnnotationMap &demandMap) |
| |
| static void | AnnotateReadWrite (const BranchAggregationNode &branchAggregationNode, AnnotationMap &demandMap) |
| |
| static void | AnnotateReadWrite (const LoopAggregationNode &loopAggregationNode, AnnotationMap &demandMap) |
| |
| static void | AnnotateDemandSet (const AggregationNode &, VariableSet &, AnnotationMap &) |
| |
| static void | AnnotateDemandSet (const EntryAggregationNode &entryAggregationNode, VariableSet &workingSet, AnnotationMap &demandMap) |
| |
| static void | AnnotateDemandSet (const ExitAggregationNode &exitAggregationNode, VariableSet &workingSet, AnnotationMap &demandMap) |
| |
| static void | AnnotateDemandSet (const BasicBlockAggregationNode &basicBlockAggregationNode, VariableSet &workingSet, AnnotationMap &demandMap) |
| |
| static void | AnnotateDemandSet (const LinearAggregationNode &linearAggregationNode, VariableSet &workingSet, AnnotationMap &demandMap) |
| |
| static void | AnnotateDemandSet (const BranchAggregationNode &branchAggregationNode, VariableSet &workingSet, AnnotationMap &demandMap) |
| |
| static void | AnnotateDemandSet (const LoopAggregationNode &loopAggregationNode, VariableSet &workingSet, AnnotationMap &demandMap) |
| |
| template<class T > |
| static void | AnnotateDemandSet (const AggregationNode *aggregationNode, VariableSet &workingSet, AnnotationMap &demandMap) |
| |
| std::unique_ptr< AnnotationMap > | Annotate (const AggregationNode &aggregationTreeRoot) |
| |
| static void | AddToWorklist (std::deque< rvsdg::Input * > &worklist, rvsdg::Output &output) |
| |
| CallSummary | ComputeCallSummary (const rvsdg::LambdaNode &lambdaNode) |
| |
| template<class T > |
| static bool | is (const ControlFlowGraphNode *node) noexcept |
| |
| static void | 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 > | find_sccs (const ControlFlowGraph &cfg) |
| |
| std::vector< StronglyConnectedComponent > | find_sccs (ControlFlowGraphNode *entry, ControlFlowGraphNode *exit) |
| |
| static std::unique_ptr< ControlFlowGraph > | copy_structural (const ControlFlowGraph &in) |
| |
| static bool | is_loop (const jlm::llvm::ControlFlowGraphNode *node) noexcept |
| |
| static bool | is_linear_reduction (const jlm::llvm::ControlFlowGraphNode *node) noexcept |
| |
| static jlm::llvm::ControlFlowGraphNode * | find_join (const jlm::llvm::ControlFlowGraphNode *split) noexcept |
| |
| static bool | is_branch (const jlm::llvm::ControlFlowGraphNode *split) noexcept |
| |
| static bool | is_proper_branch (const jlm::llvm::ControlFlowGraphNode *split) noexcept |
| |
| static bool | is_T1 (const jlm::llvm::ControlFlowGraphNode *node) noexcept |
| |
| static bool | is_T2 (const jlm::llvm::ControlFlowGraphNode *node) noexcept |
| |
| static void | reduce_loop (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit) |
| |
| static void | reduce_linear (jlm::llvm::ControlFlowGraphNode *entry, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit) |
| |
| static void | reduce_branch (jlm::llvm::ControlFlowGraphNode *split, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit) |
| |
| static void | reduce_proper_branch (jlm::llvm::ControlFlowGraphNode *split, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit) |
| |
| static void | reduce_T1 (jlm::llvm::ControlFlowGraphNode *node) |
| |
| static void | reduce_T2 (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit) |
| |
| static bool | reduce_proper_structured (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit) |
| |
| static bool | reduce_structured (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit) |
| |
| static bool | reduce_reducible (jlm::llvm::ControlFlowGraphNode *node, std::unordered_set< jlm::llvm::ControlFlowGraphNode * > &to_visit) |
| |
| static bool | has_valid_phis (const BasicBlock &bb) |
| |
| static bool | is_valid_basic_block (const BasicBlock &bb) |
| |
| static bool | has_valid_entry (const ControlFlowGraph &cfg) |
| |
| static bool | has_valid_exit (const ControlFlowGraph &cfg) |
| |
| bool | is_valid (const ControlFlowGraph &cfg) |
| |
| bool | is_closed (const ControlFlowGraph &cfg) |
| |
| bool | is_linear (const ControlFlowGraph &cfg) |
| |
| static bool | reduce (const ControlFlowGraph &cfg, const std::function< bool(llvm::ControlFlowGraphNode *, std::unordered_set< llvm::ControlFlowGraphNode * > &)> &f) |
| |
| bool | is_structured (const ControlFlowGraph &cfg) |
| |
| bool | is_proper_structured (const ControlFlowGraph &cfg) |
| |
| bool | is_reducible (const ControlFlowGraph &cfg) |
| |
| void | straighten (ControlFlowGraph &cfg) |
| |
| void | purge (ControlFlowGraph &cfg) |
| | Remove all basic blocks without instructions. More...
|
| |
| static std::unordered_set< const ControlFlowGraphNode * > | compute_livenodes (const ControlFlowGraph &cfg) |
| |
| static std::unordered_set< ControlFlowGraphNode * > | compute_deadnodes (ControlFlowGraph &cfg) |
| |
| static std::unordered_set< BasicBlock * > | compute_live_sinks (const std::unordered_set< ControlFlowGraphNode * > &deadnodes) |
| |
| static void | update_phi_operands (llvm::ThreeAddressCode &phitac, const std::unordered_set< ControlFlowGraphNode * > &deadnodes) |
| |
| static void | update_phi_operands (const std::unordered_set< BasicBlock * > &sinks, const std::unordered_set< ControlFlowGraphNode * > &deadnodes) |
| |
| static void | remove_deadnodes (const std::unordered_set< ControlFlowGraphNode * > &deadnodes) |
| |
| void | prune (ControlFlowGraph &cfg) |
| |
| static bool | is_acyclic (const ControlFlowGraph &cfg) |
| |
| std::vector< ControlFlowGraphNode * > | postorder (const ControlFlowGraph &cfg) |
| |
| std::vector< ControlFlowGraphNode * > | reverse_postorder (const ControlFlowGraph &cfg) |
| |
| std::vector< ControlFlowGraphNode * > | breadth_first (const ControlFlowGraph &cfg) |
| |
| size_t | ntacs (const ControlFlowGraph &cfg) |
| |
| static std::unique_ptr< DominatorTreeNode > | build_domtree (std::unordered_map< ControlFlowGraphNode *, ControlFlowGraphNode * > &doms, ControlFlowGraphNode *root) |
| |
| static ControlFlowGraphNode * | intersect (ControlFlowGraphNode *b1, ControlFlowGraphNode *b2, const std::unordered_map< ControlFlowGraphNode *, size_t > &indices, const std::unordered_map< ControlFlowGraphNode *, ControlFlowGraphNode * > &doms) |
| |
| std::unique_ptr< DominatorTreeNode > | domtree (ControlFlowGraph &cfg) |
| |
| static std::unique_ptr< GlobalValue > | create_gblvalue (DataNode *node) |
| |
| static size_t | ntacs (const InterProceduralGraphModule &im) |
| |
| rvsdg::Output & | GetMemoryStateRegionArgument (const rvsdg::LambdaNode &lambdaNode) noexcept |
| |
| rvsdg::Input & | GetMemoryStateRegionResult (const rvsdg::LambdaNode &lambdaNode) noexcept |
| |
| rvsdg::SimpleNode * | tryGetMemoryStateExitMerge (const rvsdg::LambdaNode &lambdaNode) noexcept |
| |
| rvsdg::SimpleNode * | tryGetMemoryStateEntrySplit (const rvsdg::LambdaNode &lambdaNode) noexcept |
| |
| std::string_view | linkageToString (const Linkage linkage) |
| |
| Linkage | linkageFromString (const std::string_view stringValue) |
| |
| bool | isDiscardableIfUnused (const Linkage linkage) |
| |
| bool | isPrivateOrInternal (const Linkage linkage) |
| |
| static bool | is_load_alloca_reducible (const std::vector< rvsdg::Output * > &operands) |
| |
| static bool | is_reducible_state (const rvsdg::Output *state, const rvsdg::Node *loadalloca) |
| |
| static bool | is_load_store_state_reducible (const LoadNonVolatileOperation &op, const std::vector< rvsdg::Output * > &operands) |
| |
| static bool | is_multiple_origin_reducible (const std::vector< rvsdg::Output * > &operands) |
| |
| static std::vector< rvsdg::Output * > | perform_load_alloca_reduction (const LoadNonVolatileOperation &op, const std::vector< rvsdg::Output * > &operands) |
| |
| static std::vector< rvsdg::Output * > | perform_load_store_state_reduction (const LoadNonVolatileOperation &op, const std::vector< rvsdg::Output * > &operands) |
| |
| static std::vector< rvsdg::Output * > | perform_multiple_origin_reduction (const LoadNonVolatileOperation &op, const std::vector< rvsdg::Output * > &operands) |
| |
| template<class TMemoryStateMergeOrJoinOperation > |
| std::vector< rvsdg::Output * > | CollectNestedMemoryStateMergeOrJoinOperands (const std::vector< rvsdg::Output * > &operands) |
| |
| static void | CheckMemoryNodeIds (const std::vector< MemoryNodeId > &memoryNodeIds) |
| |
| static std::string | ToString (const std::vector< MemoryNodeId > &memoryNodeIds) |
| |
| bool | hasMemoryState (const rvsdg::Node &node) |
| |
| static bool | is_bitunary_reducible (const rvsdg::Output *operand) |
| |
| static bool | is_bitbinary_reducible (const rvsdg::Output *operand) |
| |
| static bool | is_inverse_reducible (const SExtOperation &op, const rvsdg::Output *operand) |
| |
| static rvsdg::Output * | perform_bitunary_reduction (const SExtOperation &op, rvsdg::Output *operand) |
| |
| static rvsdg::Output * | perform_bitbinary_reduction (const SExtOperation &op, rvsdg::Output *operand) |
| |
| static rvsdg::Output * | perform_inverse_reduction (const SExtOperation &op, rvsdg::Output *operand) |
| |
| static bool | is_store_mux_reducible (const std::vector< jlm::rvsdg::Output * > &operands) |
| |
| static bool | is_store_store_reducible (const StoreNonVolatileOperation &op, const std::vector< jlm::rvsdg::Output * > &operands) |
| |
| static bool | is_store_alloca_reducible (const std::vector< jlm::rvsdg::Output * > &operands) |
| |
| static bool | is_multiple_origin_reducible (const std::vector< jlm::rvsdg::Output * > &operands) |
| |
| static std::vector< jlm::rvsdg::Output * > | perform_store_mux_reduction (const StoreNonVolatileOperation &op, const std::vector< jlm::rvsdg::Output * > &operands) |
| |
| static std::vector< jlm::rvsdg::Output * > | perform_store_store_reduction (const StoreNonVolatileOperation &op, const std::vector< jlm::rvsdg::Output * > &operands) |
| |
| static std::vector< jlm::rvsdg::Output * > | perform_store_alloca_reduction (const StoreNonVolatileOperation &op, const std::vector< jlm::rvsdg::Output * > &operands) |
| |
| static std::vector< jlm::rvsdg::Output * > | perform_multiple_origin_reduction (const StoreNonVolatileOperation &operation, const std::vector< jlm::rvsdg::Output * > &operands) |
| |
| static std::string | emit_tacs (const tacsvector_t &tacs) |
| |
| static std::string | emit_function_node (const InterProceduralGraphNode &clg_node) |
| |
| static std::string | emit_data_node (const InterProceduralGraphNode &clg_node) |
| |
| std::string | to_str (const InterProceduralGraph &clg) |
| |
| static std::string | emit_entry_dot (const ControlFlowGraphNode &node) |
| |
| static std::string | emit_exit_dot (const ControlFlowGraphNode &node) |
| |
| static std::string | emit_basic_block (const ControlFlowGraphNode &node) |
| |
| static std::string | emit_header (const ControlFlowGraphNode &node) |
| |
| static std::string | emit_node (const ControlFlowGraphNode &node) |
| |
| std::string | to_dot (const ControlFlowGraph &cfg) |
| |
| std::string | to_dot (const InterProceduralGraph &clg) |
| |
| std::string | to_str (const AggregationNode &n, const AnnotationMap &dm) |
| |
| void | print (const AggregationNode &n, const AnnotationMap &dm, FILE *out) |
| |
| static void | print_dot (const ControlFlowGraph &cfg, FILE *out) |
| |
| static void | print_ascii (const InterProceduralGraph &ipg, FILE *out) |
| |
| static void | print_dot (const InterProceduralGraph &ipg, FILE *out) |
| |
| static std::string | to_str (const InterProceduralGraphModule &im) |
| |
| static void | print (const InterProceduralGraphModule &im, FILE *out) |
| |
| static std::string | to_str (const AggregationNode &n) |
| |
| static void | print (const AggregationNode &n, FILE *out) |
| |
| void | destruct_ssa (ControlFlowGraph &cfg) |
| |
| static void | check_operands (const rvsdg::SimpleOperation &operation, const std::vector< const Variable * > &operands) |
| |
| static void | check_results (const rvsdg::SimpleOperation &operation, const std::vector< std::unique_ptr< ThreeAddressCodeVariable >> &results) |
| |
| template<class T > |
| static bool | is (const llvm::ThreeAddressCode *tac) |
| |
| rvsdg::Output & | traceOutput (rvsdg::Output &output) |
| |
| std::optional< int64_t > | tryGetConstantSignedInteger (const rvsdg::Output &output) |
| |
| const rvsdg::Output & | traceOutput (const rvsdg::Output &output) |
| |
| size_t | GetTypeStoreSize (const rvsdg::Type &type) |
| |
| size_t | GetTypeAllocSize (const rvsdg::Type &type) |
| |
| size_t | GetTypeAlignment (const rvsdg::Type &type) |
| |
| template<class ELEMENTYPE > |
| bool | IsOrContains (const jlm::rvsdg::Type &type) |
| |
| bool | IsAggregateType (const jlm::rvsdg::Type &type) |
| |
| template<class T > |
| static bool | is (const llvm::Variable *variable) noexcept |
| |
| static bool | areOutputsCongruent (const rvsdg::Output &o1, const rvsdg::Output &o2, CommonNodeElimination::Context &context) |
| |
| static bool | checkNodesCongruent (const rvsdg::Node &node1, const rvsdg::Node &node2, CommonNodeElimination::Context &context) |
| |
| void | markNodeAsLeader (const rvsdg::Node &leader, CommonNodeElimination::Context &context) |
| |
| void | markNodesAsCongruent (const rvsdg::Node &leader, const rvsdg::Node &follower, CommonNodeElimination::Context &context) |
| |
| const rvsdg::Node * | tryGetLeaderNode (const rvsdg::Node &node, CommonNodeElimination::Context &context) |
| |
| static void | markSimpleTopNode (const rvsdg::SimpleNode &node, TopNodeLeaderList &leaders, CommonNodeElimination::Context &context) |
| |
| static void | markSimpleNode (const rvsdg::SimpleNode &node, CommonNodeElimination::Context &context) |
| |
| static void | markRegion (const rvsdg::Region &, CommonNodeElimination::Context &context) |
| |
| static void | markGraphImports (const rvsdg::Region ®ion, CommonNodeElimination::Context &context) |
| |
| static bool | partitionArguments (const rvsdg::Region ®ion, const std::vector< CommonNodeElimination::Context::CongruenceSetIndex > &partitions, CommonNodeElimination::Context &context) |
| |
| static bool | markSubregionsFromInputs (const rvsdg::StructuralNode &node, CommonNodeElimination::Context &context) |
| |
| static std::optional< CommonNodeElimination::Context::CongruenceSetIndex > | tryGetGammaExitVarCongruenceSet (rvsdg::GammaNode::ExitVar &exitVar, CommonNodeElimination::Context &context) |
| |
| static void | markGamma (const rvsdg::GammaNode &gamma, CommonNodeElimination::Context &context) |
| |
| static void | markTheta (const rvsdg::ThetaNode &theta, CommonNodeElimination::Context &context) |
| |
| static void | markStructuralNode (const rvsdg::StructuralNode &node, CommonNodeElimination::Context &context) |
| |
| static void | divertOutput (rvsdg::Output &output, CommonNodeElimination::Context &context) |
| |
| static void | divertInRegion (rvsdg::Region &, CommonNodeElimination::Context &) |
| |
| static void | divertInStructuralNode (rvsdg::StructuralNode &node, CommonNodeElimination::Context &context) |
| |
| static std::vector< rvsdg::Output * > | routeContextVariablesToRegion (rvsdg::Region ®ion, const rvsdg::LambdaNode &callee) |
| |
| static void | tryRerouteMemoryStateMergeAndSplit (rvsdg::SimpleNode &callEntryMerge, rvsdg::SimpleNode &callExitSplit) |
| |
| static void | hoistInlinedAllocas (const rvsdg::LambdaNode &callee, rvsdg::LambdaNode &caller, rvsdg::SubstitutionMap &smap) |
| |
| static std::optional< std::vector< uint64_t > > | extractConstantAlternatives (const rvsdg::Output &gammaOutput) |
| |
| static std::optional< std::unique_ptr< ThetaGammaPredicateCorrelation > > | computeControlConstantCorrelation (rvsdg::ThetaNode &thetaNode) |
| |
| static std::optional< std::unique_ptr< ThetaGammaPredicateCorrelation > > | computeMatchConstantCorrelation (rvsdg::ThetaNode &thetaNode) |
| |
| static std::optional< std::unique_ptr< ThetaGammaPredicateCorrelation > > | computeMatchCorrelation (rvsdg::ThetaNode &thetaNode) |
| |
| std::optional< std::unique_ptr< ThetaGammaPredicateCorrelation > > | computeThetaGammaPredicateCorrelation (rvsdg::ThetaNode &thetaNode) |
| |
| static std::optional< std::unique_ptr< GammaGammaPredicateCorrelation > > | computeMatchCorrelation (rvsdg::GammaNode &gammaNode1) |
| |
| std::optional< std::unique_ptr< GammaGammaPredicateCorrelation > > | computeGammaGammaPredicateCorrelation (rvsdg::GammaNode &gammaNode) |
| |
| std::optional< GammaSubregionRoles > | determineGammaSubregionRoles (const ThetaGammaPredicateCorrelation &correlation) |
| |
| static bool | empty (const rvsdg::GammaNode *gamma) |
| |
| static bool | isSingleSuccessor (const rvsdg::Node &node, const rvsdg::Node &singleSuccessor) |
| |
| static void | pullin_node (rvsdg::GammaNode *gamma, rvsdg::Node *node) |
| |
| static void | cleanup (rvsdg::GammaNode *gamma, rvsdg::Node *node) |
| |
| void | pullin_top (rvsdg::GammaNode *gamma) |
| |
| static size_t | is_used_in_nsubregions (const rvsdg::GammaNode *gamma, const rvsdg::Node *node) |
| |
| void | pull (rvsdg::GammaNode *gamma) |
| |
| void | pull (rvsdg::Region *region) |
| |
| static void | pull (rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector) |
| |
| bool | DependsOnLoopVariable (const rvsdg::Output &variable, ScalarEvolution::IVDependencyGraph &dependencyGraph) |
| |
| bool | isNonZeroConstant (const SCEVConstant *c) |
| |
| static bool | is_eqcmp (const rvsdg::Operation &op) |
| |
| static bool | is_theta_invariant (const jlm::rvsdg::Output *output) |
| |
| static rvsdg::Output * | push_from_theta (jlm::rvsdg::Output *output) |
| |
| static bool | is_idv (jlm::rvsdg::Input *input) |
| |
| static void | unroll_body (const rvsdg::ThetaNode *theta, rvsdg::Region *target, rvsdg::SubstitutionMap &smap, size_t factor) |
| |
| static void | copy_body_and_unroll (const rvsdg::ThetaNode *theta, size_t factor) |
| |
| static void | unroll_theta (const LoopUnrollInfo &ui, rvsdg::SubstitutionMap &smap, size_t factor) |
| |
| static void | add_remainder (const LoopUnrollInfo &ui, rvsdg::SubstitutionMap &smap, size_t factor) |
| |
| static void | unroll_known_theta (const LoopUnrollInfo &ui, size_t factor) |
| |
| static jlm::rvsdg::Output * | create_unrolled_gamma_predicate (const LoopUnrollInfo &ui, size_t factor) |
| |
| static jlm::rvsdg::Output * | create_unrolled_theta_predicate (rvsdg::Region *, const rvsdg::SubstitutionMap &smap, const LoopUnrollInfo &ui, size_t factor) |
| |
| static jlm::rvsdg::Output * | create_residual_gamma_predicate (const rvsdg::SubstitutionMap &smap, const LoopUnrollInfo &ui) |
| |
| static void | unroll_unknown_theta (const LoopUnrollInfo &ui, size_t factor) |
| |
| void | unroll (rvsdg::ThetaNode *otheta, size_t factor) |
| |
| static bool | unroll (rvsdg::Region *region, size_t factor) |
| |