Jlm
Classes | Typedefs | Enumerations | Functions | Variables
jlm::hls Namespace Reference

Classes

class  FirrtlToVerilogConverter
 
class  BaseHLS
 
class  DotHLS
 
class  JsonHLS
 
class  RhlsToFirrtlConverter
 
class  VerilatorHarnessHLS
 
class  VerilatorHarnessAxi
 
class  BufferInsertion
 
class  ForkInsertion
 
class  SinkInsertion
 
class  TraceAllocaUses
 
class  AllocaNodeConversion
 
class  RhlsVerification
 
class  MemoryStateDecoupling
 
class  ConstantDistribution
 
class  GammaNodeConversion
 
struct  TracedPointerNodes
 
class  MemoryConverter
 
class  AddressQueueInsertion
 
class  MemoryStateSeparation
 
class  MemoryStateSplitConversion
 
class  GammaMerge
 
class  RedundantBufferElimination
 
class  RhlsDeadNodeElimination
 
class  StreamConversion
 
class  ThetaNodeConversion
 
class  UnusedStateRemoval
 
class  HlsDotWriter
 
class  BranchOperation
 
class  ForkOperation
 
class  MuxOperation
 
class  SinkOperation
 
class  PredicateBufferOperation
 
class  LoopConstantBufferOperation
 
class  BufferOperation
 
class  TriggerType
 
class  TriggerOperation
 
class  PrintOperation
 
class  LoopOperation
 
class  EntryArgument
 
class  BackEdgeArgument
 
class  BackEdgeResult
 
class  ExitResult
 
class  LoopNode
 
class  BundleType
 
class  LoadOperation
 
class  AddressQueueOperation
 
class  StateGateOperation
 
class  DecoupledLoadOperation
 
class  MemoryResponseOperation
 
class  MemoryRequestOperation
 
class  StoreOperation
 
class  LocalMemoryOperation
 
class  LocalMemoryResponseOperation
 
class  LocalLoadOperation
 
class  LocalStoreOperation
 
class  LocalMemoryRequestOperation
 
class  Context
 
class  VisitorSet
 
class  CommonNodeElimination
 Common Node Elimination This is mainly a copy of the CNE optimization in the LLVM backend with the addition of support for the hls::loop_op. More...
 
class  IOBarrierRemoval
 Removes all IOBarrier nodes from the RVSDG. More...
 
class  IOStateElimination
 
class  DumpDotTransformation
 

Typedefs

typedef std::unordered_set< jlm::rvsdg::Output * > congruence_set
 

Enumerations

enum  ViewColors { NONE , BLACK , RED }
 

Functions

bool isForbiddenChar (char c)
 
void check_may_not_depend_on (mlir::Value value, ::llvm::SmallPtrSet< mlir::Value, 16 > &forbiddenDependencies, ::llvm::SmallPtrSet< mlir::Value, 16 > &visited)
 
void check_oValids (::llvm::SmallVector< mlir::Value > &oReadys, ::llvm::SmallVector< mlir::Value > &oValids)
 
std::string ConvertToCType (const rvsdg::Type *type)
 
std::optional< std::string > GetReturnTypeAsC (const rvsdg::LambdaNode &kernel)
 
std::tuple< size_t, std::string, std::string > GetParameterListAsC (const rvsdg::LambdaNode &kernel)
 
static rvsdg::InputFindUserNode (rvsdg::Output *out)
 
static void PlaceBuffer (rvsdg::Output *out, size_t capacity, bool passThrough)
 
static void OptimizeAddrQ (rvsdg::SimpleNode *node)
 
static void OptimizeBuffer (rvsdg::SimpleNode *node)
 
static void OptimizeLoop (LoopNode *loopNode)
 
static void AddBuffers (rvsdg::Region *region)
 
static constexpr uint32_t round_up_pow2 (uint32_t x)
 
static void MaximizeBuffers (rvsdg::Region *region)
 
static std::vector< size_t > NodeCycles (rvsdg::SimpleNode *node, std::vector< size_t > &input_cycles)
 
static std::vector< size_t > NodeCapacity (rvsdg::SimpleNode *node, std::vector< size_t > &input_capacities)
 
static void CreateLoopFrontier (const LoopNode *loop, std::unordered_map< rvsdg::Output *, size_t > &output_cycles, std::unordered_set< rvsdg::Input * > &frontier, std::unordered_set< BackEdgeResult * > &stream_backedges, std::unordered_set< rvsdg::SimpleNode * > &top_muxes)
 
static void CalculateLoopCycleDepth (LoopNode *loop, std::unordered_map< rvsdg::Output *, size_t > &output_cycles, bool analyze_inner_loop=false)
 
static void PushCycleFrontier (std::unordered_map< rvsdg::Output *, size_t > &output_cycles, std::unordered_set< rvsdg::Input * > &frontier, std::unordered_set< BackEdgeResult * > &stream_backedges, std::unordered_set< rvsdg::SimpleNode * > &top_muxes)
 
void setMemoryLatency (size_t memoryLatency)
 
static size_t PlaceBufferLoop (rvsdg::Output *out, size_t min_capacity, bool passThrough)
 
static void AdjustLoopBuffers (LoopNode *loop, std::unordered_map< rvsdg::Output *, size_t > &output_cycles, std::unordered_map< rvsdg::Output *, size_t > &buffer_capacity, bool analyze_inner_loop=false)
 
static void CalculateLoopDepths (rvsdg::Region *region)
 
void add_prints (rvsdg::Region *region)
 
void add_prints (llvm::LlvmRvsdgModule &rm)
 
void convert_prints (llvm::LlvmRvsdgModule &rm)
 
void convert_prints (rvsdg::Region *region, jlm::rvsdg::Output *printf, const std::shared_ptr< const rvsdg::FunctionType > &functionType)
 
static jlm::rvsdg::Outputgep_to_index (jlm::rvsdg::Output *o)
 
static void alloca_conv (rvsdg::Region *region)
 
static void CheckAddrQueue (rvsdg::Node *node)
 
static void check_rhls (rvsdg::Region *sr)
 
static void check_rhls (rvsdg::RvsdgModule &rm)
 
static bool RemoveUnusedLoopOutputs (LoopNode &loopNode)
 
static bool RemoveUnusedInputs (LoopNode &loopNode)
 
static bool EliminateDeadNodesInRegion (rvsdg::Region &region)
 
void EliminateDeadNodes (llvm::LlvmRvsdgModule &rvsdgModule)
 
static rvsdg::Outputfollow_state_edge (rvsdg::Input *state_edge, std::vector< rvsdg::SimpleNode * > &mem_ops, bool modify)
 
static rvsdg::Outputtrace_edge (rvsdg::Input *state_edge, rvsdg::Output *new_edge, rvsdg::SimpleNode *target_call, rvsdg::Output *end)
 
static void handle_structural (std::vector< std::tuple< rvsdg::SimpleNode *, rvsdg::Input * >> &outstanding_dec_reqs, std::vector< rvsdg::SimpleNode * > &mem_ops, rvsdg::Input *state_edge_before, rvsdg::Output *state_edge_after)
 
static void optimize_single_mem_op_loop (std::vector< rvsdg::SimpleNode * > &mem_ops, rvsdg::Input *state_edge_before, rvsdg::Output *state_edge_after)
 
void convert_loop_state_to_lcb (rvsdg::Input *loop_state_input)
 
static void decouple_mem_state (rvsdg::RvsdgModule &rvsdgModule)
 
static void ConvertGammaNodeWithoutSpeculation (rvsdg::GammaNode &gammaNode)
 
static void ConvertGammaNodeWithSpeculation (rvsdg::GammaNode &gammaNode)
 
static bool CanGammaNodeBeSpeculative (const rvsdg::GammaNode &gammaNode)
 
static void ConvertGammaNodesInRegion (rvsdg::Region &region)
 
static void ConvertGammaNodesInStructuralNode (rvsdg::StructuralNode &structuralNode)
 
std::vector< rvsdg::LambdaNode::ContextVarfind_function_arguments (const rvsdg::LambdaNode *lambda, std::string name_contains)
 
void trace_function_calls (rvsdg::Output *output, std::vector< rvsdg::SimpleNode * > &calls, std::unordered_set< rvsdg::Output * > &visited)
 
const llvm::IntegerConstantOperationtrace_constant (const rvsdg::Output *dst)
 
rvsdg::Outputroute_to_region_rhls (rvsdg::Region *target, rvsdg::Output *out)
 
