docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
function.h
Go to the documentation of this file.
1#pragma once
2
3#include <cassert>
4#include <fstream>
5#include <functional>
6#include <list>
7#include <memory>
8#include <nlohmann/json.hpp>
9#include <ranges>
10#include <string>
11#include <unordered_map>
12#include <unordered_set>
13#include <vector>
14
15#include "sdfg/element.h"
16#include "sdfg/exceptions.h"
20#include "sdfg/types/array.h"
21#include "sdfg/types/function.h"
22#include "sdfg/types/pointer.h"
23#include "sdfg/types/scalar.h"
25#include "sdfg/types/tensor.h"
26#include "sdfg/types/type.h"
27
28using json = nlohmann::json;
29
30namespace sdfg {
31
32namespace builder {
33class FunctionBuilder;
35} // namespace builder
36
40
42
43class Function {
46
47 types::Pointer opaque_pointer_;
48
49protected:
54
55 // Name
56 std::string name_;
58 std::unique_ptr<types::IType> return_type_;
59
60 // Data definition
61 std::unordered_map<std::string, std::unique_ptr<types::IType>> containers_;
62 std::unordered_map<std::string, std::unique_ptr<types::StructureDefinition>> structures_;
63
64 // External data
65 std::vector<std::string> arguments_;
66 std::vector<std::string> externals_;
67 std::unordered_map<std::string, LinkageType> externals_linkage_types_;
68
69 // Symbolic assumptions
71
72 // Metadata
73 std::unordered_map<std::string, std::string> metadata_;
74
75 Function(const std::string& name, FunctionType type);
76 Function(const std::string& name, FunctionType type, const types::IType& return_type);
77
78public:
79 Function(const Function& function) = delete;
80
81 virtual ~Function() = default;
82
83 // Static types for reserved symbols
84 static const std::unique_ptr<types::Scalar> NVPTX_SYMBOL_TYPE;
85 static const std::unique_ptr<types::Pointer> CONST_POINTER_TYPE;
86
87 /***** Section: Definition *****/
88
89 const std::string& name() const;
90
91 void name(const std::string& name);
92
94
95 const types::IType& return_type() const;
96
100 size_t element_counter() const;
101
107 virtual void validate() const;
108
109 bool exists(const std::string& name) const;
110
111 auto containers() const {
112 return std::views::keys(this->containers_);
113 };
114
115 const types::IType& type(const std::string& name) const;
116
117 auto structures() const {
118 return std::views::keys(this->structures_);
119 };
120
121 const types::StructureDefinition& structure(const std::string& name) const;
122
123 const std::vector<std::string>& arguments() const;
124
125 const std::vector<std::string>& externals() const;
126
127 bool is_argument(const std::string& name) const;
128
129 bool is_external(const std::string& name) const;
130
131 bool is_transient(const std::string& name) const;
132
133 LinkageType linkage_type(const std::string& name) const;
134
136
137 bool has_assumption(const symbolic::Symbol symbol) const;
138
140
142
144
145 void add_metadata(const std::string& key, const std::string& value);
146
147 void remove_metadata(const std::string& key);
148
149 const std::string& metadata(const std::string& key) const;
150 const std::string* metadata_if_exists(const std::string& key) const;
151
152 const std::unordered_map<std::string, std::string>& metadata() const;
153};
154} // namespace sdfg
Array type representation for c-style arrays.
Symbol assumptions for reasoning about bounds, constness, and evolution.
symbolic::SymbolSet parameters() const
bool is_argument(const std::string &name) const
auto containers() const
Definition function.h:111
virtual void validate() const
Validates the function.
size_t element_counter_
Last used element id.
Definition function.h:53
void remove_metadata(const std::string &key)
const symbolic::Assumption & assumption(const symbolic::Symbol symbol) const
const std::string * metadata_if_exists(const std::string &key) const
const std::vector< std::string > & arguments() const
std::string name_
Definition function.h:56
bool is_transient(const std::string &name) const
const symbolic::Assumptions & assumptions() const
symbolic::Assumptions assumptions_
Definition function.h:70
void name(const std::string &name)
LinkageType linkage_type(const std::string &name) const
const std::unordered_map< std::string, std::string > & metadata() const
size_t element_counter() const
The last used element ID.
Function(const Function &function)=delete
std::unordered_map< std::string, std::unique_ptr< types::IType > > containers_
Definition function.h:61
virtual ~Function()=default
FunctionType type_
Definition function.h:57
std::vector< std::string > externals_
Definition function.h:66
symbolic::Assumption & assumption(const symbolic::Symbol symbol)
const std::string & metadata(const std::string &key) const
const types::IType & type(const std::string &name) const
Function(const std::string &name, FunctionType type, const types::IType &return_type)
static const std::unique_ptr< types::Scalar > NVPTX_SYMBOL_TYPE
Definition function.h:84
std::unordered_map< std::string, std::unique_ptr< types::StructureDefinition > > structures_
Definition function.h:62
const types::IType & return_type() const
const types::StructureDefinition & structure(const std::string &name) const
bool is_external(const std::string &name) const
std::unordered_map< std::string, std::string > metadata_
Definition function.h:73
std::unordered_map< std::string, LinkageType > externals_linkage_types_
Definition function.h:67
static const std::unique_ptr< types::Pointer > CONST_POINTER_TYPE
Definition function.h:85
void add_metadata(const std::string &key, const std::string &value)
std::unique_ptr< types::IType > return_type_
Definition function.h:58
FunctionType type() const
std::vector< std::string > arguments_
Definition function.h:65
Function(const std::string &name, FunctionType type)
bool exists(const std::string &name) const
const std::vector< std::string > & externals() const
const std::string & name() const
bool has_assumption(const symbolic::Symbol symbol) const
auto structures() const
Definition function.h:117
Definition exceptions.h:28
Definition function_builder.h:12
Note: Even though the class references unique_ptr, it will never delete an SDFG it has a reference to...
Definition structured_sdfg_builder.h:44
Represents assumptions about a symbol's properties and behavior.
Definition assumptions.h:61
Map from symbols to their assumptions.
Definition assumptions.h:313
Abstract base interface for all types in the sdfglib type system.
Definition type.h:625
Represents a pointer type.
Definition pointer.h:32
Defines the layout and members of a structure type.
Definition structure.h:120
SymEngine::RCP< const SymEngine::Symbol > Symbol
Reference-counted pointer to a SymEngine Symbol.
Definition symbolic.h:71
std::set< Symbol, SymEngine::RCPBasicKeyLess > SymbolSet
Ordered set of symbols.
Definition symbolic.h:95
nlohmann::json json
Definition interstate_edge.h:14
Definition function_builder.h:10
Definition analysis.h:7
LinkageType
Definition function.h:41
@ LinkageType_External
Definition function.h:41
@ LinkageType_Internal
Definition function.h:41
FunctionType FunctionType_CPU
Definition function.h:38
FunctionType FunctionType_NV_GLOBAL
Definition function.h:39
StringEnum FunctionType
Definition function.h:37
Pointer type representation.
Scalar (primitive) type representation.
Structure and record type representations.
Symbolic system for integer-based symbol analysis.
Core type system definitions for sdfglib.
Function type representation.