Simplify affine binary op expression class hierarchy

- Drop sub-classing of affine binary op expressions.
- Drop affine expr op kind sub. Represent it as multiply by -1 and add. This
  will also be in line with the math form when we'll need to represent a system of
  linear equalities/inequalities: the negative number goes into the coefficient
  of an affine form. (For eg. x_1 + (-1)*x_2 + 3*x_3 + (-2) >= 0). The folding
  simplification will transparently deal with multiplying the -1 with any other
  constants. This also means we won't need to simplify a multiply expression
  like in x_1 + (-2)*x_2 to a subtract expression (x_1 - 2*x_2) for
  canonicalization/uniquing.
- When we print the IR, we will still pretty print to a subtract when possible.

PiperOrigin-RevId: 205298958
diff --git a/lib/IR/Builders.cpp b/lib/IR/Builders.cpp
index 3d7e023..dc5b8e2 100644
--- a/lib/IR/Builders.cpp
+++ b/lib/IR/Builders.cpp
@@ -121,27 +121,23 @@
 }
 
 AffineExpr *Builder::getAddExpr(AffineExpr *lhs, AffineExpr *rhs) {
-  return AffineAddExpr::get(lhs, rhs, context);
-}
-
-AffineExpr *Builder::getSubExpr(AffineExpr *lhs, AffineExpr *rhs) {
-  return AffineSubExpr::get(lhs, rhs, context);
+  return AffineBinaryOpExpr::get(AffineExpr::Kind::Add, lhs, rhs, context);
 }
 
 AffineExpr *Builder::getMulExpr(AffineExpr *lhs, AffineExpr *rhs) {
-  return AffineMulExpr::get(lhs, rhs, context);
+  return AffineBinaryOpExpr::get(AffineExpr::Kind::Mul, lhs, rhs, context);
 }
 
 AffineExpr *Builder::getModExpr(AffineExpr *lhs, AffineExpr *rhs) {
-  return AffineModExpr::get(lhs, rhs, context);
+  return AffineBinaryOpExpr::get(AffineExpr::Kind::Mod, lhs, rhs, context);
 }
 
 AffineExpr *Builder::getFloorDivExpr(AffineExpr *lhs, AffineExpr *rhs) {
-  return AffineFloorDivExpr::get(lhs, rhs, context);
+  return AffineBinaryOpExpr::get(AffineExpr::Kind::FloorDiv, lhs, rhs, context);
 }
 
 AffineExpr *Builder::getCeilDivExpr(AffineExpr *lhs, AffineExpr *rhs) {
-  return AffineCeilDivExpr::get(lhs, rhs, context);
+  return AffineBinaryOpExpr::get(AffineExpr::Kind::CeilDiv, lhs, rhs, context);
 }
 
 //===----------------------------------------------------------------------===//