rvsdg::Outputroute_response_rhls (rvsdg::Region *target, rvsdg::Output *response)
 
rvsdg::Outputroute_request_rhls (rvsdg::Region *target, rvsdg::Output *request)
 
std::deque< rvsdg::Region * > get_parent_regions (rvsdg::Region *region)
 
const rvsdg::Outputtrace_call_rhls (const rvsdg::Output *output)
 
const rvsdg::Outputtrace_call_rhls (const rvsdg::Input *input)
 
bool is_function_argument (const rvsdg::LambdaNode::ContextVar &cv)
 
std::string get_function_name (jlm::rvsdg::Input *input)
 
bool is_dec_req (rvsdg::SimpleNode *node)
 
bool is_dec_res (rvsdg::SimpleNode *node)
 
rvsdg::Inputget_mem_state_user (rvsdg::Output *state_edge)
 
rvsdg::OutputFindSourceNode (rvsdg::Output *out)
 
rvsdg::LambdaNodechange_function_name (rvsdg::LambdaNode *ln, const std::string &name)
 
void instrument_ref (llvm::LlvmRvsdgModule &rm)
 
void instrument_ref (rvsdg::Region *region, jlm::rvsdg::Output *ioState, jlm::rvsdg::Output *load_func, const std::shared_ptr< const jlm::rvsdg::FunctionType > &loadFunctionType, jlm::rvsdg::Output *store_func, const std::shared_ptr< const jlm::rvsdg::FunctionType > &storeFunctionType, jlm::rvsdg::Output *alloca_func, const std::shared_ptr< const jlm::rvsdg::FunctionType > &allocaFunctionType)
 
void instrument_ref (rvsdg::Region *region, jlm::rvsdg::Output *ioState, jlm::rvsdg::Output *load_func, const std::shared_ptr< const rvsdg::FunctionType > &loadFunctionType, jlm::rvsdg::Output *store_func, const std::shared_ptr< const rvsdg::FunctionType > &storeFunctionType, jlm::rvsdg::Output *alloca_func, const std::shared_ptr< const rvsdg::FunctionType > &allocaFunctionType)
 
rvsdg::SimpleNodefind_decouple_response (const rvsdg::LambdaNode *lambda, const llvm::IntegerConstantOperation *request_constant)
 
static std::pair< rvsdg::Input *, std::vector< rvsdg::Input * > > TraceEdgeToMerge (rvsdg::Input *state_edge)
 
void OptimizeResMemState (rvsdg::Output *res_mem_state)
 
void OptimizeReqMemState (rvsdg::Output *req_mem_state)
 
rvsdg::SimpleNodeReplaceDecouple (const rvsdg::LambdaNode *lambda, rvsdg::SimpleNode *decouple_request, rvsdg::Output *resp)
 
void gather_mem_nodes (rvsdg::Region *region, std::vector< rvsdg::Node * > &loadNodes, std::vector< rvsdg::Node * > &storeNodes, std::vector< rvsdg::Node * > &decoupleNodes, std::unordered_set< rvsdg::Node * > exclude)
 
static void TracePointer (rvsdg::Output *output, std::unordered_set< rvsdg::Output * > &visited, TracedPointerNodes &tracedPointerNodes)
 
std::vector< TracedPointerNodesTracePointerArguments (const rvsdg::LambdaNode *lambda)
 
rvsdg::LambdaNodefind_containing_lambda (rvsdg::Region *region)
 
static size_t CalculatePortWidth (const TracedPointerNodes &tracedPointerNodes)
 
static rvsdg::SimpleNodeReplaceLoad (rvsdg::SubstitutionMap &smap, const rvsdg::Node *originalLoad, rvsdg::Output *response)
 
static rvsdg::SimpleNodeReplaceStore (rvsdg::SubstitutionMap &smap, const rvsdg::Node *originalStore, rvsdg::Output *response)
 
static rvsdg::OutputConnectRequestResponseMemPorts (const rvsdg::LambdaNode *lambda, size_t argumentIndex, rvsdg::SubstitutionMap &smap, const std::vector< rvsdg::Node * > &originalLoadNodes, const std::vector< rvsdg::Node * > &originalStoreNodes, const std::vector< rvsdg::Node * > &originalDecoupledNodes)
 
static void ConvertMemory (rvsdg::RvsdgModule &rvsdgModule)
 
static void find_load_store (jlm::rvsdg::Output *op, std::vector< jlm::rvsdg::SimpleNode * > &load_nodes, std::vector< jlm::rvsdg::SimpleNode * > &store_nodes, std::unordered_set< jlm::rvsdg::Output * > &visited)
 
static rvsdg::StructuralOutputfind_loop_output (jlm::rvsdg::StructuralInput *sti)
 
static rvsdg::Outputseparate_load_edge (jlm::rvsdg::Output *mem_edge, jlm::rvsdg::Output *addr_edge, jlm::rvsdg::SimpleNode **load, jlm::rvsdg::Output **new_mem_edge, std::vector< jlm::rvsdg::Output * > &store_addresses, std::vector< jlm::rvsdg::Output * > &store_dequeues, std::vector< bool > &store_precedes, bool *load_encountered)
 
jlm::rvsdg::Outputprocess_loops (jlm::rvsdg::Output *state_edge)
 
static void mem_queue (rvsdg::RvsdgModule &rvsdgModule)
 
static rvsdg::RegionResulttrace_edge (jlm::rvsdg::Output *common_edge, jlm::rvsdg::Output *new_edge, std::vector< rvsdg::Node * > &load_nodes, const std::vector< rvsdg::Node * > &store_nodes, std::vector< rvsdg::Node * > &decouple_nodes)
 
bool is_output_of (jlm::rvsdg::Output *output, rvsdg::Node *node)
 
bool depends_on (jlm::rvsdg::Output *output, rvsdg::Node *node)
 
rvsdg::GammaNode::EntryVar get_entryvar (jlm::rvsdg::Output *origin, rvsdg::GammaNode *gamma)
 
bool merge_gamma (rvsdg::GammaNode *gamma)
 
void merge_gamma (rvsdg::Region *region)
 
static bool remove_unused_loop_backedges (LoopNode *loopNode)
 
static bool remove_unused_loop_outputs (LoopNode *ln)
 
static bool remove_loop_passthrough (LoopNode *ln)
 
static bool remove_unused_loop_inputs (LoopNode *ln)
 
static bool dead_spec_gamma (rvsdg::Node *dmux_node)
 
static bool dead_nonspec_gamma (rvsdg::Node *ndmux_node)
 
static bool dead_loop (rvsdg::Node *ndmux_node)
 
static bool dead_loop_lcb (rvsdg::Node *lcb_node)
 
static bool fix_mem_split (rvsdg::Node *split_node)
 
static bool fix_mem_merge (rvsdg::Node *merge_node)
 
void split_opt (llvm::LlvmRvsdgModule &rm)
 
void pre_opt (jlm::llvm::LlvmRvsdgModule &rm)
 
void dump_xml (llvm::LlvmRvsdgModule &rvsdgModule, const std::string &file_name)
 
bool function_match (rvsdg::LambdaNode *ln, const std::string &function_name)
 
const jlm::rvsdg::Outputtrace_call (jlm::rvsdg::Input *input)
 
void inline_calls (rvsdg::Region *region)
 
void convert_alloca (rvsdg::Region *region)
 
rvsdg::DeltaNoderename_delta (rvsdg::DeltaNode *odn)
 
rvsdg::LambdaNodechange_linkage (rvsdg::LambdaNode *ln, llvm::Linkage link)
 
std::unique_ptr< jlm::llvm::LlvmRvsdgModulesplit_hls_function (llvm::LlvmRvsdgModule &rm, const std::string &function_name)
 
void rvsdg2ref (llvm::LlvmRvsdgModule &rhls, const util::FilePath &path)
 
std::unique_ptr< rvsdg::TransformationSequencecreateTransformationSequence (rvsdg::DotWriter &dotWriter, const bool dumpRvsdgDotGraphs)
 
void dump_ref (llvm::LlvmRvsdgModule &rhls, const util::FilePath &path)
 
static bool is_constant (const rvsdg::Node *node)
 
void ConnectStreamBuffer (rvsdg::SimpleNode *enq_call, rvsdg::SimpleNode *deq_call)
 
static void stream_conv (rvsdg::RvsdgModule &rm)
 
static void ConvertThetaNode (rvsdg::ThetaNode &theta)
 
