1#pragma once
2
3#ifndef _TRITON_IR_VISITOR_H_
4#define _TRITON_IR_VISITOR_H_
5
6
7namespace triton{
8namespace ir{
9
10class value;
11
12class instruction;
13
14class call_inst;
15class launch_inst;
16
17class phi_node;
18class binary_operator;
19class getelementptr_inst;
20
21class icmp_inst;
22class fcmp_inst;
23class dequantize_inst;
24class cast_inst;
25class trunc_inst;
26class z_ext_inst;
27class s_ext_inst;
28class fp_trunc_inst;
29class fp_ext_inst;
30class ui_to_fp_inst;
31class si_to_fp_inst;
32class fp_to_ui_inst;
33class fp_to_si_inst;
34class ptr_to_int_inst;
35class int_to_ptr_inst;
36class bit_cast_inst;
37class addr_space_cast_inst;
38
39class return_inst;
40class cond_branch_inst;
41class uncond_branch_inst;
42
43
44class unmasked_load_inst;
45class masked_load_inst;
46class unmasked_store_inst;
47class masked_store_inst;
48
49class extract_value_inst;
50class insert_value_inst;
51
52class retile_inst;
53class reshape_inst;
54class splat_inst;
55class cat_inst;
56class broadcast_inst;
57class downcast_inst;
58
59class umulhi_inst;
60class exp_inst;
61class cos_inst;
62class sin_inst;
63class log_inst;
64
65class get_program_id_inst;
66class get_num_programs_inst;
67class atomic_inst;
68class atomic_cas_inst;
69class atomic_rmw_inst;
70class dot_inst;
71class trans_inst;
72class sqrt_inst;
73class reduce_inst;
74class select_inst;
75
76class cvt_layout_inst;
77class copy_to_shared_inst;
78class copy_from_shared_inst;
79class masked_load_async_inst;
80class barrier_inst;
81class async_wait_inst;
82class make_range_dyn;
83class make_range;
84class prefetch_s_inst;
85class clock_inst;
86class globaltimer_inst;
87
88class extern_elementwise_inst;
89
90class make_range_sta;
91class undef_value;
92class constant_int;
93class constant_fp;
94class global_value;
95class global_object;
96class alloc_const;
97
98class constant_fp;
99class undef_value;
100class constant_int;
101class constant_fp;
102class global_value;
103class global_object;
104class alloc_const;
105
106class function;
107
108class basic_block;
109
110class argument;
111
112class visitor {
113public:
114 virtual ~visitor() {}
115
116 virtual void visit_value(ir::value*);
117 virtual void visit_call_inst(ir::call_inst*) = 0;
118 virtual void visit_launch_inst(ir::launch_inst*) = 0;
119
120 virtual void visit_basic_block(basic_block*) = 0;
121 virtual void visit_argument(argument*) = 0;
122 virtual void visit_phi_node(phi_node*) = 0;
123 virtual void visit_binary_operator(binary_operator*) = 0;
124 virtual void visit_getelementptr_inst(getelementptr_inst*) = 0;
125
126 virtual void visit_icmp_inst(icmp_inst*) = 0;
127 virtual void visit_fcmp_inst(fcmp_inst*) = 0;
128 virtual void visit_dequantize_inst(dequantize_inst*) = 0;
129 virtual void visit_cast_inst(cast_inst*) = 0;
130
131 virtual void visit_return_inst(return_inst*) = 0;
132 virtual void visit_cond_branch_inst(cond_branch_inst*) = 0;
133 virtual void visit_uncond_branch_inst(uncond_branch_inst*) = 0;
134
135
136 virtual void visit_unmasked_load_inst(unmasked_load_inst*) = 0;
137 virtual void visit_masked_load_inst(masked_load_inst*) = 0;
138 virtual void visit_unmasked_store_inst(unmasked_store_inst*) = 0;
139 virtual void visit_masked_store_inst(masked_store_inst*) = 0;
140
141 virtual void visit_umulhi_inst(umulhi_inst*) = 0;
142 virtual void visit_exp_inst(exp_inst*) = 0;
143 virtual void visit_cos_inst(cos_inst*) = 0;
144 virtual void visit_sin_inst(sin_inst*) = 0;
145 virtual void visit_log_inst(log_inst*) = 0;
146
147 virtual void visit_extract_value_inst(extract_value_inst*) = 0;
148 virtual void visit_insert_value_inst(insert_value_inst*) = 0;
149
150 virtual void visit_reshape_inst(reshape_inst*) = 0;
151 virtual void visit_splat_inst(splat_inst*) = 0;
152 virtual void visit_cat_inst(cat_inst*) = 0;
153 virtual void visit_broadcast_inst(broadcast_inst*) = 0;
154 virtual void visit_downcast_inst(downcast_inst*) = 0;
155
156 virtual void visit_get_program_id_inst(get_program_id_inst*) = 0;
157 virtual void visit_get_num_programs_inst(get_num_programs_inst*) = 0;
158 virtual void visit_atomic_cas_inst(atomic_cas_inst*) = 0;
159 virtual void visit_atomic_rmw_inst(atomic_rmw_inst*) = 0;
160 virtual void visit_dot_inst(dot_inst*) = 0;
161 virtual void visit_trans_inst(trans_inst*) = 0;
162 virtual void visit_sqrt_inst(sqrt_inst*) = 0;
163 virtual void visit_reduce_inst(reduce_inst*) = 0;
164 virtual void visit_select_inst(select_inst*) = 0;
165
166 virtual void visit_cvt_layout_inst(cvt_layout_inst*) = 0;
167 virtual void visit_copy_to_shared_inst(copy_to_shared_inst*) = 0;
168 virtual void visit_copy_from_shared_inst(copy_from_shared_inst*) = 0;
169
170
171 virtual void visit_masked_load_async_inst(masked_load_async_inst*)= 0;
172 virtual void visit_barrier_inst(barrier_inst*) = 0;
173 virtual void visit_async_wait_inst(async_wait_inst*) = 0;
174 virtual void visit_make_range(make_range*) = 0;
175 virtual void visit_prefetch_s_inst(prefetch_s_inst*) = 0;
176 virtual void visit_function(function*) = 0;
177 virtual void visit_clock_inst(clock_inst*) = 0;
178 virtual void visit_globaltimer_inst(globaltimer_inst*) = 0;
179
180 virtual void visit_undef_value(undef_value*) = 0;
181 virtual void visit_constant_int(constant_int*) = 0;
182 virtual void visit_constant_fp(constant_fp*) = 0;
183 virtual void visit_alloc_const(alloc_const*) = 0;
184
185 virtual void visit_extern_elementwise_inst(extern_elementwise_inst*) = 0;
186};
187
188}
189}
190
191#endif
192