//===- QuasiPolynomial.h - QuasiPolynomial Class ----------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Definition of the QuasiPolynomial class for Barvinok's algorithm, // which represents a single-valued function on a set of parameters. // It is an expression of the form // f(x) = \sum_i c_i * \prod_j ⌊g_{ij}(x)⌋ // where c_i \in Q and // g_{ij} : Q^d -> Q are affine functionals over d parameters. // //===----------------------------------------------------------------------===// #ifndef MLIR_ANALYSIS_PRESBURGER_QUASIPOLYNOMIAL_H #define MLIR_ANALYSIS_PRESBURGER_QUASIPOLYNOMIAL_H #include "mlir/Analysis/Presburger/Fraction.h" #include "mlir/Analysis/Presburger/PresburgerSpace.h" namespace mlir { namespace presburger { // A class to describe quasi-polynomials. // A quasipolynomial consists of a set of terms. // The ith term is a constant `coefficients[i]`, multiplied // by the product of a set of affine functions on n parameters. // Represents functions f : Q^n -> Q of the form // // f(x) = \sum_i c_i * \prod_j ⌊g_{ij}(x)⌋ // // where c_i \in Q and // g_{ij} : Q^n -> Q are affine functionals. class QuasiPolynomial : public PresburgerSpace { … }; } // namespace presburger } // namespace mlir #endif // MLIR_ANALYSIS_PRESBURGER_QUASIPOLYNOMIAL_H