Handling assignments:
- The integrals_kinetic assignment is tricky since we only want to handle values in the sparsity pattern.
- - Correct iteration over non-zero values is preferable
+ - Correct iteration over non-zero values is preferable.
+
+Predicates:
+ LowerBound(index)
+ UpperBound(index)
+ IsKnown(conditional)
+ Require(conditional)
+ where conditionals are (expression {<,==,>} expression)
+
+Expressions:
+ Expressions are integer or floating point
+ IntegerExpressions are {Constant, a+b, a-b, a*b, IntegerArrayAccess[IntegerExpression]}
+ FloatingPointExpressions are {Constant, a+b, a-b, a*b, a/b, FloatingPointArrayAccess[IntegerExpression]}
+
+Dimensionality of Expressions:
+ All variables on the rhs of an expression determine a unique instance in which it is valid.
+
+Reduction operations:
+ Disjoint reduction, we remove an index.
+ Summation reduction, we sum over an index.
+
+ In disjoint reduction, we are removing an actual index.
+ In the summation reduction, we want to reduce over a derived index.
+
+Buffer allocation:
+ Buffers in our tree define explicit rhs indices.
+ We try to define explicit bounds and widths for the rhs indices.
+
+ Reductions explictly name stored values.
+ We look for IsKnowns conditions on size of the buffer.
+
+ For any buffer within some synthesized loop set
+ We need to determine the correct size.
+ Only iterative over approprate ranges.
+ Store the invertable index mapping.
+
+
+
+
+