static void ConvertThetaNodesInRegion (rvsdg::Region &region)
 
static void ConvertThetaNodesInStructuralNode (rvsdg::StructuralNode &structuralNode)
 
static bool IsPassthroughLoopVar (const rvsdg::ThetaNode::LoopVar &loopVar)
 
static bool IsPassthroughArgument (const rvsdg::Output &argument)
 
static bool IsPassthroughResult (const rvsdg::Input &result)
 
static void RemoveUnusedStatesFromLambda (rvsdg::LambdaNode &lambdaNode)
 
static std::optional< rvsdg::GammaNode::ExitVarTryGetSingleUserExitVar (rvsdg::GammaNode &gammaNode, rvsdg::Output &argument)
 
static void RemoveUnusedStatesFromGammaNode (rvsdg::GammaNode &gammaNode)
 
static void RemoveUnusedStatesFromThetaNode (rvsdg::ThetaNode &thetaNode)
 
static void RemoveUnusedStatesInRegion (rvsdg::Region &region)
 
static void RemoveUnusedStatesInStructuralNode (rvsdg::StructuralNode &structuralNode)
 
std::shared_ptr< const BundleTypeget_mem_req_type (std::shared_ptr< const rvsdg::Type > elementType, bool write)
 
std::shared_ptr< const BundleTypeget_mem_res_type (std::shared_ptr< const jlm::rvsdg::Type > dataType)
 
int JlmSize (const jlm::rvsdg::Type *type)
 
size_t GetPointerSizeInBits ()
 
static bool congruent (Output *o1, Output *o2, VisitorSet &vs, Context &ctx)
 
static bool congruent (jlm::rvsdg::Output *o1, jlm::rvsdg::Output *o2, Context &ctx)
 
static void mark_arguments (StructuralInput *i1, StructuralInput *i2, Context &ctx)
 
static void mark (jlm::rvsdg::Region *, Context &)
 
static void mark_gamma (const rvsdg::GammaNode *node, Context &ctx)
 
static void mark_theta (const rvsdg::ThetaNode *theta, Context &ctx)
 
static void mark_loop (const LoopNode *loop, Context &ctx)
 
static void mark_lambda (const rvsdg::LambdaNode *node, Context &ctx)
 
static void mark_phi (const rvsdg::PhiNode *phi, Context &ctx)
 
static void mark (const rvsdg::StructuralNode *node, Context &ctx)
 
static void mark (const jlm::rvsdg::SimpleNode *node, Context &ctx)
 
static void divert_users (jlm::rvsdg::Output *output, Context &ctx)
 
static void divert_outputs (Node *node, Context &ctx)
 
static void divert_arguments (rvsdg::Region *region, Context &ctx)
 
static void divert (rvsdg::Region *, Context &)
 
static void divert_gamma (rvsdg::GammaNode *gamma, Context &ctx)
 
static void divert_theta (rvsdg::ThetaNode *theta, Context &ctx)
 
static void divert_loop (LoopNode *node, Context &ctx)
 
static void divert_lambda (rvsdg::LambdaNode *node, Context &ctx)
 
static void divert_phi (rvsdg::PhiNode *phi, Context &ctx)
 
static void divert (rvsdg::StructuralNode *node, Context &ctx)
 
std::string ViewcolorToString (const ViewColors &color)
 
static std::string hex (size_t i)
 
std::string GetDotName (rvsdg::Node *node)
 
std::string GetDotName (rvsdg::Output *output)
 
template<class T >
ViewColors GetDefaultColor (std::unordered_map< T *, ViewColors > &map, T *elem, ViewColors def=BLACK)
 
template<class T >
ViewColors GetDefaultLabel (std::unordered_map< T *, ViewColors > &map, T *elem, ViewColors def=NONE)
 
std::string GetDotName (jlm::rvsdg::Input *input)
 
std::string PortToDot (const std::string &display_name, const std::string &dot_name, const ViewColors &color)
 
std::string ArgumentToDot (rvsdg::RegionArgument *argument, const ViewColors &color)
 
std::string ResultToDot (rvsdg::RegionResult *result, const ViewColors &color)
 
std::string StructuralInputToDot (rvsdg::StructuralInput *structuralInput, const ViewColors &color)
 
std::string StructuralOutputToDot (rvsdg::StructuralOutput *structuralOutput, const ViewColors &color)
 
std::string Edge (jlm::rvsdg::Output *output, jlm::rvsdg::Input *input, std::unordered_map< rvsdg::Output *, ViewColors > &tailLabel, bool back_edge=false)
 
std::string SymbolicEdge (rvsdg::Input *output, rvsdg::Output *input)
 
std::string StructuralNodeToDot (rvsdg::StructuralNode *structuralNode, std::unordered_map< rvsdg::Output *, ViewColors > &outputColor, std::unordered_map< rvsdg::Input *, ViewColors > &inputColor, std::unordered_map< rvsdg::Output *, ViewColors > &tailLabel)
 
std::string SimpleNodeToDot (rvsdg::SimpleNode *simpleNode, std::unordered_map< rvsdg::Output *, ViewColors > &outputColor, std::unordered_map< rvsdg::Input *, ViewColors > &inputColor)
 
std::string RegionToDot (rvsdg::Region *region, std::unordered_map< rvsdg::Output *, ViewColors > &outputColor, std::unordered_map< rvsdg::Input *, ViewColors > &inputColor, std::unordered_map< rvsdg::Output *, ViewColors > &tailLabel)
 
std::string ToDot (rvsdg::Region *region, std::unordered_map< rvsdg::Output *, ViewColors > &outputColor, std::unordered_map< rvsdg::Input *, ViewColors > &inputColor, std::unordered_map< rvsdg::Output *, ViewColors > &tailLabel)
 
void ViewDot (rvsdg::Region *region, FILE *out, std::unordered_map< rvsdg::Output *, ViewColors > &outputColor, std::unordered_map< rvsdg::Input *, ViewColors > &inputColor, std::unordered_map< rvsdg::Output *, ViewColors > &tailLabel)
 
void ViewDot (rvsdg::Region *region, FILE *out)
 
void DumpDot (llvm::LlvmRvsdgModule &rvsdgModule, const std::string &file_name)
 
void DumpDot (llvm::LlvmRvsdgModule &rvsdgModule, const std::string &file_name, std::unordered_map< rvsdg::Output *, ViewColors > outputColor, std::unordered_map< rvsdg::Input *, ViewColors > inputColor, std::unordered_map< rvsdg::Output *, ViewColors > tailLabel)
 
void DumpDot (rvsdg::Region *region, const std::string &file_name)
 
void DumpDot (rvsdg::Region *region, const std::string &file_name, std::unordered_map< rvsdg::Output *, ViewColors > outputColor, std::unordered_map< rvsdg::Input *, ViewColors > inputColor, std::unordered_map< rvsdg::Output *, ViewColors > tailLabel)
 
void DotToSvg (const std::string &file_name)
 

Variables

static constexpr int MEMORY_RESPONSE_LATENCY = 10
 
static size_t MemoryLatency = 10
 
const size_t UnlimitedBufferCapacity = std::numeric_limits<uint32_t>::max()
 
const size_t MaximumBufferSize = 512
 
size_t alloca_cnt = 0
 
const int DefaultBufferCapacity = 10
 

Typedef Documentation

◆ congruence_set

typedef std::unordered_set<jlm::rvsdg::Output *> jlm::hls::congruence_set

Definition at line 71 of file cne.cpp.

Enumeration Type Documentation

◆ ViewColors

Enumerator
NONE 
BLACK 
RED 

Definition at line 18 of file view.hpp.

Function Documentation

◆ add_prints() [1/2]

void jlm::hls::add_prints ( llvm::LlvmRvsdgModule rm)

Definition at line 47 of file add-prints.cpp.

◆ add_prints() [2/2]

void jlm::hls::add_prints ( rvsdg::Region region)

Definition at line 18 of file add-prints.cpp.

◆ AddBuffers()

static void jlm::hls::AddBuffers ( rvsdg::Region region)
static

Definition at line 201 of file add-buffers.cpp.

◆ AdjustLoopBuffers()

static void jlm::hls::AdjustLoopBuffers ( LoopNode loop,
std::unordered_map< rvsdg::Output *, size_t > &  output_cycles,
std::unordered_map< rvsdg::Output *, size_t > &  buffer_capacity,
bool  analyze_inner_loop = false 
)
static

Definition at line 723 of file add-buffers.cpp.

