1 | #include "taichi/ir/stmt_op_types.h" |
2 | |
3 | #include "taichi/common/logging.h" |
4 | |
5 | namespace taichi::lang { |
6 | std::string unary_op_type_name(UnaryOpType type) { |
7 | switch (type) { |
8 | #define PER_UNARY_OP(i) \ |
9 | case UnaryOpType::i: \ |
10 | return #i; |
11 | |
12 | #include "taichi/inc/unary_op.inc.h" |
13 | |
14 | #undef PER_UNARY_OP |
15 | default: |
16 | TI_NOT_IMPLEMENTED |
17 | } |
18 | } |
19 | |
20 | std::string binary_op_type_name(BinaryOpType type) { |
21 | switch (type) { |
22 | #define PER_BINARY_OP(x) \ |
23 | case BinaryOpType::x: \ |
24 | return #x; |
25 | |
26 | #include "taichi/inc/binary_op.inc.h" |
27 | |
28 | #undef PER_BINARY_OP |
29 | default: |
30 | TI_NOT_IMPLEMENTED |
31 | } |
32 | } |
33 | |
34 | std::string binary_op_type_symbol(BinaryOpType type) { |
35 | switch (type) { |
36 | #define REGISTER_TYPE(i, s) \ |
37 | case BinaryOpType::i: \ |
38 | return #s; |
39 | |
40 | REGISTER_TYPE(mul, *); |
41 | REGISTER_TYPE(add, +); |
42 | REGISTER_TYPE(sub, -); |
43 | REGISTER_TYPE(div, /); |
44 | REGISTER_TYPE(truediv, /); |
45 | REGISTER_TYPE(floordiv, /); |
46 | REGISTER_TYPE(mod, %); |
47 | REGISTER_TYPE(max, max); |
48 | REGISTER_TYPE(min, min); |
49 | REGISTER_TYPE(atan2, atan2); |
50 | REGISTER_TYPE(cmp_lt, <); |
51 | REGISTER_TYPE(cmp_le, <=); |
52 | REGISTER_TYPE(cmp_gt, >); |
53 | REGISTER_TYPE(cmp_ge, >=); |
54 | REGISTER_TYPE(cmp_ne, !=); |
55 | REGISTER_TYPE(cmp_eq, ==); |
56 | REGISTER_TYPE(bit_and, &); |
57 | REGISTER_TYPE(bit_or, |); |
58 | REGISTER_TYPE(logical_and, &&); |
59 | REGISTER_TYPE(logical_or, ||); |
60 | REGISTER_TYPE(bit_xor, ^); |
61 | REGISTER_TYPE(pow, pow); |
62 | REGISTER_TYPE(bit_shl, <<); |
63 | REGISTER_TYPE(bit_sar, >>); |
64 | REGISTER_TYPE(bit_shr, shr); |
65 | |
66 | #undef REGISTER_TYPE |
67 | default: |
68 | TI_NOT_IMPLEMENTED |
69 | } |
70 | } |
71 | |
72 | std::string ternary_type_name(TernaryOpType type) { |
73 | switch (type) { |
74 | #define REGISTER_TYPE(i) \ |
75 | case TernaryOpType::i: \ |
76 | return #i; |
77 | |
78 | REGISTER_TYPE(select); |
79 | REGISTER_TYPE(ifte); |
80 | |
81 | #undef REGISTER_TYPE |
82 | default: |
83 | TI_NOT_IMPLEMENTED |
84 | } |
85 | } |
86 | |
87 | std::string atomic_op_type_name(AtomicOpType type) { |
88 | switch (type) { |
89 | #define REGISTER_TYPE(i) \ |
90 | case AtomicOpType::i: \ |
91 | return #i; |
92 | |
93 | REGISTER_TYPE(add); |
94 | REGISTER_TYPE(sub); |
95 | REGISTER_TYPE(max); |
96 | REGISTER_TYPE(min); |
97 | REGISTER_TYPE(bit_and); |
98 | REGISTER_TYPE(bit_or); |
99 | REGISTER_TYPE(bit_xor); |
100 | |
101 | #undef REGISTER_TYPE |
102 | default: |
103 | TI_NOT_IMPLEMENTED |
104 | } |
105 | } |
106 | |
107 | BinaryOpType atomic_to_binary_op_type(AtomicOpType type) { |
108 | switch (type) { |
109 | #define REGISTER_TYPE(i) \ |
110 | case AtomicOpType::i: \ |
111 | return BinaryOpType::i; |
112 | |
113 | REGISTER_TYPE(add); |
114 | REGISTER_TYPE(sub); |
115 | REGISTER_TYPE(max); |
116 | REGISTER_TYPE(min); |
117 | REGISTER_TYPE(bit_and); |
118 | REGISTER_TYPE(bit_or); |
119 | REGISTER_TYPE(bit_xor); |
120 | |
121 | #undef REGISTER_TYPE |
122 | default: |
123 | TI_NOT_IMPLEMENTED |
124 | } |
125 | } |
126 | |
127 | std::string snode_op_type_name(SNodeOpType type) { |
128 | switch (type) { |
129 | #define REGISTER_TYPE(i) \ |
130 | case SNodeOpType::i: \ |
131 | return #i; |
132 | |
133 | REGISTER_TYPE(is_active); |
134 | REGISTER_TYPE(length); |
135 | REGISTER_TYPE(get_addr); |
136 | REGISTER_TYPE(activate); |
137 | REGISTER_TYPE(deactivate); |
138 | REGISTER_TYPE(append); |
139 | REGISTER_TYPE(allocate); |
140 | REGISTER_TYPE(clear); |
141 | REGISTER_TYPE(undefined); |
142 | |
143 | #undef REGISTER_TYPE |
144 | default: |
145 | TI_NOT_IMPLEMENTED |
146 | } |
147 | } |
148 | |
149 | std::string texture_op_type_name(TextureOpType type) { |
150 | switch (type) { |
151 | #define REGISTER_TYPE(i) \ |
152 | case TextureOpType::i: \ |
153 | return #i; |
154 | |
155 | REGISTER_TYPE(kUndefined); |
156 | REGISTER_TYPE(kSampleLod); |
157 | REGISTER_TYPE(kFetchTexel); |
158 | REGISTER_TYPE(kLoad); |
159 | REGISTER_TYPE(kStore); |
160 | |
161 | #undef REGISTER_TYPE |
162 | default: |
163 | TI_NOT_IMPLEMENTED |
164 | } |
165 | } |
166 | |
167 | } // namespace taichi::lang |
168 | |