@@ -141,7 +141,8 @@ IntSet Evaluate(Expr expr,
141141 const std::unordered_map<ir::Var, IntSet>& var_domain) {
142142 Expr copy_for_upper_bound = ir::ir_utils::IRCopy (expr);
143143 Expr copy_for_lower_bound = ir::ir_utils::IRCopy (expr);
144- common::cas_intervals_t var_intervals;
144+ common::cas_intervals_t
145+ var_intervals; // variable name -> CasIntervals[lower_bound, upper_bound]
145146 std::vector<ir::Expr> var_vec = ir::ir_utils::CollectIRNodesWithoutTensor (
146147 expr, [](const ir::Expr* x) { return x->as_var (); });
147148 for (Expr var_expr : var_vec) {
@@ -150,7 +151,9 @@ IntSet Evaluate(Expr expr,
150151 const ir::Var& fixed_var = fixed.at (var);
151152 var_intervals.emplace (
152153 fixed_var->name ,
153- common::CasInterval (fixed_var->lower_bound , fixed_var->upper_bound ));
154+ common::CasInterval (
155+ fixed_var->lower_bound ,
156+ cinn::common::NormalizeUpperBound (fixed_var->upper_bound )));
154157 optim::ReplaceVarWithExpr (©_for_lower_bound, var, Expr (fixed_var));
155158 optim::ReplaceVarWithExpr (©_for_upper_bound, var, Expr (fixed_var));
156159 } else if (var_domain.count (var) != 0 ) {
@@ -172,7 +175,8 @@ IntSet Evaluate(Expr expr,
172175 ::common::errors::InvalidArgument (
173176 " The 'upper_bound' of the variable must be defined." ));
174177 optim::ReplaceVarWithExpr (©_for_lower_bound, var, var->lower_bound );
175- optim::ReplaceVarWithExpr (©_for_upper_bound, var, var->upper_bound );
178+ optim::ReplaceVarWithExpr (
179+ ©_for_upper_bound, var, NormalizeUpperBound (var->upper_bound ));
176180 }
177181 }
178182 ir::Expr lower_bound = optim::ArithSimplify (copy_for_lower_bound);
0 commit comments