Jlm
Loading...
Searching...
No Matches
Classes | Typedefs | Enumerations | Functions | Variables
jlm::hls Namespace Reference

Classes

class  AddressQueueInsertion
 
class  AddressQueueOperation
 
class  AllocaNodeConversion
 
class  BackEdgeArgument
 
class  BackEdgeResult
 
class  BaseHLS
 
class  BranchOperation
 
class  BufferInsertion
 
class  BufferOperation
 
class  BundleType
 
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  ConstantDistribution
 
class  Context
 
class  DecoupledLoadOperation
 
class  DotHLS
 
class  DumpDotTransformation
 
class  EntryArgument
 
class  ExitResult
 
class  FirrtlToVerilogConverter
 
class  ForkInsertion
 
class  ForkOperation
 
class  GammaMerge
 
class  GammaNodeConversion
 
class  HlsDotWriter
 
class  IOBarrierRemoval
 Removes all IOBarrier nodes from the RVSDG. More...
 
class  IOStateElimination
 
class  JsonHLS
 
class  LoadOperation
 
class  LocalLoadOperation
 
class  LocalMemoryOperation
 
class  LocalMemoryRequestOperation
 
class  LocalMemoryResponseOperation
 
class  LocalStoreOperation
 
class  LoopConstantBufferOperation
 
class  LoopNode
 
class  LoopOperation
 
class  MemoryConverter
 
class  MemoryRequestOperation
 
class  MemoryResponseOperation
 
class  MemoryStateDecoupling
 
class  MemoryStateSeparation
 
class  MemoryStateSplitConversion
 
class  MuxOperation
 
class  PredicateBufferOperation
 
class  PrintOperation
 
class  RedundantBufferElimination
 
class  RhlsDeadNodeElimination
 
class  RhlsToFirrtlConverter
 
class  RhlsVerification
 
class  SinkInsertion
 
class  SinkOperation
 
class  StateGateOperation
 
class  StoreOperation
 
class  StreamConversion
 
class  TestableRhlsToFirrtlConverter
 
class  ThetaNodeConversion
 
class  TraceAllocaUses
 
struct  TracedPointerNodes
 
class  TriggerOperation
 
class  TriggerType
 
class  UnusedStateRemoval
 
class  VerilatorHarnessAxi
 
class  VerilatorHarnessHLS
 
class  VisitorSet
 

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::Input * FindUserNode (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 (LoopNode *loop, std::unordered_map< rvsdg::Output *, size_t > &output_cycles, std::unordered_set< rvsdg::Input * > &frontier, std::unordered_set< rvsdg::Input * > &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< rvsdg::Input * > &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::Output * gep_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 RemoveUnusedBackEdges (LoopNode &loopNode)
 
static bool EliminateDeadNodesInRegion (rvsdg::Region &region)
 
void EliminateDeadNodes (llvm::LlvmRvsdgModule &rvsdgModule)
 
static rvsdg::Output * follow_state_edge (rvsdg::Input *state_edge, std::vector< rvsdg::SimpleNode * > &mem_ops, bool modify)
 
static rvsdg::Output * trace_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)
 
static void TestGammaConversion (RvsdgModule &rvsdgModule, size_t expectedMuxCount)
 
 TEST (GammaConversionTests, WithMatchOperation)
 
 TEST (GammaConversionTests, WithoutMatchOperation)
 
 TEST (GammaConversionTests, NestedGammas)
 
 TEST (GammaConversionTests, MuxPredicateMapping)
 
 TEST (GammaConversionTests, MuxAlternativeSelection)
 
 TEST (GammaConversionTests, MuxControlPredicateMapping)
 
 TEST (GammaConversionTests, SpeculativeConversionUsesDiscardingMux)
 
 TEST (GammaConversionTests, NonSpeculativeModeUsesBranches)
 
std::vector< rvsdg::LambdaNode::ContextVar > find_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::IntegerConstantOperation * trace_constant (const rvsdg::Output *dst)
 
rvsdg::Output * route_to_region_rhls (rvsdg::Region *target, rvsdg::Output *out)
 
rvsdg::Output * route_response_rhls (rvsdg::Region *target, rvsdg::Output *response)
 
rvsdg::Output * route_request_rhls (rvsdg::Region *target, rvsdg::Output *request)
 
std::deque< rvsdg::Region * > get_parent_regions (rvsdg::Region *region)
 
const rvsdg::Output * trace_call_rhls (const rvsdg::Output *output)
 
const rvsdg::Output * trace_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::Input * get_mem_state_user (rvsdg::Output *state_edge)
 
rvsdg::Output * FindSourceNode (rvsdg::Output *out)
 
rvsdg::LambdaNode * change_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::SimpleNode * find_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::SimpleNode * ReplaceDecouple (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< TracedPointerNodes > TracePointerArguments (const rvsdg::LambdaNode *lambda)
 
rvsdg::LambdaNode * find_containing_lambda (rvsdg::Region *region)
 
static size_t CalculatePortWidth (const TracedPointerNodes &tracedPointerNodes)
 
static rvsdg::SimpleNode * ReplaceLoad (rvsdg::SubstitutionMap &smap, const rvsdg::Node *originalLoad, rvsdg::Output *response)
 
static rvsdg::SimpleNode * ReplaceStore (rvsdg::SubstitutionMap &smap, const rvsdg::Node *originalStore, rvsdg::Output *response)
 
static rvsdg::Output * 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 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::StructuralOutput * find_loop_output (jlm::rvsdg::StructuralInput *sti)
 
static rvsdg::Output * 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)
 
jlm::rvsdg::Output * process_loops (jlm::rvsdg::Output *state_edge)
 
static void mem_queue (rvsdg::RvsdgModule &rvsdgModule)
 
static rvsdg::RegionResult * 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)
 
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_loop_passthrough (LoopNode *ln)
 
