| class  | RewriteAlgebraicSimplificationDynamic | Rule: Algebraic Simplifications. | 
| class  | RewriteAlgebraicSimplificationStatic | Rule: Algebraic Simplifications. | 
| class  | RewriteBlockSizeAndReblock | Rule: BlockSizeAndReblock. | 
| class  | RewriteCommonSubexpressionElimination | Rule: CommonSubexpressionElimination. | 
| class  | RewriteConstantFolding | Rule: Constant Folding. | 
| class  | RewriteElementwiseMultChainOptimization | Prerequisite: RewriteCommonSubexpressionElimination must run before this rule. | 
| class  | RewriteFederatedExecution |  | 
| class  | RewriteGPUSpecificOps |  | 
| class  | RewriteIndexingVectorization | Rule: Indexing vectorization. | 
| class  | RewriteInjectSparkPReadCheckpointing | Rule: BlockSizeAndReblock. | 
| class  | RewriteMatrixMultChainOptimization | Rule: Determine the optimal order of execution for a chain of
 matrix multiplications 
 
 Solution: Classic Dynamic Programming
 Approach: Currently, the approach based only on matrix dimensions
 Goal: To reduce the number of computations in the run-time
 (map-reduce) layer | 
| class  | RewriteMatrixMultChainOptimizationSparse | Rule: Determine the optimal order of execution for a chain of
 matrix multiplications 
 
 Solution: Classic Dynamic Programming
 Approach: Currently, the approach based only on matrix dimensions
 and sparsity estimates using the MNC sketch
 Goal: To reduce the number of computations in the run-time
 (map-reduce) layer | 
| class  | RewriteRemoveDanglingParentReferences | This rewrite is a general-purpose cleanup pass that removes any
 dangling parent references in one pass through the hop DAG. | 
| class  | RewriteRemovePersistentReadWrite | This rewrite is a custom rewrite for JMLC in order to replace all persistent reads
 and writes with transient reads and writes from the symbol table. | 
| class  | RewriteRemoveReadAfterWrite | Rule: RemoveReadAfterWrite. | 
| class  | RewriteRemoveUnnecessaryCasts | Rule: RemoveUnnecessaryCasts. | 
| class  | RewriteTransientWriteParentHandling | Rule: Eliminate for Transient Write DataHops to have no parents
 Solution: Move parent edges of Transient Write Hop to parent of
 its child 
 Reason: Transient Write not being a root messes up
 analysis for Lop's to Instruction translation (according to Amol) |