◆ alloca_conv()

static void jlm::hls::alloca_conv ( rvsdg::Region region)
static

Definition at line 118 of file alloca-conv.cpp.

◆ ArgumentToDot()

std::string jlm::hls::ArgumentToDot ( rvsdg::RegionArgument argument,
const ViewColors color 
)

Definition at line 140 of file view.cpp.

◆ CalculateLoopCycleDepth()

void jlm::hls::CalculateLoopCycleDepth ( LoopNode loop,
std::unordered_map< rvsdg::Output *, size_t > &  output_cycles,
bool  analyze_inner_loop = false 
)
static

Definition at line 601 of file add-buffers.cpp.

◆ CalculateLoopDepths()

static void jlm::hls::CalculateLoopDepths ( rvsdg::Region region)
static

Definition at line 937 of file add-buffers.cpp.

◆ CalculatePortWidth()

static size_t jlm::hls::CalculatePortWidth ( const TracedPointerNodes tracedPointerNodes)
static

Definition at line 376 of file mem-conv.cpp.

◆ CanGammaNodeBeSpeculative()

static bool jlm::hls::CanGammaNodeBeSpeculative ( const rvsdg::GammaNode gammaNode)
static

Definition at line 94 of file GammaConversion.cpp.

◆ change_function_name()

rvsdg::LambdaNode* jlm::hls::change_function_name ( rvsdg::LambdaNode ln,
const std::string &  name 
)

Definition at line 20 of file instrument-ref.cpp.

◆ change_linkage()

rvsdg::LambdaNode* jlm::hls::change_linkage ( rvsdg::LambdaNode ln,
llvm::Linkage  link 
)

Definition at line 302 of file rvsdg2rhls.cpp.

◆ check_may_not_depend_on()

void jlm::hls::check_may_not_depend_on ( mlir::Value  value,
::llvm::SmallPtrSet< mlir::Value, 16 > &  forbiddenDependencies,
::llvm::SmallPtrSet< mlir::Value, 16 > &  visited 
)

Definition at line 3471 of file RhlsToFirrtlConverter.cpp.

◆ check_oValids()

void jlm::hls::check_oValids ( ::llvm::SmallVector< mlir::Value > &  oReadys,
::llvm::SmallVector< mlir::Value > &  oValids 
)

Definition at line 3524 of file RhlsToFirrtlConverter.cpp.

◆ check_rhls() [1/2]

static void jlm::hls::check_rhls ( rvsdg::Region sr)
static

Definition at line 34 of file check-rhls.cpp.

◆ check_rhls() [2/2]

static void jlm::hls::check_rhls ( rvsdg::RvsdgModule rm)
static

Definition at line 68 of file check-rhls.cpp.

◆ CheckAddrQueue()

static void jlm::hls::CheckAddrQueue ( rvsdg::Node node)
static

Definition at line 17 of file check-rhls.cpp.

◆ congruent() [1/2]

static bool jlm::hls::congruent ( jlm::rvsdg::Output o1,
jlm::rvsdg::Output o2,
Context ctx 
)
static

Definition at line 294 of file cne.cpp.

◆ congruent() [2/2]

static bool jlm::hls::congruent ( Output o1,
Output o2,
VisitorSet vs,
Context ctx 
)
static

Definition at line 181 of file cne.cpp.

◆ ConnectRequestResponseMemPorts()

static rvsdg::Output* jlm::hls::ConnectRequestResponseMemPorts ( const rvsdg::LambdaNode lambda,
size_t  argumentIndex,
rvsdg::SubstitutionMap smap,
const std::vector< rvsdg::Node * > &  originalLoadNodes,
const std::vector< rvsdg::Node * > &  originalStoreNodes,
const std::vector< rvsdg::Node * > &  originalDecoupledNodes 
)
static

Definition at line 484 of file mem-conv.cpp.

◆ ConnectStreamBuffer()

void jlm::hls::ConnectStreamBuffer ( rvsdg::SimpleNode enq_call,
rvsdg::SimpleNode deq_call 
)

Definition at line 20 of file stream-conv.cpp.

◆ convert_alloca()

void jlm::hls::convert_alloca ( rvsdg::Region region)

Definition at line 192 of file rvsdg2rhls.cpp.

◆ convert_loop_state_to_lcb()

void jlm::hls::convert_loop_state_to_lcb ( rvsdg::Input loop_state_input)

Definition at line 438 of file decouple-mem-state.cpp.

◆ convert_prints() [1/2]

void jlm::hls::convert_prints ( llvm::LlvmRvsdgModule rm)

Definition at line 55 of file add-prints.cpp.

◆ convert_prints() [2/2]

void jlm::hls::convert_prints ( rvsdg::Region region,
jlm::rvsdg::Output printf,
const std::shared_ptr< const rvsdg::FunctionType > &  functionType 
)

Definition at line 68 of file add-prints.cpp.

◆ ConvertGammaNodesInRegion()

static void jlm::hls::ConvertGammaNodesInRegion ( rvsdg::Region region)
static

Definition at line 158 of file GammaConversion.cpp.

◆ ConvertGammaNodesInStructuralNode()

static void jlm::hls::ConvertGammaNodesInStructuralNode ( rvsdg::StructuralNode structuralNode)
static

Definition at line 137 of file GammaConversion.cpp.

◆ ConvertGammaNodeWithoutSpeculation()

static void jlm::hls::ConvertGammaNodeWithoutSpeculation ( rvsdg::GammaNode gammaNode)
static

Definition at line 17 of file GammaConversion.cpp.

◆ ConvertGammaNodeWithSpeculation()

static void jlm::hls::ConvertGammaNodeWithSpeculation ( rvsdg::GammaNode gammaNode)
static

Definition at line 58 of file GammaConversion.cpp.

◆ ConvertMemory()

static void jlm::hls::ConvertMemory ( rvsdg::RvsdgModule rvsdgModule)
static

Definition at line 603 of file mem-conv.cpp.

◆ ConvertThetaNode()

static void jlm::hls::ConvertThetaNode ( rvsdg::ThetaNode theta)
static

Definition at line 16 of file ThetaConversion.cpp.

◆ ConvertThetaNodesInRegion()

static void jlm::hls::ConvertThetaNodesInRegion ( rvsdg::Region region)
static

Definition at line 85 of file ThetaConversion.cpp.

◆ ConvertThetaNodesInStructuralNode()

static void jlm::hls::ConvertThetaNodesInStructuralNode ( rvsdg::StructuralNode structuralNode)
static

Definition at line 71 of file ThetaConversion.cpp.

◆ ConvertToCType()

std::string jlm::hls::ConvertToCType ( const rvsdg::Type type)

Definition at line 19 of file verilator-harness-hls.cpp.

◆ CreateLoopFrontier()

static void jlm::hls::CreateLoopFrontier ( const LoopNode loop,
std::unordered_map< rvsdg::Output *, size_t > &  output_cycles,
std::unordered_set< rvsdg::Input * > &  frontier,
std::unordered_set< BackEdgeResult * > &  stream_backedges,
std::unordered_set< rvsdg::SimpleNode * > &  top_muxes 
)
static

Definition at line 392 of file add-buffers.cpp.

◆ createTransformationSequence()

std::unique_ptr< rvsdg::TransformationSequence > jlm::hls::createTransformationSequence ( rvsdg::DotWriter dotWriter,
const bool  dumpRvsdgDotGraphs 
)

Definition at line 446 of file rvsdg2rhls.cpp.

◆ dead_loop()

static bool jlm::hls::dead_loop ( rvsdg::Node ndmux_node)
static

Definition at line 194 of file rhls-dne.cpp.

◆ dead_loop_lcb()

static bool jlm::hls::dead_loop_lcb ( rvsdg::Node lcb_node)
static

Definition at line 272 of file rhls-dne.cpp.

◆ dead_nonspec_gamma()

static bool jlm::hls::dead_nonspec_gamma ( rvsdg::Node ndmux_node)
static

Definition at line 153 of file rhls-dne.cpp.

◆ dead_spec_gamma()

static bool jlm::hls::dead_spec_gamma ( rvsdg::Node dmux_node)
static

Definition at line 128 of file rhls-dne.cpp.

◆ decouple_mem_state()

static void jlm::hls::decouple_mem_state ( rvsdg::RvsdgModule rvsdgModule)
static

Definition at line 457 of file decouple-mem-state.cpp.

◆ depends_on()

