void split_into_ands(const Expr &cond, std::vector<Expr> &result) { if (!cond.defined()) { return; } internal_assert(cond.type().is_bool()) << "Should be a boolean condition\n"; if (const And *a = cond.as<And>()) { split_into_ands(a->a, result); split_into_ands(a->b, result); } else if (!is_one(cond)) { result.push_back(cond); } }
std::vector<Expr> ReductionDomain::split_predicate() const { std::vector<Expr> predicates; split_into_ands(contents->predicate, predicates); return predicates; }