21PredicateBufferOperation::~PredicateBufferOperation()
noexcept =
default;
23LoopConstantBufferOperation::~LoopConstantBufferOperation()
noexcept =
default;
51LocalMemoryRequestOperation::~LocalMemoryRequestOperation()
noexcept =
default;
53LocalMemoryResponseOperation::~LocalMemoryResponseOperation()
noexcept =
default;
71std::shared_ptr<const TriggerType>
75 return std::shared_ptr<const TriggerType>(std::shared_ptr<void>(), &
instance);
102 return Create(region, *input,
Type());
138 addInput(std::make_unique<rvsdg::StructuralInput>(
this, origin, origin->
Type()),
true);
160 const auto output =
addOutput(std::make_unique<rvsdg::StructuralOutput>(
this, origin->
Type()));
173 addInput(std::make_unique<rvsdg::StructuralInput>(
this, origin, origin->
Type()),
true);
184 addInput(std::make_unique<rvsdg::StructuralInput>(
this, origin, origin->
Type()),
true);
191 const auto output =
addOutput(std::make_unique<rvsdg::StructuralOutput>(
this, origin->
Type()));
235 auto inp = loop->addInput(
245 auto out = loop->addOutput(std::make_unique<rvsdg::StructuralOutput>(loop,
output(
i)->
Type()));
255 auto na = loop->add_backedge(arg->Type());
275 auto res =
outp->results.begin().ptr();
276 auto origin = &
smap.lookup(*
res->origin());
315 if (node && node->IsDead())
319std::shared_ptr<const BundleType>
322 std::vector<std::pair<std::string, std::shared_ptr<const jlm::rvsdg::Type>>>
elements;
331 return std::make_shared<BundleType>(std::move(
elements));
334std::shared_ptr<const BundleType>
337 std::vector<std::pair<std::string, std::shared_ptr<const jlm::rvsdg::Type>>>
elements;
340 return std::make_shared<BundleType>(std::move(
elements));
352 return JlmSize(&
at->element_type()) *
at->nelements();
386 throw std::logic_error(
"Size of '" + type->
debug_string() +
"' is not implemented!");
391 throw std::logic_error(
"Size of '" + type->
debug_string() +
"' is not implemented!");
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.
rvsdg::Output * addRequestOutput(rvsdg::Output *origin)
rvsdg::RegionResult * predicate() const noexcept
void removeLoopOutput(rvsdg::StructuralOutput *output)
static LoopNode * create(rvsdg::Region *parent, bool init=true)
rvsdg::Output * PredicateBuffer_
rvsdg::Output & GetPredicateBuffer() const noexcept
rvsdg::StructuralOutput * AddLoopVar(rvsdg::Output *origin, rvsdg::Output **buffer=nullptr)
const rvsdg::Operation & GetOperation() const noexcept override
void set_predicate(jlm::rvsdg::Output *p)
rvsdg::Region * subregion() const noexcept
rvsdg::Output * addLoopConstant(rvsdg::Output *origin)
rvsdg::Output * addResponseInput(rvsdg::Output *origin)
BackEdgeArgument * add_backedge(std::shared_ptr< const jlm::rvsdg::Type > type)
void removeLoopInput(rvsdg::StructuralInput *input)
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.
size_t RemoveInputs(const util::HashSet< size_t > &indices)
rvsdg::Region * region() const 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
size_t index() const noexcept
void divert_users(jlm::rvsdg::Output *new_origin)
bool IsDead() const noexcept
const std::shared_ptr< const rvsdg::Type > & Type() const noexcept
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
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.
size_type size() const noexcept
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)
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)