bool jlm::hls::depends_on ( jlm::rvsdg::Output output,
rvsdg::Node node 
)

Definition at line 27 of file merge-gamma.cpp.

◆ divert() [1/2]

static void jlm::hls::divert ( rvsdg::Region region,
Context ctx 
)
static

Definition at line 609 of file cne.cpp.

◆ divert() [2/2]

static void jlm::hls::divert ( rvsdg::StructuralNode node,
Context ctx 
)
static

Definition at line 581 of file cne.cpp.

◆ divert_arguments()

static void jlm::hls::divert_arguments ( rvsdg::Region region,
Context ctx 
)
static

Definition at line 520 of file cne.cpp.

◆ divert_gamma()

static void jlm::hls::divert_gamma ( rvsdg::GammaNode gamma,
Context ctx 
)
static

Definition at line 530 of file cne.cpp.

◆ divert_lambda()

static void jlm::hls::divert_lambda ( rvsdg::LambdaNode node,
Context ctx 
)
static

Definition at line 567 of file cne.cpp.

◆ divert_loop()

static void jlm::hls::divert_loop ( LoopNode node,
Context ctx 
)
static

Definition at line 560 of file cne.cpp.

◆ divert_outputs()

static void jlm::hls::divert_outputs ( Node node,
Context ctx 
)
static

Definition at line 513 of file cne.cpp.

◆ divert_phi()

static void jlm::hls::divert_phi ( rvsdg::PhiNode phi,
Context ctx 
)
static

Definition at line 574 of file cne.cpp.

◆ divert_theta()

static void jlm::hls::divert_theta ( rvsdg::ThetaNode theta,
Context ctx 
)
static

Definition at line 545 of file cne.cpp.

◆ divert_users()

static void jlm::hls::divert_users ( jlm::rvsdg::Output output,
Context ctx 
)
static

Definition at line 504 of file cne.cpp.

◆ DotToSvg()

void jlm::hls::DotToSvg ( const std::string &  file_name)

Definition at line 497 of file view.cpp.

◆ dump_ref()

void jlm::hls::dump_ref ( llvm::LlvmRvsdgModule rhls,
const util::FilePath path 
)

Definition at line 527 of file rvsdg2rhls.cpp.

◆ dump_xml()

void jlm::hls::dump_xml ( llvm::LlvmRvsdgModule rvsdgModule,
const std::string &  file_name 
)

Definition at line 97 of file rvsdg2rhls.cpp.

◆ DumpDot() [1/4]

void jlm::hls::DumpDot ( llvm::LlvmRvsdgModule rvsdgModule,
const std::string &  file_name 
)

Definition at line 459 of file view.cpp.

◆ DumpDot() [2/4]

void jlm::hls::DumpDot ( llvm::LlvmRvsdgModule rvsdgModule,
const std::string &  file_name,
std::unordered_map< rvsdg::Output *, ViewColors outputColor,
std::unordered_map< rvsdg::Input *, ViewColors inputColor,
std::unordered_map< rvsdg::Output *, ViewColors tailLabel 
)

Definition at line 465 of file view.cpp.

◆ DumpDot() [3/4]

void jlm::hls::DumpDot ( rvsdg::Region region,
const std::string &  file_name 
)

Definition at line 476 of file view.cpp.

◆ DumpDot() [4/4]

void jlm::hls::DumpDot ( rvsdg::Region region,
const std::string &  file_name,
std::unordered_map< rvsdg::Output *, ViewColors outputColor,
std::unordered_map< rvsdg::Input *, ViewColors inputColor,
std::unordered_map< rvsdg::Output *, ViewColors tailLabel 
)

Definition at line 484 of file view.cpp.

◆ Edge()

std::string jlm::hls::Edge ( jlm::rvsdg::Output output,
jlm::rvsdg::Input input,
std::unordered_map< rvsdg::Output *, ViewColors > &  tailLabel,
bool  back_edge = false 
)

Definition at line 172 of file view.cpp.

◆ EliminateDeadNodes()

void jlm::hls::EliminateDeadNodes ( llvm::LlvmRvsdgModule rvsdgModule)

Removes dead loop nodes and their outputs and inputs.

Parameters
rvsdgModuleThe RVSDG module the transformation is performed on.

FIXME: This code should be incorporated into llvm::DeadNodeElimination. However, before this can happen, llvm::DeadNodeElimination needs to be moved into the rvsdg namespace and made extensible such that transformation users can register clean up functions for structural nodes.

See also
hls::loop_node

Definition at line 108 of file DeadNodeElimination.cpp.

◆ EliminateDeadNodesInRegion()

static bool jlm::hls::EliminateDeadNodesInRegion ( rvsdg::Region region)
static

Definition at line 78 of file DeadNodeElimination.cpp.

◆ find_containing_lambda()

rvsdg::LambdaNode* jlm::hls::find_containing_lambda ( rvsdg::Region region)

Definition at line 366 of file mem-conv.cpp.

◆ find_decouple_response()

jlm::rvsdg::SimpleNode * jlm::hls::find_decouple_response ( const rvsdg::LambdaNode lambda,
const llvm::IntegerConstantOperation request_constant 
)

Definition at line 27 of file mem-conv.cpp.

◆ find_function_arguments()

std::vector< rvsdg::LambdaNode::ContextVar > jlm::hls::find_function_arguments ( const rvsdg::LambdaNode lambda,
std::string  name_contains 
)

Definition at line 23 of file hls-function-util.cpp.

◆ find_load_store()

static void jlm::hls::find_load_store ( jlm::rvsdg::Output op,
std::vector< jlm::rvsdg::SimpleNode * > &  load_nodes,
std::vector< jlm::rvsdg::SimpleNode * > &  store_nodes,
std::unordered_set< jlm::rvsdg::Output * > &  visited 
)
static

Definition at line 27 of file mem-queue.cpp.

◆ find_loop_output()

static rvsdg::StructuralOutput* jlm::hls::find_loop_output ( jlm::rvsdg::StructuralInput sti)
static

Definition at line 87 of file mem-queue.cpp.

◆ FindSourceNode()

rvsdg::Output * jlm::hls::FindSourceNode ( rvsdg::Output out)

Traces the origin of the given RVSDG output to find the original source of the value, which is either the output of a SimpleNode, or a function argument.

Assumes no gamma or theta nodes are present.

Parameters
outThe output to be traced to its source

Definition at line 313 of file hls-function-util.cpp.

◆ FindUserNode()

static rvsdg::Input* jlm::hls::FindUserNode ( rvsdg::Output out)
static

Definition at line 17 of file add-buffers.cpp.

◆ fix_mem_merge()

static bool jlm::hls::fix_mem_merge ( rvsdg::Node merge_node)
static

Definition at line 371 of file rhls-dne.cpp.

◆ fix_mem_split()

static bool jlm::hls::fix_mem_split ( rvsdg::Node split_node)
static

Definition at line 326 of file rhls-dne.cpp.

◆ follow_state_edge()

static rvsdg::Output * jlm::hls::follow_state_edge ( rvsdg::Input state_edge,
std::vector< rvsdg::SimpleNode * > &  mem_ops,
bool  modify 
)
static

Definition at line 281 of file decouple-mem-state.cpp.

◆ function_match()

bool jlm::hls::function_match ( rvsdg::LambdaNode ln,
const std::string &  function_name 
)

Definition at line 105 of file rvsdg2rhls.cpp.

◆ gather_mem_nodes()

void jlm::hls::gather_mem_nodes ( rvsdg::Region region,
std::vector< rvsdg::Node * > &  loadNodes,
std::vector< rvsdg::Node * > &  storeNodes,
std::vector< rvsdg::Node * > &  decoupleNodes,
std::unordered_set< rvsdg::Node * >  exclude 
)

Definition at line 225 of file mem-conv.cpp.

◆ gep_to_index()

static jlm::rvsdg::Output* jlm::hls::gep_to_index ( jlm::rvsdg::Output o)
static

Definition at line 106 of file alloca-conv.cpp.

◆ get_entryvar()

rvsdg::GammaNode::EntryVar jlm::hls::get_entryvar ( jlm::rvsdg::Output origin,
rvsdg::GammaNode gamma 
)

Definition at line 51 of file merge-gamma.cpp.

◆ get_function_name()

std::string jlm::hls::get_function_name ( jlm::rvsdg::Input input)

Definition at line 271 of file hls-function-util.cpp.

◆ get_mem_req_type()

