MimIR
0.4-dev
MimIR is my Intermediate Representation
Toggle main menu visibility
Loading...
Searching...
No Matches
autogen.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <
mim/axm.h
>
4
#include <
mim/plugin.h
>
5
6
/// @namespace mim::plug::autodiff @ref autodiff
7
namespace
mim
{
8
namespace
plug::autodiff
{
9
10
static
constexpr
plugin_t
Plugin_Id
= 0x9655014a1c70000;
11
12
/// @name %%autodiff.Tangent
13
///@{
14
enum class
Tangent
:
flags_t
{
15
};
16
17
const
Def
*
normalize_Tangent
(
const
Def
*,
const
Def
*,
const
Def
*);
18
///@}
19
20
/// @name %%autodiff.AD
21
///@{
22
enum class
AD
:
flags_t
{
23
};
24
25
const
Def
*
normalize_AD
(
const
Def
*,
const
Def
*,
const
Def
*);
26
///@}
27
28
/// @name %%autodiff.ad
29
///@{
30
enum class
ad
:
flags_t
{
31
};
32
33
const
Def
*
normalize_ad
(
const
Def
*,
const
Def
*,
const
Def
*);
34
///@}
35
36
/// @name %%autodiff.zero
37
///@{
38
enum class
zero
:
flags_t
{
39
};
40
41
const
Def
*
normalize_zero
(
const
Def
*,
const
Def
*,
const
Def
*);
42
///@}
43
44
/// @name %%autodiff.add
45
///@{
46
enum class
add
:
flags_t
{
47
};
48
49
const
Def
*
normalize_add
(
const
Def
*,
const
Def
*,
const
Def
*);
50
///@}
51
52
/// @name %%autodiff.sum
53
///@{
54
enum class
sum
:
flags_t
{
55
};
56
57
const
Def
*
normalize_sum
(
const
Def
*,
const
Def
*,
const
Def
*);
58
///@}
59
60
/// @name %%autodiff.zero_repl
61
///@{
62
enum class
zero_repl
:
flags_t
{
63
};
64
65
///@}
66
67
/// @name %%autodiff.eval
68
///@{
69
enum class
eval
:
flags_t
{
70
};
71
72
///@}
73
74
/// @name %%autodiff.diff
75
///@{
76
enum class
diff
:
flags_t
{
77
core_icmp_xYgLE
= 0x9655014a1c70800,
78
core_wrap_add
= 0x9655014a1c70801,
79
core_wrap_mul
= 0x9655014a1c70802,
80
};
81
82
///@}
83
84
void
register_normalizers
(
Normalizers
& normalizers);
85
86
#define MIM_autodiff_NORMALIZER_IMPL \
87
void register_normalizers(Normalizers& normalizers) {\
88
normalizers[flags_t(Annex::Base<Tangent>)] = &normalize_Tangent; \
89
normalizers[flags_t(Annex::Base<AD>)] = &normalize_AD; \
90
normalizers[flags_t(Annex::Base<ad>)] = &normalize_ad; \
91
normalizers[flags_t(Annex::Base<zero>)] = &normalize_zero; \
92
normalizers[flags_t(Annex::Base<add>)] = &normalize_add; \
93
normalizers[flags_t(Annex::Base<sum>)] = &normalize_sum; \
94
}
95
}
// namespace plug::autodiff
96
97
#ifndef DOXYGEN
// don't include in Doxygen documentation
98
99
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::Tangent>
= 0x9655014a1c70000;
100
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::Tangent>
= 0;
101
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::AD>
= 0x9655014a1c70100;
102
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::AD>
= 0;
103
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::ad>
= 0x9655014a1c70200;
104
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::ad>
= 0;
105
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::zero>
= 0x9655014a1c70300;
106
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::zero>
= 0;
107
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::add>
= 0x9655014a1c70400;
108
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::add>
= 0;
109
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::sum>
= 0x9655014a1c70500;
110
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::sum>
= 0;
111
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::zero_repl>
= 0x9655014a1c70600;
112
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::zero_repl>
= 0;
113
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::eval>
= 0x9655014a1c70700;
114
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::eval>
= 0;
115
template
<>
constexpr
flags_t
Annex::Base<plug::autodiff::diff>
= 0x9655014a1c70800;
116
template
<>
constexpr
size_t
Annex::Num<plug::autodiff::diff>
= 3;
117
118
template
<>
struct
Axm::IsANode
<
plug
::autodiff::zero_repl> {
using
type
=
Axm
; };
119
template
<>
struct
Axm::IsANode
<
plug
::autodiff::eval> {
using
type
=
Axm
; };
120
template
<>
struct
Axm::IsANode
<
plug
::autodiff::diff> {
using
type
=
Axm
; };
121
122
#endif
123
}
// namespace mim
124
125
#ifndef DOXYGEN
// don't include in Doxygen documentation
126
127
template
<>
struct
fe::is_bit_enum<
mim
::plug::autodiff::diff> : std::true_type {};
128
129
#endif
axm.h
mim::Axm::IsANode::type
App type
Definition
axm.h:70
mim::Axm::IsANode
Definition
axm.h:69
mim::Def
Base class for all Defs.
Definition
def.h:273
mim::plug::autodiff
The automatic differentiation Plugin
Definition
autodiff.h:7
mim::plug::autodiff::zero_repl
zero_repl
Definition
autogen.h:62
mim::plug::autodiff::normalize_Tangent
const Def * normalize_Tangent(const Def *, const Def *, const Def *arg)
Definition
normalizers.cpp:21
mim::plug::autodiff::zero
zero
Definition
autogen.h:38
mim::plug::autodiff::sum
sum
Definition
autogen.h:54
mim::plug::autodiff::normalize_add
const Def * normalize_add(const Def *type, const Def *callee, const Def *arg)
Currently resolved the full addition.
Definition
normalizers.cpp:30
mim::plug::autodiff::Plugin_Id
static constexpr plugin_t Plugin_Id
Definition
autogen.h:10
mim::plug::autodiff::normalize_AD
const Def * normalize_AD(const Def *, const Def *, const Def *arg)
Definition
normalizers.cpp:15
mim::plug::autodiff::normalize_ad
const Def * normalize_ad(const Def *, const Def *, const Def *)
Currently this normalizer does nothin.
Definition
normalizers.cpp:13
mim::plug::autodiff::Tangent
Tangent
Definition
autogen.h:14
mim::plug::autodiff::normalize_sum
const Def * normalize_sum(const Def *type, const Def *callee, const Def *arg)
Definition
normalizers.cpp:68
mim::plug::autodiff::normalize_zero
const Def * normalize_zero(const Def *, const Def *, const Def *)
Currently this normalizer does nothing.
Definition
normalizers.cpp:26
mim::plug::autodiff::diff
diff
Definition
autogen.h:76
mim::plug::autodiff::diff::core_icmp_xYgLE
@ core_icmp_xYgLE
Definition
autogen.h:77
mim::plug::autodiff::diff::core_wrap_add
@ core_wrap_add
Definition
autogen.h:78
mim::plug::autodiff::diff::core_wrap_mul
@ core_wrap_mul
Definition
autogen.h:79
mim::plug::autodiff::AD
AD
Definition
autogen.h:22
mim::plug::autodiff::add
add
Definition
autogen.h:46
mim::plug::autodiff::eval
eval
Definition
autogen.h:69
mim::plug::autodiff::register_normalizers
void register_normalizers(Normalizers &normalizers)
mim::plug::autodiff::ad
ad
Definition
autogen.h:30
mim::plug
Definition
lower_for.h:5
mim
Definition
ast.h:16
mim::flags_t
u64 flags_t
Definition
types.h:39
mim::Normalizers
absl::flat_hash_map< flags_t, NormalizeFn > Normalizers
Definition
plugin.h:27
mim::plugin_t
u64 plugin_t
Definition
types.h:40
mim::Node::Axm
@ Axm
Definition
def.h:122
plugin.h
mim::Annex::Num
static constexpr size_t Num
Number of Axm::subtags.
Definition
plugin.h:247
mim::Annex::Base
static constexpr flags_t Base
Definition
plugin.h:248
build
include
mim
plug
autodiff
autogen.h
Generated by
1.18.0