[GENERAL] Cleaned polymorphic structure of layouts analysis pass
This commit is contained in:
@@ -12,7 +12,7 @@ namespace triton {
|
||||
namespace codegen{
|
||||
namespace transform{
|
||||
|
||||
coalesce::coalesce(analysis::align* align, analysis::layout *layouts)
|
||||
coalesce::coalesce(analysis::align* align, analysis::layouts *layouts)
|
||||
: align_(align), layout_(layouts) { }
|
||||
|
||||
// Find all values that are used as pointer operands in LD/ST
|
||||
@@ -64,8 +64,9 @@ ir::value* coalesce::rematerialize(ir::value *x, ir::builder &builder,
|
||||
void coalesce::run(ir::module &mod) {
|
||||
size_t num_groups = layout_->num_layouts();
|
||||
|
||||
|
||||
for(size_t id = 0; id < num_groups; id++) {
|
||||
if(layout_->get(id)->type != analysis::HMMA_884)
|
||||
if(!layout_->get(id)->to_mma884())
|
||||
continue;
|
||||
// extract memory stores
|
||||
const auto& values = layout_->values_of(id);
|
||||
@@ -97,7 +98,6 @@ void coalesce::run(ir::module &mod) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// find values to rematerialize
|
||||
std::vector<ir::io_inst*> remat;
|
||||
for(size_t id = 0; id < num_groups; id++) {
|
||||
@@ -109,7 +109,7 @@ void coalesce::run(ir::module &mod) {
|
||||
// extract leading axes
|
||||
std::map<int, std::vector<ir::io_inst*>> axes;
|
||||
for(ir::io_inst *i: io){
|
||||
if(i->get_pointer_operand()->get_type()->get_tile_ranks1() == layout_->get(id)->axes.size())
|
||||
if(i->get_pointer_operand()->get_type()->get_tile_ranks1() == layout_->get(id)->get_rank())
|
||||
extract_ld(i, axes);
|
||||
}
|
||||
// update list of values to rematerialize
|
||||
|
@@ -35,10 +35,11 @@ void membar::add_reference(ir::value *v, interval_vec_t &res){
|
||||
return;
|
||||
if(!i->get_type()->is_tile_ty())
|
||||
return;
|
||||
if(alloc_->has_offset(layouts_->get(v))){
|
||||
unsigned offset = alloc_->offset(layouts_->get(v));
|
||||
unsigned size = layouts_->get(v)->to_shared()->size;
|
||||
res.push_back(interval_t(offset, offset + size));
|
||||
analysis::shared_layout* layout = layouts_->get(v)->to_shared();
|
||||
assert(layout);
|
||||
if(alloc_->has_offset(layout)){
|
||||
unsigned offset = alloc_->offset(layout);
|
||||
res.push_back(interval_t(offset, offset + layout->get_size()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,13 +120,11 @@ void membar::run(ir::module &mod) {
|
||||
// without needing synchronization
|
||||
std::set<ir::value*> safe_war;
|
||||
for(const auto& x: layouts_->get_all()){
|
||||
if(x.second->type != analysis::SHARED)
|
||||
analysis::shared_layout* layout = x.second->to_shared();
|
||||
if(!layout || !layout->get_double_buffer())
|
||||
continue;
|
||||
analysis::layout_shared_t* layout = x.second->to_shared();
|
||||
if(!layout->double_buffer)
|
||||
continue;
|
||||
for(ir::value *v: layout->values)
|
||||
if(v != layout->double_buffer->phi)
|
||||
for(ir::value *v: layout->get_values())
|
||||
if(v != layout->get_double_buffer()->phi)
|
||||
safe_war.insert(v);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user