diff options
| author | Kern Handa <kern.handa@gmail.com> | 2020-02-21 13:25:24 +0100 |
|---|---|---|
| committer | Alex Zinenko <zinenko@google.com> | 2020-02-21 13:27:25 +0100 |
| commit | d0b09f89e0ed01730173e8b609f25da33e826fa6 (patch) | |
| tree | 430d3f89d615ff02c0637927504b4568a04d83f6 | |
| parent | e5eeb8465f29bf4e9cf6f1edb88573338fc12725 (diff) | |
| download | llvm-d0b09f89e0ed01730173e8b609f25da33e826fa6.zip llvm-d0b09f89e0ed01730173e8b609f25da33e826fa6.tar.gz llvm-d0b09f89e0ed01730173e8b609f25da33e826fa6.tar.bz2 | |
[NFC][mlir] Adding more operators to EDSC TemplatedIndexedValue
This change adds some missing arithmetic and logical operators to
`TemplatedIndexedValue` for EDSC usage.
Differential Revision: https://reviews.llvm.org/D74686
| -rw-r--r-- | mlir/include/mlir/Dialect/AffineOps/EDSC/Builders.h | 67 | ||||
| -rw-r--r-- | mlir/include/mlir/EDSC/Builders.h | 64 |
2 files changed, 125 insertions, 6 deletions
diff --git a/mlir/include/mlir/Dialect/AffineOps/EDSC/Builders.h b/mlir/include/mlir/Dialect/AffineOps/EDSC/Builders.h index c20c8d7..f750a1d4 100644 --- a/mlir/include/mlir/Dialect/AffineOps/EDSC/Builders.h +++ b/mlir/include/mlir/Dialect/AffineOps/EDSC/Builders.h @@ -92,7 +92,7 @@ ValueHandle operator>=(ValueHandle lhs, ValueHandle rhs); } // namespace op -/// Operator overloadings. +/// Arithmetic operator overloadings. template <typename Load, typename Store> ValueHandle TemplatedIndexedValue<Load, Store>::operator+(ValueHandle e) { using op::operator+; @@ -113,7 +113,18 @@ ValueHandle TemplatedIndexedValue<Load, Store>::operator/(ValueHandle e) { using op::operator/; return static_cast<ValueHandle>(*this) / e; } +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator%(ValueHandle e) { + using op::operator%; + return static_cast<ValueHandle>(*this) % e; +} +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator^(ValueHandle e) { + using op::operator^; + return static_cast<ValueHandle>(*this) ^ e; +} +/// Assignment-arithmetic operator overloadings. template <typename Load, typename Store> OperationHandle TemplatedIndexedValue<Load, Store>::operator+=(ValueHandle e) { using op::operator+; @@ -134,6 +145,60 @@ OperationHandle TemplatedIndexedValue<Load, Store>::operator/=(ValueHandle e) { using op::operator/; return Store(*this / e, getBase(), {indices.begin(), indices.end()}); } +template <typename Load, typename Store> +OperationHandle TemplatedIndexedValue<Load, Store>::operator%=(ValueHandle e) { + using op::operator%; + return Store(*this % e, getBase(), {indices.begin(), indices.end()}); +} +template <typename Load, typename Store> +OperationHandle TemplatedIndexedValue<Load, Store>::operator^=(ValueHandle e) { + using op::operator^; + return Store(*this ^ e, getBase(), {indices.begin(), indices.end()}); +} + +/// Logical operator overloadings. +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator&&(ValueHandle e) { + using op::operator&&; + return static_cast<ValueHandle>(*this) && e; +} +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator||(ValueHandle e) { + using op::operator||; + return static_cast<ValueHandle>(*this) || e; +} + +/// Comparison operator overloadings. +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator==(ValueHandle e) { + using op::operator==; + return static_cast<ValueHandle>(*this) == e; +} +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator!=(ValueHandle e) { + using op::operator!=; + return static_cast<ValueHandle>(*this) != e; +} +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator<(ValueHandle e) { + using op::operator<; + return static_cast<ValueHandle>(*this) < e; +} +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator<=(ValueHandle e) { + using op::operator<=; + return static_cast<ValueHandle>(*this) <= e; +} +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator>(ValueHandle e) { + using op::operator>; + return static_cast<ValueHandle>(*this) > e; +} +template <typename Load, typename Store> +ValueHandle TemplatedIndexedValue<Load, Store>::operator>=(ValueHandle e) { + using op::operator>=; + return static_cast<ValueHandle>(*this) >= e; +} } // namespace edsc } // namespace mlir diff --git a/mlir/include/mlir/EDSC/Builders.h b/mlir/include/mlir/EDSC/Builders.h index 5309187..c907f2d 100644 --- a/mlir/include/mlir/EDSC/Builders.h +++ b/mlir/include/mlir/EDSC/Builders.h @@ -538,15 +538,13 @@ public: ValueHandle getBase() const { return base; } - /// Operator overloadings. + /// Arithmetic operator overloadings. ValueHandle operator+(ValueHandle e); ValueHandle operator-(ValueHandle e); ValueHandle operator*(ValueHandle e); ValueHandle operator/(ValueHandle e); - OperationHandle operator+=(ValueHandle e); - OperationHandle operator-=(ValueHandle e); - OperationHandle operator*=(ValueHandle e); - OperationHandle operator/=(ValueHandle e); + ValueHandle operator%(ValueHandle e); + ValueHandle operator^(ValueHandle e); ValueHandle operator+(TemplatedIndexedValue e) { return *this + static_cast<ValueHandle>(e); } @@ -559,6 +557,20 @@ public: ValueHandle operator/(TemplatedIndexedValue e) { return *this / static_cast<ValueHandle>(e); } + ValueHandle operator%(TemplatedIndexedValue e) { + return *this % static_cast<ValueHandle>(e); + } + ValueHandle operator^(TemplatedIndexedValue e) { + return *this ^ static_cast<ValueHandle>(e); + } + + /// Assignment-arithmetic operator overloadings. + OperationHandle operator+=(ValueHandle e); + OperationHandle operator-=(ValueHandle e); + OperationHandle operator*=(ValueHandle e); + OperationHandle operator/=(ValueHandle e); + OperationHandle operator%=(ValueHandle e); + OperationHandle operator^=(ValueHandle e); OperationHandle operator+=(TemplatedIndexedValue e) { return this->operator+=(static_cast<ValueHandle>(e)); } @@ -571,6 +583,48 @@ public: OperationHandle operator/=(TemplatedIndexedValue e) { return this->operator/=(static_cast<ValueHandle>(e)); } + OperationHandle operator%=(TemplatedIndexedValue e) { + return this->operator%=(static_cast<ValueHandle>(e)); + } + OperationHandle operator^=(TemplatedIndexedValue e) { + return this->operator^=(static_cast<ValueHandle>(e)); + } + + /// Logical operator overloadings. + ValueHandle operator&&(ValueHandle e); + ValueHandle operator||(ValueHandle e); + ValueHandle operator&&(TemplatedIndexedValue e) { + return *this && static_cast<ValueHandle>(e); + } + ValueHandle operator||(TemplatedIndexedValue e) { + return *this || static_cast<ValueHandle>(e); + } + + /// Comparison operator overloadings. + ValueHandle operator==(ValueHandle e); + ValueHandle operator!=(ValueHandle e); + ValueHandle operator<(ValueHandle e); + ValueHandle operator<=(ValueHandle e); + ValueHandle operator>(ValueHandle e); + ValueHandle operator>=(ValueHandle e); + ValueHandle operator==(TemplatedIndexedValue e) { + return *this == static_cast<ValueHandle>(e); + } + ValueHandle operator!=(TemplatedIndexedValue e) { + return *this != static_cast<ValueHandle>(e); + } + ValueHandle operator<(TemplatedIndexedValue e) { + return *this < static_cast<ValueHandle>(e); + } + ValueHandle operator<=(TemplatedIndexedValue e) { + return *this <= static_cast<ValueHandle>(e); + } + ValueHandle operator>(TemplatedIndexedValue e) { + return *this > static_cast<ValueHandle>(e); + } + ValueHandle operator>=(TemplatedIndexedValue e) { + return *this >= static_cast<ValueHandle>(e); + } private: TemplatedIndexedValue(ValueHandle base, ArrayRef<ValueHandle> indices) |
