Skip to content

Commit

Permalink
ASRUtils: Simple and (hopefully) robust dims comparison
Browse files Browse the repository at this point in the history
  • Loading branch information
Shaikh-Ubaid committed Aug 28, 2023
1 parent fd78f27 commit a053339
Showing 1 changed file with 7 additions and 15 deletions.
22 changes: 7 additions & 15 deletions src/libasr/asr_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -2430,21 +2430,13 @@ inline bool dimension_expr_equal(ASR::expr_t* dim_a, ASR::expr_t* dim_b) {
if( !(dim_a && dim_b) ) {
return true;
}
ASR::expr_t* dim_a_fallback = nullptr;
ASR::expr_t* dim_b_fallback = nullptr;
if( ASR::is_a<ASR::Var_t>(*dim_a) &&
ASR::is_a<ASR::Variable_t>(
*ASR::down_cast<ASR::Var_t>(dim_a)->m_v) ) {
dim_a_fallback = ASRUtils::EXPR2VAR(dim_a)->m_symbolic_value;
}
if( ASR::is_a<ASR::Var_t>(*dim_b) &&
ASR::is_a<ASR::Variable_t>(
*ASR::down_cast<ASR::Var_t>(dim_b)->m_v) ) {
dim_b_fallback = ASRUtils::EXPR2VAR(dim_b)->m_symbolic_value;
}
if( !ASRUtils::expr_equal(dim_a, dim_b) &&
!(dim_a_fallback && ASRUtils::expr_equal(dim_a_fallback, dim_b)) &&
!(dim_b_fallback && ASRUtils::expr_equal(dim_a, dim_b_fallback)) ) {
int dim_a_int, dim_b_int;
if (ASRUtils::extract_value(ASRUtils::expr_value(dim_a), dim_a_int)
&& ASRUtils::extract_value(ASRUtils::expr_value(dim_b), dim_b_int)) {
return dim_a_int == dim_b_int;
}

if( !ASRUtils::expr_equal(dim_a, dim_b) ) {
return false;
}
return true;
Expand Down

0 comments on commit a053339

Please sign in to comment.