std::shared_ptr< const BundleType > jlm::hls::get_mem_req_type ( std::shared_ptr< const rvsdg::Type elementType,
bool  write 
)

Definition at line 320 of file hls.cpp.

◆ get_mem_res_type()

std::shared_ptr< const BundleType > jlm::hls::get_mem_res_type ( std::shared_ptr< const jlm::rvsdg::Type dataType)

Definition at line 335 of file hls.cpp.

◆ get_mem_state_user()

rvsdg::Input * jlm::hls::get_mem_state_user ( rvsdg::Output state_edge)

Definition at line 304 of file hls-function-util.cpp.

◆ get_parent_regions()

std::deque< rvsdg::Region * > jlm::hls::get_parent_regions ( rvsdg::Region region)

Definition at line 191 of file hls-function-util.cpp.

◆ GetDefaultColor()

template<class T >
ViewColors jlm::hls::GetDefaultColor ( std::unordered_map< T *, ViewColors > &  map,
T *  elem,
ViewColors  def = BLACK 
)

Definition at line 79 of file view.cpp.

◆ GetDefaultLabel()

template<class T >
ViewColors jlm::hls::GetDefaultLabel ( std::unordered_map< T *, ViewColors > &  map,
T *  elem,
ViewColors  def = NONE 
)

Definition at line 91 of file view.cpp.

◆ GetDotName() [1/3]

std::string jlm::hls::GetDotName ( jlm::rvsdg::Input input)

Definition at line 102 of file view.cpp.

◆ GetDotName() [2/3]

std::string jlm::hls::GetDotName ( rvsdg::Node node)

Definition at line 53 of file view.cpp.

◆ GetDotName() [3/3]

std::string jlm::hls::GetDotName ( rvsdg::Output output)

Definition at line 59 of file view.cpp.

◆ GetParameterListAsC()

std::tuple< size_t, std::string, std::string > jlm::hls::GetParameterListAsC ( const rvsdg::LambdaNode kernel)

Takes an HLS kernel and determines the parameters of the original C function. Returns a tuple, the first element of which is the number of parameters. The second element is a string defining the C parameters, like "int32_t a0, void* a1, void* a2". The third element is a string for calling the C function, like "a0, a1, a2".

Parameters
kernelthe lambda node representing the kernel
Returns
a tuple (number of parameters, string of parameters, string of call arguments)

Definition at line 87 of file verilator-harness-hls.cpp.

◆ GetPointerSizeInBits()

size_t jlm::hls::GetPointerSizeInBits ( )
Returns
The size of a pointer in bits.

Definition at line 396 of file hls.cpp.

◆ GetReturnTypeAsC()

std::optional< std::string > jlm::hls::GetReturnTypeAsC ( const rvsdg::LambdaNode kernel)

Takes an HLS kernel and determines the return type of the original C function. If the function did not have a return value, i.e., returns "void", nullopt is returned.

Parameters
kernelthe lambda node representing the kernel
Returns
the return type of the kernel as written in C, or nullopt if it has no return value.

Definition at line 63 of file verilator-harness-hls.cpp.

◆ handle_structural()

static void jlm::hls::handle_structural ( std::vector< std::tuple< rvsdg::SimpleNode *, rvsdg::Input * >> &  outstanding_dec_reqs,
std::vector< rvsdg::SimpleNode * > &  mem_ops,
rvsdg::Input state_edge_before,
rvsdg::Output state_edge_after 
)
static

Definition at line 205 of file decouple-mem-state.cpp.

◆ hex()

static std::string jlm::hls::hex ( size_t  i)
inlinestatic

Definition at line 45 of file view.cpp.

◆ inline_calls()

void jlm::hls::inline_calls ( rvsdg::Region region)

Definition at line 145 of file rvsdg2rhls.cpp.

◆ instrument_ref() [1/3]

void jlm::hls::instrument_ref ( llvm::LlvmRvsdgModule rm)

Definition at line 62 of file instrument-ref.cpp.

◆ instrument_ref() [2/3]

void jlm::hls::instrument_ref ( rvsdg::Region region,
jlm::rvsdg::Output ioState,
jlm::rvsdg::Output load_func,
const std::shared_ptr< const jlm::rvsdg::FunctionType > &  loadFunctionType,
jlm::rvsdg::Output store_func,
const std::shared_ptr< const jlm::rvsdg::FunctionType > &  storeFunctionType,
jlm::rvsdg::Output alloca_func,
const std::shared_ptr< const jlm::rvsdg::FunctionType > &  allocaFunctionType 
)

Definition at line 133 of file instrument-ref.cpp.

◆ instrument_ref() [3/3]

void jlm::hls::instrument_ref ( rvsdg::Region region,
jlm::rvsdg::Output ioState,
jlm::rvsdg::Output load_func,
const std::shared_ptr< const rvsdg::FunctionType > &  loadFunctionType,
jlm::rvsdg::Output store_func,
const std::shared_ptr< const rvsdg::FunctionType > &  storeFunctionType,
jlm::rvsdg::Output alloca_func,
const std::shared_ptr< const rvsdg::FunctionType > &  allocaFunctionType 
)

◆ is_constant()

static bool jlm::hls::is_constant ( const rvsdg::Node node)
inlinestatic

Definition at line 20 of file rvsdg2rhls.hpp.

◆ is_dec_req()

bool jlm::hls::is_dec_req ( rvsdg::SimpleNode node)

Definition at line 280 of file hls-function-util.cpp.

◆ is_dec_res()

bool jlm::hls::is_dec_res ( rvsdg::SimpleNode node)

Definition at line 292 of file hls-function-util.cpp.

◆ is_function_argument()

bool jlm::hls::is_function_argument ( const rvsdg::LambdaNode::ContextVar cv)

Definition at line 261 of file hls-function-util.cpp.

◆ is_output_of()

bool jlm::hls::is_output_of ( jlm::rvsdg::Output output,
rvsdg::Node node 
)

Definition at line 20 of file merge-gamma.cpp.

◆ isForbiddenChar()

static bool jlm::hls::isForbiddenChar ( char  c)

Definition at line 16 of file base-hls.cpp.

◆ IsPassthroughArgument()

static bool jlm::hls::IsPassthroughArgument ( const rvsdg::Output argument)
static

Definition at line 26 of file UnusedStateRemoval.cpp.

◆ IsPassthroughLoopVar()

static bool jlm::hls::IsPassthroughLoopVar ( const rvsdg::ThetaNode::LoopVar loopVar)
static

Definition at line 20 of file UnusedStateRemoval.cpp.

◆ IsPassthroughResult()

static bool jlm::hls::IsPassthroughResult ( const rvsdg::Input result)
static

Definition at line 37 of file UnusedStateRemoval.cpp.

◆ JlmSize()

int jlm::hls::JlmSize ( const jlm::rvsdg::Type type)

Definition at line 344 of file hls.cpp.

◆ mark() [1/3]

static void jlm::hls::mark ( const jlm::rvsdg::SimpleNode node,
Context ctx 
)
static

Definition at line 452 of file cne.cpp.

◆ mark() [2/3]

static void jlm::hls::mark ( const rvsdg::StructuralNode node,
Context ctx 
)
static

Definition at line 424 of file cne.cpp.

◆ mark() [3/3]

static void jlm::hls::mark ( jlm::rvsdg::Region region,
Context ctx 
)
static

Definition at line 490 of file cne.cpp.

◆ mark_arguments()

static void jlm::hls::mark_arguments ( StructuralInput i1,
StructuralInput i2,
Context ctx 
)
static

Definition at line 301 of file cne.cpp.

◆ mark_gamma()

static void jlm::hls::mark_gamma ( const rvsdg::GammaNode node,
Context ctx 
)
static

Definition at line 320 of file cne.cpp.

◆ mark_lambda()

static void jlm::hls::mark_lambda ( const rvsdg::LambdaNode node,
Context ctx 
)
static

Definition at line 386 of file cne.cpp.

◆ mark_loop()

static void jlm::hls::mark_loop ( const LoopNode loop,
Context ctx 
)
static

Definition at line 367 of file cne.cpp.

◆ mark_phi()

static void jlm::hls::mark_phi ( const rvsdg::PhiNode phi,
Context ctx 
)
static

Definition at line 404 of file cne.cpp.

◆ mark_theta()

static void jlm::hls::mark_theta ( const rvsdg::ThetaNode theta,
Context ctx 
)
static

Definition at line 344 of file cne.cpp.

◆ MaximizeBuffers()

