@@ -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,8 @@ 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 (fixed_var->lower_bound ,
155+ NormalizeUpperBound (upper_bound)));
154156 optim::ReplaceVarWithExpr (©_for_lower_bound, var, Expr (fixed_var));
155157 optim::ReplaceVarWithExpr (©_for_upper_bound, var, Expr (fixed_var));
156158 } else if (var_domain.count (var) != 0 ) {
@@ -172,7 +174,8 @@ IntSet Evaluate(Expr expr,
172174 ::common::errors::InvalidArgument (
173175 " The 'upper_bound' of the variable must be defined." ));
174176 optim::ReplaceVarWithExpr (©_for_lower_bound, var, var->lower_bound );
175- optim::ReplaceVarWithExpr (©_for_upper_bound, var, var->upper_bound );
177+ optim::ReplaceVarWithExpr (
178+ ©_for_upper_bound, var, NormalizeUpperBound (var->upper_bound ));
176179 }
177180 }
178181 ir::Expr lower_bound = optim::ArithSimplify (copy_for_lower_bound);
0 commit comments