1 | #ifndef TDL_INCLUDE_CODEGEN_OPTIMIZE_REORDER_H |
2 | #define TDL_INCLUDE_CODEGEN_OPTIMIZE_REORDER_H |
3 | |
4 | #include <map> |
5 | #include <set> |
6 | #include <vector> |
7 | |
8 | namespace triton { |
9 | |
10 | namespace ir { |
11 | class module; |
12 | class value; |
13 | class io_inst; |
14 | class instruction; |
15 | class builder; |
16 | } |
17 | |
18 | namespace codegen{ |
19 | |
20 | namespace analysis{ |
21 | class align; |
22 | class layouts; |
23 | class cts; |
24 | } |
25 | |
26 | namespace transform{ |
27 | |
28 | class coalesce { |
29 | private: |
30 | void (ir::value *v, std::set<ir::io_inst*>& result); |
31 | void (ir::io_inst *i, std::map<int, std::vector<triton::ir::io_inst *> > &result); |
32 | ir::value* rematerialize(ir::value *v, ir::builder& builder, std::map<ir::value*, ir::value*>& seen); |
33 | |
34 | public: |
35 | coalesce(analysis::align* align, triton::codegen::analysis::layouts *layouts, bool has_sm80); |
36 | triton::ir::value *simplify(ir::instruction* i, triton::ir::builder &builder); |
37 | void run(ir::module &mod); |
38 | |
39 | private: |
40 | bool has_sm80_; |
41 | analysis::align* align_; |
42 | analysis::layouts* layout_; |
43 | }; |
44 | |
45 | } |
46 | } |
47 | } |
48 | |
49 | #endif |
50 | |