20 Commits

Author SHA1 Message Date
Hongren Zheng
4425dfba6a
[mlir][polynomial] Add and verify constraints of coefficientModulus for ringAttr (#111016)
Currently the semantic of coefficientModulus is unclear and a lowering
of it faces uncertainty, for example,
https://github.com/google/heir/pull/995#issuecomment-2387394895

Also, it lacks a verifier which should conform to the definition in the
document.

This PR tries to further define the semantic of coefficientModulus and
adds a verifier for it.

Cc @j2kun for review and suggestions.
2024-10-05 08:42:59 -07:00
Hongren Zheng
d48777ece5
[mlir][polynomial] remove incorrect canonicalization rule (#110318)
arith.add for tensor does not mod coefficientModulus, and it may
overflow; the result could be incorrect

It should be rewritten as modular arithmetic instead of arith

Revert https://github.com/llvm/llvm-project/pull/93132
Addresses https://github.com/google/heir/issues/749

Cc @j2kun
2024-09-28 08:37:57 -07:00
Ramkumar Ramachandra
db791b278a
mlir/LogicalResult: move into llvm (#97309)
This patch is part of a project to move the Presburger library into
LLVM.
2024-07-02 10:42:33 +01:00
Jeremy Kun
f2f6569eca
[mlir][polynomial] ensure primitive root calculation doesn't overflow (#93368)
Rebased over https://github.com/llvm/llvm-project/pull/93243

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-31 11:56:54 -07:00
Jeremy Kun
692ae5443b
[mlir][polynomial] verify from_tensor coeff type (#93243)
Rebased over https://github.com/llvm/llvm-project/pull/93227

---------

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-30 11:03:36 -07:00
Jeremy Kun
1f46729a18
[polynomial] Move primitive root attribute to ntt/intt ops. (#93227)
Better design to put semantics on the ops, and in this case the ntt/intt
op can lower in multiple ways depending on the polynomial ring modulus
(it can need an nth root of unity for cyclic polymul -> ntt, or a 2nth
root for negacyclic polymul -> ntt)

---------

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-30 07:09:18 -07:00
Jeremy Kun
1a28f26b16
[polynomial] distribute add/sub through ntt to reduce ntts (#93132)
Addresses
https://github.com/google/heir/issues/542#issuecomment-2126175775

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-23 10:41:49 -07:00
Jeremy Kun
ab29203e46
[mlir][polynomial] use typed attributes for polynomial.constant op (#92818)
Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-22 15:07:04 -07:00
Jeremy Kun
e18c483881
[mlir] add arith dialect dep to fix buildbot failure (#92585)
https://lab.llvm.org/buildbot/#/builders/268/builds/14288

```undefined reference to `mlir::detail::TypeIDResolver<mlir::arith::ConstantOp, void>::id'```
2024-05-17 10:50:39 -07:00
Jeremy Kun
932bef2327
Poly canonicalization (#91410)
Adds simple canonicalization rules to the polynomial dialect. Mainly to
get the boilerplate incorporated before more substantial
canonicalization patterns are added.

---------

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-17 10:18:26 -07:00
Jeremy Kun
2ff43ce87e
Restore #91137 (#92003)
#91137 reverted in #92001

A build error fix added in 28d5ece8ca93ef04fee9b0258b70b750b66c05ca

---------

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-14 09:45:39 -07:00
Jeremy Kun
ad727b1a67
Revert "Support polynomial attributes with floating point coefficients (#91137)" (#92001)
This reverts commit 91a14dbf825b79ff143d1b16124763a4a80facab.

Not sure how to fix the build error this introduced, so reverting until
I can figure it out

https://lab.llvm.org/buildbot/#/builders/264/builds/10468

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-13 10:19:59 -07:00
Jeremy Kun
91a14dbf82
Support polynomial attributes with floating point coefficients (#91137)
In summary:

- `Monomial` -> `MonomialBase` with two inheriting `IntMonomial` and
`FloatMonomial` for the different coefficient types
- `Polynomial` -> `PolynomialBase` with `IntPolynomial` and
`FloatPolynomial` inheriting
- `PolynomialAttr` -> `IntPolynomialAttr`, and new `FloatPolynomialAttr`
attribute, both of which may be input to `polynomial.constant`
- Refactoring common parts of attribute parsers.

---------

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-05-13 09:47:34 -07:00
Jeremy Kun
624c9fc87f
Upstream polynomial.ntt and polynomial.intt (#90992)
These two ops represent a number-theoretic transform of a polynomial to
a tensor of evaluations of the polynomial at a list of powers of
primitive roots of the polynomial.

To support this, a new optional attribute is added to the ring attribute
to specify the primitive root of unity used for the NTT. A verifier for
the op is added to ensure the chosen root is a primitive nth root of
unity.

---------

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
Co-authored-by: Oleksandr "Alex" Zinenko <ftynse@gmail.com>
2024-05-05 09:44:35 -07:00
Jie Fu
da213d77c0 [MLIR] Fix linking error of PolynomialDialect on MacOS (NFC)
ld64.lld: error: undefined symbol: mlir::detail::verifyInferredResultTypes(mlir::Operation*)
>>> referenced by tools/mlir/lib/Dialect/Polynomial/IR/CMakeFiles/obj.MLIRPolynomialDialect.dir/PolynomialDialect.cpp.o:(symbol mlir::Op<mlir::polynomial::AddOp, mlir::OpTrait::ZeroRegions, mlir::OpTrait::OneResult, mlir::OpTrait::OneTypedResult<mlir::Type>::Impl, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::NOperands<2u>::Impl, mlir::OpTrait::OpInvariants, mlir::OpTrait::IsCommutative, mlir::ConditionallySpeculatable::Trait, mlir::OpTrait::AlwaysSpeculatableImplTrait, mlir::MemoryEffectOpInterface::Trait, mlir::OpTrait::SameOperandsAndResultType, mlir::OpTrait::Elementwise, mlir::OpTrait::Scalarizable, mlir::OpTrait::Vectorizable, mlir::OpTrait::Tensorizable, mlir::InferTypeOpInterface::Trait>::verifyRegionInvariants(mlir::Operation*)+0x14)
>>> referenced by tools/mlir/lib/Dialect/Polynomial/IR/CMakeFiles/obj.MLIRPolynomialDialect.dir/PolynomialDialect.cpp.o:(symbol mlir::Op<mlir::polynomial::MonicMonomialMulOp, mlir::OpTrait::ZeroRegions, mlir::OpTrait::OneResult, mlir::OpTrait::OneTypedResult<mlir::Type>::Impl, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::NOperands<2u>::Impl, mlir::OpTrait::OpInvariants, mlir::ConditionallySpeculatable::Trait, mlir::OpTrait::AlwaysSpeculatableImplTrait, mlir::MemoryEffectOpInterface::Trait, mlir::InferTypeOpInterface::Trait>::verifyRegionInvariants(mlir::Operation*)+0x14)
2024-04-29 09:39:55 +08:00
Jeremy Kun
145176dc0c
polynomial: Add basic ops (#89525)
Adds a few basic polynomial ops.

- add, sub, mul
- mul_scalar
- leading_term, monomial_mul, monomial (useful for lowering `mul` to
standard MLIR)
- from_tensor, to_tensor, constant

---------

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
Co-authored-by: Oleksandr "Alex" Zinenko <ftynse@gmail.com>
2024-04-28 14:58:44 -07:00
Christian Sigg
fac349a169
Reapply "[mlir] Mark isa/dyn_cast/cast/... member functions depreca… (#90406)
…ted. (#89998)" (#90250)

This partially reverts commit 7aedd7dc754c74a49fe84ed2640e269c25414087.

This change removes calls to the deprecated member functions. It does
not mark the functions deprecated yet and does not disable the
deprecation warning in TypeSwitch. This seems to cause problems with
MSVC.
2024-04-28 22:01:42 +02:00
dyung
7aedd7dc75
Revert "[mlir] Mark isa/dyn_cast/cast/... member functions deprecated. (#89998)" (#90250)
This reverts commit 950b7ce0b88318f9099e9a7c9817d224ebdc6337.

This change is causing build failures on a bot
https://lab.llvm.org/buildbot/#/builders/216/builds/38157
2024-04-26 12:09:13 -07:00
Christian Sigg
950b7ce0b8
[mlir] Mark isa/dyn_cast/cast/... member functions deprecated. (#89998)
See https://mlir.llvm.org/deprecation and
https://discourse.llvm.org/t/preferred-casting-style-going-forward.
2024-04-26 16:28:30 +02:00
Jeremy Kun
55b6f17071
Add a polynomial dialect shell, attributes, and types (#72081)
RFC:
https://discourse.llvm.org/t/rfc-a-poly-dialect-for-polynomial-arithmetic/73891

This PR implements the minimal work needed to represent the polynomial
type such that it can be tested with `lit`.

In this PR:

- Dialect shell
- `Polynomial` data structure needed for folding
- Polynomial attributes (`PolynomialAttr` and `RingAttr` which store a polynomial)
- `polynomial.polynomial` type
- Basic lit tests

---------

Co-authored-by: Jeremy Kun <j2kun@users.noreply.github.com>
2024-04-15 09:12:00 -07:00