static void jlm::hls::MaximizeBuffers ( rvsdg::Region region)
static

Definition at line 258 of file add-buffers.cpp.

◆ mem_queue()

static void jlm::hls::mem_queue ( rvsdg::RvsdgModule rvsdgModule)
static

Definition at line 475 of file mem-queue.cpp.

◆ merge_gamma() [1/2]

bool jlm::hls::merge_gamma ( rvsdg::GammaNode gamma)

Definition at line 68 of file merge-gamma.cpp.

◆ merge_gamma() [2/2]

void jlm::hls::merge_gamma ( rvsdg::Region region)

Definition at line 138 of file merge-gamma.cpp.

◆ NodeCapacity()

static std::vector<size_t> jlm::hls::NodeCapacity ( rvsdg::SimpleNode node,
std::vector< size_t > &  input_capacities 
)
static

Definition at line 352 of file add-buffers.cpp.

◆ NodeCycles()

static std::vector<size_t> jlm::hls::NodeCycles ( rvsdg::SimpleNode node,
std::vector< size_t > &  input_cycles 
)
static

Definition at line 305 of file add-buffers.cpp.

◆ optimize_single_mem_op_loop()

static void jlm::hls::optimize_single_mem_op_loop ( std::vector< rvsdg::SimpleNode * > &  mem_ops,
rvsdg::Input state_edge_before,
rvsdg::Output state_edge_after 
)
static

Definition at line 257 of file decouple-mem-state.cpp.

◆ OptimizeAddrQ()

static void jlm::hls::OptimizeAddrQ ( rvsdg::SimpleNode node)
static

Definition at line 92 of file add-buffers.cpp.

◆ OptimizeBuffer()

static void jlm::hls::OptimizeBuffer ( rvsdg::SimpleNode node)
static

Definition at line 101 of file add-buffers.cpp.

◆ OptimizeLoop()

static void jlm::hls::OptimizeLoop ( LoopNode loopNode)
static

Definition at line 124 of file add-buffers.cpp.

◆ OptimizeReqMemState()

void jlm::hls::OptimizeReqMemState ( rvsdg::Output req_mem_state)

Definition at line 119 of file mem-conv.cpp.

◆ OptimizeResMemState()

void jlm::hls::OptimizeResMemState ( rvsdg::Output res_mem_state)

Definition at line 99 of file mem-conv.cpp.

◆ PlaceBuffer()

static void jlm::hls::PlaceBuffer ( rvsdg::Output out,
size_t  capacity,
bool  passThrough 
)
static

Definition at line 52 of file add-buffers.cpp.

◆ PlaceBufferLoop()

static size_t jlm::hls::PlaceBufferLoop ( rvsdg::Output out,
size_t  min_capacity,
bool  passThrough 
)
static

Definition at line 662 of file add-buffers.cpp.

◆ PortToDot()

std::string jlm::hls::PortToDot ( const std::string &  display_name,
const std::string &  dot_name,
const ViewColors color 
)

Definition at line 120 of file view.cpp.

◆ pre_opt()

void jlm::hls::pre_opt ( jlm::llvm::LlvmRvsdgModule rm)

Definition at line 79 of file rvsdg2rhls.cpp.

◆ process_loops()

jlm::rvsdg::Output* jlm::hls::process_loops ( jlm::rvsdg::Output state_edge)

Definition at line 358 of file mem-queue.cpp.

◆ PushCycleFrontier()

static void jlm::hls::PushCycleFrontier ( std::unordered_map< rvsdg::Output *, size_t > &  output_cycles,
std::unordered_set< rvsdg::Input * > &  frontier,
std::unordered_set< BackEdgeResult * > &  stream_backedges,
std::unordered_set< rvsdg::SimpleNode * > &  top_muxes 
)
static

Definition at line 463 of file add-buffers.cpp.

◆ RegionToDot()

std::string jlm::hls::RegionToDot ( rvsdg::Region region,
std::unordered_map< rvsdg::Output *, ViewColors > &  outputColor,
std::unordered_map< rvsdg::Input *, ViewColors > &  inputColor,
std::unordered_map< rvsdg::Output *, ViewColors > &  tailLabel 
)

Definition at line 350 of file view.cpp.

◆ remove_loop_passthrough()

static bool jlm::hls::remove_loop_passthrough ( LoopNode ln)
static

Definition at line 63 of file rhls-dne.cpp.

◆ remove_unused_loop_backedges()

static bool jlm::hls::remove_unused_loop_backedges ( LoopNode loopNode)
static

Definition at line 17 of file rhls-dne.cpp.

◆ remove_unused_loop_inputs()

static bool jlm::hls::remove_unused_loop_inputs ( LoopNode ln)
static

Definition at line 88 of file rhls-dne.cpp.

◆ remove_unused_loop_outputs()

static bool jlm::hls::remove_unused_loop_outputs ( LoopNode ln)
static

Definition at line 46 of file rhls-dne.cpp.

◆ RemoveUnusedInputs()

static bool jlm::hls::RemoveUnusedInputs ( LoopNode loopNode)
static

Definition at line 32 of file DeadNodeElimination.cpp.

◆ RemoveUnusedLoopOutputs()

static bool jlm::hls::RemoveUnusedLoopOutputs ( LoopNode loopNode)
static

Definition at line 14 of file DeadNodeElimination.cpp.

◆ RemoveUnusedStatesFromGammaNode()

static void jlm::hls::RemoveUnusedStatesFromGammaNode ( rvsdg::GammaNode gammaNode)
static

Definition at line 142 of file UnusedStateRemoval.cpp.

◆ RemoveUnusedStatesFromLambda()

static void jlm::hls::RemoveUnusedStatesFromLambda ( rvsdg::LambdaNode lambdaNode)
static

Definition at line 44 of file UnusedStateRemoval.cpp.

◆ RemoveUnusedStatesFromThetaNode()

static void jlm::hls::RemoveUnusedStatesFromThetaNode ( rvsdg::ThetaNode thetaNode)
static

Definition at line 175 of file UnusedStateRemoval.cpp.

◆ RemoveUnusedStatesInRegion()

static void jlm::hls::RemoveUnusedStatesInRegion ( rvsdg::Region region)
static

Definition at line 217 of file UnusedStateRemoval.cpp.

◆ RemoveUnusedStatesInStructuralNode()

static void jlm::hls::RemoveUnusedStatesInStructuralNode ( rvsdg::StructuralNode structuralNode)
static

Definition at line 194 of file UnusedStateRemoval.cpp.

◆ rename_delta()

rvsdg::DeltaNode* jlm::hls::rename_delta ( rvsdg::DeltaNode odn)

Definition at line 260 of file rvsdg2rhls.cpp.

◆ ReplaceDecouple()

rvsdg::SimpleNode* jlm::hls::ReplaceDecouple ( const rvsdg::LambdaNode lambda,
rvsdg::SimpleNode decouple_request,
rvsdg::Output resp 
)

Definition at line 141 of file mem-conv.cpp.

◆ ReplaceLoad()

static rvsdg::SimpleNode* jlm::hls::ReplaceLoad ( rvsdg::SubstitutionMap smap,
const rvsdg::Node originalLoad,
rvsdg::Output response 
)
static

Definition at line 405 of file mem-conv.cpp.

◆ ReplaceStore()

static rvsdg::SimpleNode* jlm::hls::ReplaceStore ( rvsdg::SubstitutionMap smap,
const rvsdg::Node originalStore,
rvsdg::Output response 
)
static

Definition at line 447 of file mem-conv.cpp.

◆ ResultToDot()

std::string jlm::hls::ResultToDot ( rvsdg::RegionResult result,
const ViewColors color 
)

Definition at line 148 of file view.cpp.

◆ round_up_pow2()

static constexpr uint32_t jlm::hls::round_up_pow2 ( uint32_t  x)
staticconstexpr

Definition at line 244 of file add-buffers.cpp.

◆ route_request_rhls()

rvsdg::Output * jlm::hls::route_request_rhls ( rvsdg::Region target,
rvsdg::Output request 
)

Definition at line 177 of file hls-function-util.cpp.

◆ route_response_rhls()

rvsdg::Output * jlm::hls::route_response_rhls ( rvsdg::Region target,
rvsdg::Output response 
)

Definition at line 162 of file hls-function-util.cpp.

◆ route_to_region_rhls()

rvsdg::Output * jlm::hls::route_to_region_rhls ( rvsdg::Region target,
rvsdg::Output out 
)