static bool remove_unused_loop_outputs (LoopNode *ln)
 
static bool remove_unused_loop_inputs (LoopNode *ln)
 
static bool remove_unused_loop_backedges (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)
 
bool function_match (rvsdg::LambdaNode *ln, const std::string &function_name)
 
const jlm::rvsdg::Output * trace_call (jlm::rvsdg::Input *input)
 
void inline_calls (rvsdg::Region *region)
 
rvsdg::DeltaNode * rename_delta (rvsdg::DeltaNode *odn)
 
rvsdg::LambdaNode * change_linkage (rvsdg::LambdaNode *ln, llvm::Linkage link)
 
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > split_hls_function (llvm::LlvmRvsdgModule &rm, const std::string &function_name)
 
void rvsdg2ref (llvm::LlvmRvsdgModule &rhls, const util::FilePath &path)
 
std::unique_ptr< rvsdg::TransformationSequence > createTransformationSequence (rvsdg::DotWriter &dotWriter, const bool dumpRvsdgGraphs)
 
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::ExitVar > TryGetSingleUserExitVar (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 BundleType > get_mem_req_type (std::shared_ptr< const rvsdg::Type > elementType, bool write)
 
std::shared_ptr< const BundleType > get_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
 
const int DefaultBufferCapacity = 10
 

Typedef Documentation

◆ 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 48 of file add-prints.cpp.

◆ add_prints() [2/2]

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

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

◆ AddBuffers()

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

Definition at line 216 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 773 of file add-buffers.cpp.

◆ alloca_conv()

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

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

◆ ArgumentToDot()

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

Definition at line 141 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 651 of file add-buffers.cpp.

◆ CalculateLoopDepths()

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

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

◆ CalculatePortWidth()

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

Definition at line 425 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 23 of file instrument-ref.cpp.

◆ change_linkage()

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

Definition at line 228 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 3494 of file RhlsToFirrtlConverter.cpp.

◆ check_oValids()

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

Definition at line 3547 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 533 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_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 56 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 73 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 652 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 ( LoopNode *  loop,
std::unordered_map< rvsdg::Output *, size_t > &  output_cycles,
std::unordered_set< rvsdg::Input * > &  frontier,
std::unordered_set< rvsdg::Input * > &  stream_backedges,
std::unordered_set< rvsdg::SimpleNode * > &  top_muxes 
)
static

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

◆ createTransformationSequence()

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

Definition at line 374 of file rvsdg2rhls.cpp.

◆ dead_loop()

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

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

◆ dead_loop_lcb()

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

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

◆ dead_nonspec_gamma()

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

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

◆ dead_spec_gamma()

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

Definition at line 109 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 507 of file view.cpp.

◆ dump_ref()

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

Definition at line 457 of file rvsdg2rhls.cpp.

◆ DumpDot() [1/4]

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

Definition at line 469 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 475 of file view.cpp.

◆ DumpDot() [3/4]

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

Definition at line 486 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 494 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 173 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 110 of file DeadNodeElimination.cpp.

◆ EliminateDeadNodesInRegion()

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

Definition at line 79 of file DeadNodeElimination.cpp.

◆ find_containing_lambda()

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

Definition at line 415 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 30 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 26 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 30 of file mem-queue.cpp.

◆ find_loop_output()

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

Definition at line 138 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 392 of file hls-function-util.cpp.

◆ FindUserNode()

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

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

◆ fix_mem_merge()

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

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

◆ fix_mem_split()

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

Definition at line 322 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 100 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 228 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 153 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 350 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 433 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 448 of file hls.cpp.

◆ get_mem_state_user()

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

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

◆ get_parent_regions()

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

Definition at line 238 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 80 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 92 of file view.cpp.

◆ GetDotName() [1/3]

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

Definition at line 103 of file view.cpp.

◆ GetDotName() [2/3]

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

Definition at line 54 of file view.cpp.

◆ GetDotName() [3/3]

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

Definition at line 60 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 509 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 46 of file view.cpp.

◆ inline_calls()

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

Definition at line 140 of file rvsdg2rhls.cpp.

◆ instrument_ref() [1/3]

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

Definition at line 70 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 141 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 359 of file hls-function-util.cpp.

◆ is_dec_res()

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

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

◆ is_function_argument()

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

Definition at line 340 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 457 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 273 of file add-buffers.cpp.

◆ mem_queue()

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

Definition at line 532 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 367 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 320 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 107 of file add-buffers.cpp.

◆ OptimizeBuffer()

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

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

◆ OptimizeLoop()

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

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

◆ OptimizeReqMemState()

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

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

◆ OptimizeResMemState()

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

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

◆ PlaceBuffer()

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

Definition at line 67 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 712 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 121 of file view.cpp.

◆ pre_opt()

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

Definition at line 81 of file rvsdg2rhls.cpp.

◆ process_loops()

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

Definition at line 415 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< rvsdg::Input * > &  stream_backedges,
std::unordered_set< rvsdg::SimpleNode * > &  top_muxes 
)
static

