[CODEGEN] Fixed issue in traversal order for atomic_add and store_inst

This commit is contained in:
Philippe Tillet
2021-01-14 17:41:26 -05:00
parent fdc8e8ef61
commit 3b36a1e60c

View File

@@ -442,7 +442,7 @@ void generator::visit_store_inst(ir::store_inst * x){
// vector size // vector size
size_t vec = 1; size_t vec = 1;
if(val_op->get_type()->is_tile_ty()){ if(val_op->get_type()->is_tile_ty()){
auto ord = layouts_->get(x->get_pointer_operand())->get_order(); auto ord = ords_.at(x->get_pointer_operand());
size_t aln = alignment_->get(ptr_op, ord[0]); size_t aln = alignment_->get(ptr_op, ord[0]);
size_t nts = axes_.at(a_axes_->get(x->get_pointer_operand(), ord[0])).contiguous; size_t nts = axes_.at(a_axes_->get(x->get_pointer_operand(), ord[0])).contiguous;
vec = std::min(nts, aln); vec = std::min(nts, aln);
@@ -628,7 +628,7 @@ void generator::visit_atomic_add_inst(ir::atomic_add_inst* add) {
// vector size // vector size
int vec = 1; int vec = 1;
int ld = layouts_->get(ptr)->get_order()[0]; int ld = ords_.at(ptr)[0];
unsigned alignment = alignment_->get(ptr, ld); unsigned alignment = alignment_->get(ptr, ld);
vec = std::min<int>(layouts_->get(ptr)->to_scanline()->nts(ld), alignment); vec = std::min<int>(layouts_->get(ptr)->to_scanline()->nts(ld), alignment);
vec = std::min(vec, val->get_type()->get_tile_element_ty()->is_half_ty() ? 2 : 1); vec = std::min(vec, val->get_type()->get_tile_element_ty()->is_half_ty() ? 2 : 1);