Definition at line 124 of file hls-function-util.cpp.

◆ rvsdg2ref()

void jlm::hls::rvsdg2ref ( llvm::LlvmRvsdgModule rhls,
const util::FilePath path 
)

Definition at line 440 of file rvsdg2rhls.cpp.

◆ separate_load_edge()

static rvsdg::Output* jlm::hls::separate_load_edge ( jlm::rvsdg::Output mem_edge,
jlm::rvsdg::Output addr_edge,
jlm::rvsdg::SimpleNode **  load,
jlm::rvsdg::Output **  new_mem_edge,
std::vector< jlm::rvsdg::Output * > &  store_addresses,
std::vector< jlm::rvsdg::Output * > &  store_dequeues,
std::vector< bool > &  store_precedes,
bool *  load_encountered 
)
static

Definition at line 125 of file mem-queue.cpp.

◆ setMemoryLatency()

void jlm::hls::setMemoryLatency ( size_t  memoryLatency)

Definition at line 654 of file add-buffers.cpp.

◆ SimpleNodeToDot()

std::string jlm::hls::SimpleNodeToDot ( rvsdg::SimpleNode simpleNode,
std::unordered_map< rvsdg::Output *, ViewColors > &  outputColor,
std::unordered_map< rvsdg::Input *, ViewColors > &  inputColor 
)

Definition at line 272 of file view.cpp.

◆ split_hls_function()

std::unique_ptr< llvm::LlvmRvsdgModule > jlm::hls::split_hls_function ( llvm::LlvmRvsdgModule rm,
const std::string &  function_name 
)

Definition at line 344 of file rvsdg2rhls.cpp.

◆ split_opt()

void jlm::hls::split_opt ( llvm::LlvmRvsdgModule rm)

Definition at line 61 of file rvsdg2rhls.cpp.

◆ stream_conv()

static void jlm::hls::stream_conv ( rvsdg::RvsdgModule rm)
static

Definition at line 55 of file stream-conv.cpp.

◆ StructuralInputToDot()

std::string jlm::hls::StructuralInputToDot ( rvsdg::StructuralInput structuralInput,
const ViewColors color 
)

Definition at line 156 of file view.cpp.

◆ StructuralNodeToDot()

std::string jlm::hls::StructuralNodeToDot ( rvsdg::StructuralNode structuralNode,
std::unordered_map< rvsdg::Output *, ViewColors > &  outputColor,
std::unordered_map< rvsdg::Input *, ViewColors > &  inputColor,
std::unordered_map< rvsdg::Output *, ViewColors > &  tailLabel 
)

Definition at line 219 of file view.cpp.

◆ StructuralOutputToDot()

std::string jlm::hls::StructuralOutputToDot ( rvsdg::StructuralOutput structuralOutput,
const ViewColors color 
)

Definition at line 164 of file view.cpp.

◆ SymbolicEdge()

std::string jlm::hls::SymbolicEdge ( rvsdg::Input output,
rvsdg::Output input 
)

Definition at line 198 of file view.cpp.

◆ ToDot()

std::string jlm::hls::ToDot ( rvsdg::Region region,
std::unordered_map< rvsdg::Output *, ViewColors > &  outputColor,
std::unordered_map< rvsdg::Input *, ViewColors > &  inputColor,
std::unordered_map< rvsdg::Output *, ViewColors > &  tailLabel 
)

Definition at line 424 of file view.cpp.

◆ trace_call()

const jlm::rvsdg::Output * jlm::hls::trace_call ( jlm::rvsdg::Input input)

Definition at line 118 of file rvsdg2rhls.cpp.

◆ trace_call_rhls() [1/2]

const rvsdg::Output * jlm::hls::trace_call_rhls ( const rvsdg::Input input)

Definition at line 254 of file hls-function-util.cpp.

◆ trace_call_rhls() [2/2]

const rvsdg::Output * jlm::hls::trace_call_rhls ( const rvsdg::Output output)

Definition at line 205 of file hls-function-util.cpp.

◆ trace_constant()

const llvm::IntegerConstantOperation * jlm::hls::trace_constant ( const rvsdg::Output dst)

Definition at line 96 of file hls-function-util.cpp.

◆ trace_edge() [1/2]

static rvsdg::RegionResult* jlm::hls::trace_edge ( jlm::rvsdg::Output common_edge,
jlm::rvsdg::Output new_edge,
std::vector< rvsdg::Node * > &  load_nodes,
const std::vector< rvsdg::Node * > &  store_nodes,
std::vector< rvsdg::Node * > &  decouple_nodes 
)
static

Definition at line 29 of file mem-sep.cpp.

◆ trace_edge() [2/2]

static rvsdg::Output* jlm::hls::trace_edge ( rvsdg::Input state_edge,
rvsdg::Output new_edge,
rvsdg::SimpleNode target_call,
rvsdg::Output end 
)
static

Definition at line 38 of file decouple-mem-state.cpp.

◆ trace_function_calls()

void jlm::hls::trace_function_calls ( rvsdg::Output output,
std::vector< rvsdg::SimpleNode * > &  calls,
std::unordered_set< rvsdg::Output * > &  visited 
)

Definition at line 42 of file hls-function-util.cpp.

◆ TraceEdgeToMerge()

static std::pair<rvsdg::Input *, std::vector<rvsdg::Input *> > jlm::hls::TraceEdgeToMerge ( rvsdg::Input state_edge)
static

Definition at line 50 of file mem-conv.cpp.

◆ TracePointer()

static void jlm::hls::TracePointer ( rvsdg::Output output,
std::unordered_set< rvsdg::Output * > &  visited,
TracedPointerNodes tracedPointerNodes 
)
static

If the output is a pointer, it traces it to all memory operations it reaches. Pointers read from memory is not traced, i.e., the output of load operations is not traced.

Parameters
outputThe output to trace
visitedA set of already visited outputs
tracedPointerNodesAll nodes that are reached

Definition at line 271 of file mem-conv.cpp.

◆ TracePointerArguments()

std::vector< TracedPointerNodes > jlm::hls::TracePointerArguments ( const rvsdg::LambdaNode lambda)

Traces all pointer arguments of a lambda node and finds all memory operations. Pointers read from memory is not traced, i.e., the output of load operations is not traced.

Parameters
lambdaThe lambda node for which to trace all pointer arguments
Returns
A vector where each element contains all memory operations traced from a pointer

Definition at line 339 of file mem-conv.cpp.

◆ TryGetSingleUserExitVar()

static std::optional<rvsdg::GammaNode::ExitVar> jlm::hls::TryGetSingleUserExitVar ( rvsdg::GammaNode gammaNode,
rvsdg::Output argument 
)
static

Definition at line 128 of file UnusedStateRemoval.cpp.

◆ ViewcolorToString()

std::string jlm::hls::ViewcolorToString ( const ViewColors color)

Definition at line 22 of file view.cpp.

◆ ViewDot() [1/2]

void jlm::hls::ViewDot ( rvsdg::Region region,
FILE *  out 
)

Definition at line 450 of file view.cpp.

◆ ViewDot() [2/2]

void jlm::hls::ViewDot ( rvsdg::Region region,
FILE *  out,
std::unordered_map< rvsdg::Output *, ViewColors > &  outputColor,
std::unordered_map< rvsdg::Input *, ViewColors > &  inputColor,
std::unordered_map< rvsdg::Output *, ViewColors > &  tailLabel 
)

Definition at line 438 of file view.cpp.

Variable Documentation

◆ alloca_cnt

size_t jlm::hls::alloca_cnt = 0

Definition at line 189 of file rvsdg2rhls.cpp.

◆ DefaultBufferCapacity

const int jlm::hls::DefaultBufferCapacity = 10

Definition at line 17 of file stream-conv.cpp.

◆ MaximumBufferSize

const size_t jlm::hls::MaximumBufferSize = 512

Definition at line 659 of file add-buffers.cpp.

◆ MEMORY_RESPONSE_LATENCY

constexpr int jlm::hls::MEMORY_RESPONSE_LATENCY = 10
staticconstexpr

Definition at line 16 of file verilator-harness-hls.cpp.

◆ MemoryLatency

size_t jlm::hls::MemoryLatency = 10
static

Definition at line 241 of file add-buffers.cpp.

◆ UnlimitedBufferCapacity

const size_t jlm::hls::UnlimitedBufferCapacity = std::numeric_limits<uint32_t>::max()

Definition at line 349 of file add-buffers.cpp.