Files
triton/include/codegen/barriers.h
2019-02-23 11:37:01 -05:00

51 lines
1.1 KiB
C++

#ifndef TDL_INCLUDE_CODEGEN_BARRIERS_H
#define TDL_INCLUDE_CODEGEN_BARRIERS_H
#include <tuple>
#include <vector>
#include <set>
namespace tdl {
namespace ir {
class module;
class basic_block;
class instruction;
class value;
class builder;
}
namespace codegen{
class allocation;
class buffer_info_pass;
class barriers {
private:
typedef std::pair<unsigned, unsigned> interval_t;
typedef std::vector<interval_t> interval_vec_t;
private:
void insert_barrier(ir::instruction *instr, ir::builder &builder);
bool intersect(const interval_vec_t &X, interval_t x);
bool intersect(const interval_vec_t &X, const interval_vec_t &Y);
void add_reference(ir::value *v, interval_vec_t &res);
void get_read_intervals(ir::instruction *i, interval_vec_t &res);
void get_written_intervals(ir::instruction *i, interval_vec_t &res);
void add(ir::basic_block *block, interval_vec_t &not_synced, ir::builder &builder);
public:
barriers(allocation *alloc, buffer_info_pass *buffer_info): alloc_(alloc), buffer_info_(buffer_info) {}
void run(ir::module &mod);
private:
allocation *alloc_;
buffer_info_pass *buffer_info_;
};
}
}
#endif