4#include <nlohmann/json.hpp>
9#include "symengine/subs.h"
74 bool not_sparse_ =
false;
96 size_ = SymEngine::subs(size_, replacements);
141 bool not_sparse_ =
false;
145 : layout_(std::move(
layout)), not_sparse_(not_sparse) {
161 layout_.replace_symbols(old_expression, new_expression);
164 layout_.replace_symbols(replacements);
221 std::optional<math::tensor::TensorLayout> layout = std::nullopt,
222 bool every_element_read =
false
228 std::optional<math::tensor::TensorLayout> layout = std::nullopt
409 static std::vector<PointerAccessType>
deserialize_list(nlohmann::json::const_reference list);
410 static std::vector<PointerAccessType>
421 static nlohmann::json
serialize(
const std::vector<PointerAccessType>& vector);
bool empty() const override
There are no elements in this pattern = no accesses of this type.
Definition pointer_metadata.h:84
bool every_element_accessed() const override
Every element that is part of this pattern is actually accessed.
Definition pointer_metadata.h:88
MemoryAccessPatternType clone() const override
void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
Definition pointer_metadata.h:92
ConvexAccessPattern(symbolic::Expression size, bool not_sparse=false)
Definition pointer_metadata.h:77
symbolic::Expression size() const
Definition pointer_metadata.h:80
void replace(const symbolic::ExpressionMapping &replacements) override
Definition pointer_metadata.h:95
void serialize_to_json(nlohmann::json &entry) override
static MemoryAccessPatternType create(symbolic::Expression size, bool not_sparse=false)
Definition pointer_metadata.h:35
virtual void serialize_to_json(nlohmann::json &entry)=0
virtual ~MemoryAccessPattern()=default
virtual MemoryAccessPatternType clone() const =0
virtual void replace(const symbolic::ExpressionMapping &replacements)=0
virtual bool empty() const =0
There are no elements in this pattern = no accesses of this type.
virtual void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression)=0
MemoryAccessPatternType ref() const
virtual const math::tensor::TensorLayout * layout() const
The structured affine layout (shape/strides/offset, in elements) backing this pattern,...
Definition pointer_metadata.h:57
virtual bool every_element_accessed() const =0
Every element that is part of this pattern is actually accessed.
bool every_element_accessed() const override
Every element that is part of this pattern is actually accessed.
Definition pointer_metadata.h:116
bool empty() const override
There are no elements in this pattern = no accesses of this type.
Definition pointer_metadata.h:112
MemoryAccessPatternType clone() const override
void serialize_to_json(nlohmann::json &entry) override
static MemoryAccessPatternType instance()
void replace(const symbolic::ExpressionMapping &replacements) override
Definition pointer_metadata.h:122
void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
Definition pointer_metadata.h:120
PointerFullWriteOnly(MemoryAccessPatternType write_pattern, bool no_capture=false)
void replace(const symbolic::ExpressionMapping &replacements) override
MemoryAccessPatternType access_read_pattern() const override
Describes which elements are accessed (for example a function may only access the range of [ptr,...
bool may_contain_writes() const override
The pointe may be used to write to the backing data.
Definition pointer_metadata.h:308
void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
void serialize_to_json(nlohmann::json &entry) override
PointerAccessType clone() const override
bool invalidated_after() const override
Definition pointer_metadata.h:312
MemoryAccessPatternType access_write_pattern() const override
Describes which elements are overwritten.
bool may_contain_reads() const override
The pointer may be used to read from the backing data.
Definition pointer_metadata.h:305
bool no_capture() const override
Despite this being a leak of the pointer, the user will only use it for blocking accesses to the unde...
Definition pointer_metadata.h:301
MemoryAccessPatternType access_read_pattern() const override
Allows limiting the undefined behavior (assume required input as well as dirtying) to a specific patt...
PointerAccessType clone() const override
bool no_capture() const override
Despite this being a leak of the pointer, the user will only use it for blocking accesses to the unde...
Definition pointer_metadata.h:345
PointerGenericAccess(MemoryAccessPatternType read_pattern, MemoryAccessPatternType write_pattern, bool no_capture)
void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
bool may_contain_writes() const override
The pointe may be used to write to the backing data.
void replace(const symbolic::ExpressionMapping &replacements) override
void serialize_to_json(nlohmann::json &entry) override
MemoryAccessPatternType access_write_pattern() const override
bool may_contain_reads() const override
The pointer may be used to read from the backing data.
bool invalidated_after() const override
Definition pointer_metadata.h:353
Meaning the underlying memory will be deallocated and use of the pointer after this is no longer vali...
Definition pointer_metadata.h:371
bool invalidated_after() const override
Definition pointer_metadata.h:384
bool may_contain_reads() const override
The pointer may be used to read from the backing data.
Definition pointer_metadata.h:377
PointerAccessType clone() const override
bool may_contain_writes() const override
The pointe may be used to write to the backing data.
Definition pointer_metadata.h:380
void serialize_to_json(nlohmann::json &entry) override
MemoryAccessPatternType access_write_pattern() const override
Definition pointer_metadata.h:391
void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
Definition pointer_metadata.h:395
void replace(const symbolic::ExpressionMapping &replacements) override
Definition pointer_metadata.h:397
MemoryAccessPatternType access_read_pattern() const override
Describes which elements are accessed (for example a function may only access the range of [ptr,...
Definition pointer_metadata.h:388
bool no_capture() const override
Despite this being a leak of the pointer, the user will only use it for blocking accesses to the unde...
Definition pointer_metadata.h:373
bool may_contain_writes() const override
The pointe may be used to write to the backing data.
Definition pointer_metadata.h:259
MemoryAccessPatternType access_write_pattern() const override
void serialize_to_json(nlohmann::json &entry) override
PointerReadOnly(MemoryAccessPatternType read_pattern, bool no_capture=false)
MemoryAccessPatternType access_read_pattern() const override
Describes which elements behind the pointer are actually read.
bool no_capture() const override
Despite this being a leak of the pointer, the user will only use it for blocking accesses to the unde...
Definition pointer_metadata.h:252
bool invalidated_after() const override
Definition pointer_metadata.h:263
PointerAccessType clone() const override
void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
bool may_contain_reads() const override
The pointer may be used to read from the backing data.
Definition pointer_metadata.h:256
void replace(const symbolic::ExpressionMapping &replacements) override
bool empty() const override
There are no elements in this pattern = no accesses of this type.
Definition pointer_metadata.h:148
MemoryAccessPatternType clone() const override
bool every_element_accessed() const override
Every element that is part of this pattern is actually accessed.
Definition pointer_metadata.h:152
void replace(const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
Definition pointer_metadata.h:160
const math::tensor::TensorLayout * layout() const override
The structured affine layout (shape/strides/offset, in elements) backing this pattern,...
Definition pointer_metadata.h:156
void serialize_to_json(nlohmann::json &entry) override
void replace(const symbolic::ExpressionMapping &replacements) override
Definition pointer_metadata.h:163
static MemoryAccessPatternType create(math::tensor::TensorLayout layout, bool not_sparse=false)
TensorLayoutPattern(math::tensor::TensorLayout layout, bool not_sparse=false)
Definition pointer_metadata.h:144
The metadata associated with a addressing a tensor in elements Meant to be used with TensorNodes to d...
Definition tensor_layout.h:20
Integer zero()
Creates the integer constant 0.
bool null_safe_eq(const Expression lhs, const Expression rhs)
Tests equality of expressions with null-safety.
Expression subs(const Expression expr, const Expression old_expr, const Expression new_expr)
Substitutes a sub-expression with another expression.
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
SymEngine::map_basic_basic ExpressionMapping
Definition symbolic.h:109
Definition access_node.h:67
PtrMetaDeleter< PointerAccessMeta > PtrAccessDeleter
Definition pointer_metadata.h:30
PtrMetaDeleter< MemoryAccessPattern > AccessPatternsDeleter
Definition pointer_metadata.h:31
std::unique_ptr< MemoryAccessPattern, AccessPatternsDeleter > MemoryAccessPatternType
Definition pointer_metadata.h:33
std::unique_ptr< PointerAccessMeta, PtrAccessDeleter > PointerAccessType
Definition pointer_metadata.h:32
Symbolic system for integer-based symbol analysis.