Definition at line 479 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 351 of file view.cpp.

◆ remove_loop_passthrough()

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

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

◆ remove_unused_loop_backedges()

static bool jlm::hls::remove_unused_loop_backedges ( LoopNode *  ln)
static

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

◆ remove_unused_loop_inputs()

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

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

◆ remove_unused_loop_outputs()

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

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

◆ RemoveUnusedBackEdges()

static bool jlm::hls::RemoveUnusedBackEdges ( LoopNode &  loopNode)
static

Definition at line 57 of file DeadNodeElimination.cpp.

◆ RemoveUnusedInputs()

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

Definition at line 36 of file DeadNodeElimination.cpp.

◆ RemoveUnusedLoopOutputs()

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

Definition at line 15 of file DeadNodeElimination.cpp.

◆ RemoveUnusedStatesFromGammaNode()

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

Definition at line 147 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 180 of file UnusedStateRemoval.cpp.

◆ RemoveUnusedStatesInRegion()

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

Definition at line 222 of file UnusedStateRemoval.cpp.

◆ RemoveUnusedStatesInStructuralNode()

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

Definition at line 199 of file UnusedStateRemoval.cpp.

◆ rename_delta()

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

Definition at line 185 of file rvsdg2rhls.cpp.

◆ ReplaceDecouple()

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

Definition at line 144 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 454 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 496 of file mem-conv.cpp.

◆ ResultToDot()

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

Definition at line 149 of file view.cpp.

◆ round_up_pow2()

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

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

◆ route_request_rhls()

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

Definition at line 224 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 209 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 171 of file hls-function-util.cpp.

◆ rvsdg2ref()

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

Definition at line 368 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 182 of file mem-queue.cpp.

◆ setMemoryLatency()

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

Definition at line 704 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 273 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 275 of file rvsdg2rhls.cpp.

◆ split_opt()

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

Definition at line 62 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 157 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 220 of file view.cpp.

◆ StructuralOutputToDot()

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

Definition at line 165 of file view.cpp.

◆ SymbolicEdge()

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

Definition at line 199 of file view.cpp.

◆ TEST() [1/8]

jlm::hls::TEST ( GammaConversionTests  ,
MuxAlternativeSelection   
)

Definition at line 164 of file GammaConversionTests.cpp.

◆ TEST() [2/8]

jlm::hls::TEST ( GammaConversionTests  ,
MuxControlPredicateMapping   
)

Definition at line 202 of file GammaConversionTests.cpp.

◆ TEST() [3/8]

jlm::hls::TEST ( GammaConversionTests  ,
MuxPredicateMapping   
)

Definition at line 130 of file GammaConversionTests.cpp.

◆ TEST() [4/8]

jlm::hls::TEST ( GammaConversionTests  ,
NestedGammas   
)

Definition at line 98 of file GammaConversionTests.cpp.

◆ TEST() [5/8]

Definition at line 276 of file GammaConversionTests.cpp.

◆ TEST() [6/8]

Definition at line 239 of file GammaConversionTests.cpp.

◆ TEST() [7/8]

jlm::hls::TEST ( GammaConversionTests  ,
WithMatchOperation   
)

Definition at line 50 of file GammaConversionTests.cpp.

◆ TEST() [8/8]

jlm::hls::TEST ( GammaConversionTests  ,
WithoutMatchOperation   
)

Definition at line 75 of file GammaConversionTests.cpp.

◆ TestGammaConversion()

static void jlm::hls::TestGammaConversion ( RvsdgModule &  rvsdgModule,
size_t  expectedMuxCount 
)
static

Definition at line 27 of file GammaConversionTests.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 434 of file view.cpp.

◆ trace_call()

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

Definition at line 113 of file rvsdg2rhls.cpp.

◆ trace_call_rhls() [1/2]

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

Definition at line 333 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 252 of file hls-function-util.cpp.

◆ trace_constant()

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

Definition at line 143 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 45 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 53 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 274 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 388 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 133 of file UnusedStateRemoval.cpp.

◆ ViewcolorToString()

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

Definition at line 23 of file view.cpp.

◆ ViewDot() [1/2]

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

Definition at line 460 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 448 of file view.cpp.

Variable Documentation

◆ 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 709 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 256 of file add-buffers.cpp.

◆ UnlimitedBufferCapacity

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

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