docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
c_language_extension.h
Go to the documentation of this file.
1#pragma once
2
3#include <symengine/printers/codegen.h>
4
7#include "sdfg/types/type.h"
8
9namespace sdfg {
10namespace codegen {
11
13public:
14 CLanguageExtension(sdfg::Function& function, const std::string& external_prefix = "")
16 }
17
18 const std::string language() const override {
19 return "C";
20 }
21
22 std::string primitive_type(const types::PrimitiveType prim_type) override;
23
24 std::string declaration(
25 const std::string& name, const types::IType& type, bool use_initializer = false, bool use_alignment = false
26 ) override;
27
28 std::string type_cast(const std::string& name, const types::IType& type) override;
29
30 std::string subset(const types::IType& type, const data_flow::Subset& subset) override;
31
32 std::string expression(const symbolic::Expression expr) override;
33
34 std::string access_node(const data_flow::AccessNode& node) override;
35
36 std::string tasklet(const data_flow::Tasklet& tasklet) override;
37
38 std::string zero(const types::PrimitiveType prim_type) override;
39
40 std::string null_literal() override;
41
42 std::string reinterpret_cast_expr(const std::string& expr, const std::string& type) override;
43};
44
45class CSymbolicPrinter : public SymEngine::BaseVisitor<CSymbolicPrinter, SymEngine::CodePrinter> {
46private:
47 sdfg::Function& function_;
48 std::string external_prefix_;
49 bool use_rtl_functions_;
50
51public:
52 using SymEngine::CodePrinter::apply;
53 using SymEngine::CodePrinter::bvisit;
54 using SymEngine::CodePrinter::str_;
55
56 // Special values
57 void bvisit(const SymEngine::Infty& x);
58 void bvisit(const SymEngine::BooleanAtom& x);
59 void bvisit(const SymEngine::Symbol& x);
60
61 // Logical expressions
62 void bvisit(const SymEngine::And& x);
63 void bvisit(const SymEngine::Or& x);
64 void bvisit(const SymEngine::Not& x);
65 void bvisit(const SymEngine::Equality& x);
66 void bvisit(const SymEngine::Unequality& x);
67
68 // Functions
69 void bvisit(const SymEngine::Min& x);
70 void bvisit(const SymEngine::Max& x);
71 void bvisit(const SymEngine::FunctionSymbol& x);
72
74 std::ostringstream& o,
75 const SymEngine::RCP<const SymEngine::Basic>& a,
76 const SymEngine::RCP<const SymEngine::Basic>& b
77 ) override;
78
79 CSymbolicPrinter(sdfg::Function& function, const std::string& external_prefix = "", bool use_rtl_functions = true)
80 : function_(function), external_prefix_(external_prefix), use_rtl_functions_(use_rtl_functions) {
81 }
82};
83
84} // namespace codegen
85} // namespace sdfg
Definition function.h:43
std::string type_cast(const std::string &name, const types::IType &type) override
std::string expression(const symbolic::Expression expr) override
std::string declaration(const std::string &name, const types::IType &type, bool use_initializer=false, bool use_alignment=false) override
std::string subset(const types::IType &type, const data_flow::Subset &subset) override
CLanguageExtension(sdfg::Function &function, const std::string &external_prefix="")
Definition c_language_extension.h:14
std::string primitive_type(const types::PrimitiveType prim_type) override
std::string null_literal() override
std::string reinterpret_cast_expr(const std::string &expr, const std::string &type) override
std::string access_node(const data_flow::AccessNode &node) override
const std::string language() const override
Definition c_language_extension.h:18
std::string zero(const types::PrimitiveType prim_type) override
std::string tasklet(const data_flow::Tasklet &tasklet) override
Statement and control-flow syntax shared by the C family (C, C++, CUDA, HIP).
Definition c_style_language_extension.h:9
void bvisit(const SymEngine::And &x)
void bvisit(const SymEngine::Not &x)
void bvisit(const SymEngine::FunctionSymbol &x)
void bvisit(const SymEngine::Unequality &x)
void bvisit(const SymEngine::BooleanAtom &x)
void bvisit(const SymEngine::Infty &x)
void bvisit(const SymEngine::Equality &x)
void bvisit(const SymEngine::Symbol &x)
CSymbolicPrinter(sdfg::Function &function, const std::string &external_prefix="", bool use_rtl_functions=true)
Definition c_language_extension.h:79
void bvisit(const SymEngine::Or &x)
void _print_pow(std::ostringstream &o, const SymEngine::RCP< const SymEngine::Basic > &a, const SymEngine::RCP< const SymEngine::Basic > &b) override
void bvisit(const SymEngine::Min &x)
void bvisit(const SymEngine::Max &x)
const std::string & external_prefix() const
Definition language_extension.h:51
Node representing access to a data container in the dataflow graph.
Definition access_node.h:84
Simple computational operation in the dataflow graph.
Definition tasklet.h:348
Abstract base interface for all types in the sdfglib type system.
Definition type.h:625
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
Definition argument_registry.h:10
symbolic::MultiExpression Subset
Type alias for a subset specification (array of symbolic expressions).
Definition memlet.h:103
PrimitiveType
Enumeration of all primitive data types supported by sdfglib.
Definition type.h:35
Definition analysis.h:7
Symbolic system for integer-based symbol analysis.
Core type system definitions for sdfglib.