Parsing support for affine maps and affine expressions

A recursive descent parser for affine maps/expressions with operator precedence and
associativity. (While on this, sketch out uniqui'ing functionality for affine maps
and affine binary op expressions (partly).)

PiperOrigin-RevId: 203222063
diff --git a/lib/IR/AffineMap.cpp b/lib/IR/AffineMap.cpp
index 8631751..cba3094 100644
--- a/lib/IR/AffineMap.cpp
+++ b/lib/IR/AffineMap.cpp
@@ -20,10 +20,7 @@
 
 using namespace mlir;
 
-// TODO(clattner):  make this ctor take an LLVMContext.  This will eventually
-// copy the elements into the context.
-AffineMap::AffineMap(unsigned dimCount, unsigned symbolCount,
-                     ArrayRef<AffineExpr *> exprs)
-  : numDims(dimCount), numSymbols(symbolCount), exprs(exprs) {
-    // TODO(bondhugula)
-}
+AffineMap::AffineMap(unsigned numDims, unsigned numSymbols, unsigned numResults,
+                     AffineExpr *const *results)
+    : numDims(numDims), numSymbols(numSymbols), numResults(numResults),
+      results(results) {}