From 54805596f50535d3a84a2d9e4c1c550722a96f39 Mon Sep 17 00:00:00 2001 From: Philippe Tillet Date: Fri, 1 May 2020 16:01:04 -0400 Subject: [PATCH] [CODEGEN][ANALYSIS] bugfix in alignment analysis --- lib/codegen/analysis/align.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/codegen/analysis/align.cc b/lib/codegen/analysis/align.cc index 8e9ba699c..66aff113c 100644 --- a/lib/codegen/analysis/align.cc +++ b/lib/codegen/analysis/align.cc @@ -269,11 +269,14 @@ std::vector align::populate_max_contiguous_binop(ir::binary_operator* auto rhs_max_contiguous = populate_max_contiguous(rhs); auto lhs_cst_info = populate_is_constant(lhs); auto rhs_cst_info = populate_is_constant(rhs); + auto lhs_starting_multiple = populate_starting_multiple(lhs); + auto rhs_starting_multiple = populate_starting_multiple(rhs); std::vector result; for(size_t d = 0; d < shapes.size(); d++){ unsigned value = 1; - if(x->is_int_rem() && rhs_cst_info[d].value > 0) - value = std::min(lhs_max_contiguous[d], rhs_cst_info[d].value); + if(x->is_int_rem() && rhs_starting_multiple[d] > 0){ + value = std::min(lhs_max_contiguous[d], rhs_starting_multiple[d]); + } if(x->is_int_mult()){ unsigned lvalue = 1, rvalue = 1; if(rhs_cst_info[d].value == 1) @@ -393,8 +396,9 @@ std::vector align::populate_starting_multiple_binop(ir::binary_operato result[d] = gcd(lhs[d], rhs[d]); if(x->is_int_div()) result[d] = std::max(lhs[d] / rhs[d], 1); - if(x->is_int_rem() && rhs[d] > 1) + if(x->is_int_rem() && rhs[d] > 1){ result[d] = gcd(lhs[d], rhs[d]); + } if(x->is_shl()) result[d] = lhs[d] << rhs[d]; if(x->is_shr())