22PredicateBufferOperation::~PredicateBufferOperation()
noexcept =
default;
24LoopConstantBufferOperation::~LoopConstantBufferOperation()
noexcept =
default;
52LocalMemoryRequestOperation::~LocalMemoryRequestOperation()
noexcept =
default;
54LocalMemoryResponseOperation::~LocalMemoryResponseOperation()
noexcept =
default;
72std::shared_ptr<const TriggerType>
76 return std::shared_ptr<const TriggerType>(std::shared_ptr<void>(), &
instance);
103 return Create(region, *input,
Type());
139 addInput(std::make_unique<rvsdg::StructuralInput>(
this, origin, origin->
Type()),
true);
161 const auto output =
addOutput(std::make_unique<rvsdg::StructuralOutput>(
this, origin->
Type()));
174 addInput(std::make_unique<rvsdg::StructuralInput>(
this, origin, origin->
Type()),
true);
185 addInput(std::make_unique<rvsdg::StructuralInput>(
this, origin, origin->
Type()),
true);
192 const auto output =
addOutput(std::make_unique<rvsdg::StructuralOutput>(
this, origin->
Type()));
220std::variant<LoopNode::EntryVar, LoopNode::BackEdgeVar>
228 else if (
auto entry =
dynamic_cast<const EntryArgument *
>(&argument))
234 throw std::logic_error(
"LoopNode argument is neither entry nor backedge");
238std::variant<LoopNode::ExitVar, LoopNode::BackEdgeVar>
246 else if (
auto exit =
dynamic_cast<const ExitResult *
>(&result))
252 throw std::logic_error(
"LoopNode result is neither exit nor backedge");
256std::vector<LoopNode::EntryVar>
267std::vector<LoopNode::ExitVar>
278std::vector<LoopNode::BackEdgeVar>
285 if (
auto backedge = std::get_if<BackEdgeVar>(&
var))
351 auto inp = loop->addInput(
361 auto out = loop->addOutput(std::make_unique<rvsdg::StructuralOutput>(loop,
output(
i)->
Type()));
371 auto na = loop->add_backedge(arg->Type());
391 auto res =
outp->results.begin().ptr();
392 auto origin = &
smap.lookup(*
res->origin());
428 if (node && node->IsDead())
432std::shared_ptr<const BundleType>
435 std::vector<std::pair<std::string, std::shared_ptr<const jlm::rvsdg::Type>>>
elements;
444 return std::make_shared<BundleType>(std::move(
elements));
447std::shared_ptr<const BundleType>
450 std::vector<std::pair<std::string, std::shared_ptr<const jlm::rvsdg::Type>>>
elements;
453 return std::make_shared<BundleType>(std::move(
elements));
465 return JlmSize(&
at->element_type()) *
at->nelements();
499 throw std::logic_error(
"Size of '" + type->
debug_string() +
"' is not implemented!");
504 throw std::logic_error(
"Size of '" + type->
debug_string() +
"' is not implemented!");
util::HashSet< rvsdg::Output * > arguments
BackEdgeResult * result()
static BackEdgeArgument & create(rvsdg::Region *region, std::shared_ptr< const jlm::rvsdg::Type > type)
BackEdgeArgument & Copy(rvsdg::Region ®ion, rvsdg::StructuralInput *input) const override
BackEdgeResult & Copy(rvsdg::Output &origin, rvsdg::StructuralOutput *output) const override
static BackEdgeResult & create(jlm::rvsdg::Output *origin)
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &predicate, jlm::rvsdg::Output &value, bool loop=false)
~BranchOperation() noexcept override
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &value, size_t capacity, bool pass_through=false)
rvsdg::TypeKind Kind() const noexcept override
Return the kind of this type.
const std::vector< std::pair< std::string, std::shared_ptr< const jlm::rvsdg::Type > > > elements_
std::size_t ComputeHash() const noexcept override
~EntryArgument() noexcept override
static EntryArgument & Create(rvsdg::Region ®ion, rvsdg::StructuralInput &input, const std::shared_ptr< const rvsdg::Type > type)
ExitResult & Copy(rvsdg::Output &origin, rvsdg::StructuralOutput *output) const override
static ExitResult & Create(rvsdg::Output &origin, rvsdg::StructuralOutput &output)
~ExitResult() noexcept override
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &predicate, jlm::rvsdg::Output &value)
LoopNode * copy(rvsdg::Region *region, rvsdg::SubstitutionMap &smap) const override
Copy a node with substitutions.
static LoopNode * create(rvsdg::Region *parent)
void removeEntryVars(std::vector< EntryVar > vars)
rvsdg::Output * addRequestOutput(rvsdg::Output *origin)
std::variant< ExitVar, BackEdgeVar > mapResult(const rvsdg::Input &result)
std::vector< BackEdgeVar > getBackEdgeVars()
rvsdg::RegionResult * predicate() const noexcept
rvsdg::Output * PredicateBuffer_
rvsdg::Output & GetPredicateBuffer() const noexcept
rvsdg::StructuralOutput * AddLoopVar(rvsdg::Output *origin, rvsdg::Output **buffer=nullptr)
std::variant< EntryVar, BackEdgeVar > mapArgument(const rvsdg::Output &argument)
void removeExitVars(std::vector< ExitVar > vars)
const rvsdg::Operation & GetOperation() const noexcept override
void set_predicate(jlm::rvsdg::Output *p)
void removeBackEdgeVars(std::vector< BackEdgeVar > vars)
rvsdg::Region * subregion() const noexcept
rvsdg::Output * addLoopConstant(rvsdg::Output *origin)
rvsdg::Output * addResponseInput(rvsdg::Output *origin)
ExitVar mapOutput(const rvsdg::Output &output)
BackEdgeArgument * add_backedge(std::shared_ptr< const jlm::rvsdg::Type > type)
EntryVar mapInput(const rvsdg::Input &input)
std::vector< ExitVar > getExitVars()
std::vector< EntryVar > getEntryVars()
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &predicate, const std::vector< jlm::rvsdg::Output * > &alternatives, bool discarding, bool loop=false)
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &predicate)
rvsdg::TypeKind Kind() const noexcept override
Return the kind of this type.
static std::shared_ptr< const TriggerType > Create()
static std::shared_ptr< const PointerType > Create()
static std::shared_ptr< const BitType > Create(std::size_t nbits)
Creates bit type of specified width.
static Output & createFalse(Region ®ion)
static std::shared_ptr< const ControlType > Create(std::size_t nalternatives)
Instantiates control type.
OutputIteratorRange Outputs() noexcept
size_t RemoveInputs(const util::HashSet< size_t > &indices)
rvsdg::Region * region() const noexcept
InputIteratorRange Inputs() noexcept
size_t ninputs() const noexcept
size_t noutputs() const noexcept
size_t RemoveOutputs(const util::HashSet< size_t > &indices)
rvsdg::Region * region() const noexcept
void divert_users(jlm::rvsdg::Output *new_origin)
const std::shared_ptr< const rvsdg::Type > & Type() const noexcept
Represents the argument of a region.
StructuralInput * input() const noexcept
Represents the result of a region.
StructuralOutput * output() const noexcept
Represent acyclic RVSDG subgraphs.
size_t RemoveResults(const util::HashSet< size_t > &indices)
RegionArgument * argument(size_t index) const noexcept
RegionArgumentRange Arguments() noexcept
void copy(Region *target, SubstitutionMap &smap) const
Copy a region with substitutions.
size_t RemoveArguments(const util::HashSet< size_t > &indices)
size_t narguments() const noexcept
StructuralInput * addInput(std::unique_ptr< StructuralInput > input, bool notifyRegion)
StructuralOutput * addOutput(std::unique_ptr< StructuralOutput > input)
StructuralOutput * output(size_t index) const noexcept
StructuralInput * input(size_t index) const noexcept
StructuralNode * node() const noexcept
virtual std::string debug_string() const =0
virtual TypeKind Kind() const noexcept=0
Return the kind of this type.
bool insert(ItemType item)
Iterator begin() noexcept
std::shared_ptr< const BundleType > get_mem_res_type(std::shared_ptr< const jlm::rvsdg::Type > dataType)
std::shared_ptr< const BundleType > get_mem_req_type(std::shared_ptr< const rvsdg::Type > elementType, bool write)
int JlmSize(const jlm::rvsdg::Type *type)
size_t GetPointerSizeInBits()
static void remove(Node *node)
static std::vector< jlm::rvsdg::Output * > outputs(const Node *node)
TypeKind
The kinds of types supported in rvsdg.
@ State
Designate a state type.
@ Value
Designate a value type.
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
void combineHashesWithSeed(std::size_t &seed, std::size_t hash, Args... args)
Variable passed between hls loop iterations.
Variable entering the hls loop.
rvsdg::Input * input
Variable at loop entry.
Variable exiting the hls loop.