Complete affine expr parsing support
- check for non-affine expressions
- handle negative numbers and negation of id's, expressions
- functions to check if a map is pure affine or semi-affine
- simplify/clean up affine map parsing code
- report more errors messages, more accurate error messages
PiperOrigin-RevId: 203773633
diff --git a/lib/IR/AffineMap.cpp b/lib/IR/AffineMap.cpp
index cba3094..ccfd108 100644
--- a/lib/IR/AffineMap.cpp
+++ b/lib/IR/AffineMap.cpp
@@ -16,6 +16,7 @@
// =============================================================================
#include "mlir/IR/AffineMap.h"
+#include "mlir/IR/AffineExpr.h"
#include "llvm/ADT/StringRef.h"
using namespace mlir;
@@ -24,3 +25,15 @@
AffineExpr *const *results)
: numDims(numDims), numSymbols(numSymbols), numResults(numResults),
results(results) {}
+
+AffineExpr *AffineAddExpr::simplify(AffineExpr *lhs, AffineExpr *rhs,
+ MLIRContext *context) {
+ AffineConstantExpr *l, *r;
+ if ((l = dyn_cast<AffineConstantExpr>(lhs)) &&
+ (r = dyn_cast<AffineConstantExpr>(rhs)))
+ return AffineConstantExpr::get(l->getValue() + r->getValue(), context);
+ return nullptr;
+ // TODO(someone): implement more simplification.
+}
+
+// TODO(bondhugula): implement simplify for remaining affine binary op expr's