Expand description

Canonicalizes MFPs, e.g., performs CSE on the scalar expressions, eliminates identity MFPs.

Also calls canonicalize_predicates through fusion::filter.

This transform takes a sequence of Maps, Filters, and Projects and canonicalizes it to a sequence like this: | Map | Filter | Project

As part of canonicalizing, this transform looks at the Map-Filter-Project subsequence and identifies common ScalarExpr expressions across and within expressions that are arguments to the Map-Filter-Project. It reforms the Map-Filter-Project subsequence to build each distinct expression at most once and to re-use expressions instead of re-evaluating them.

The re-use policy at the moment is severe and re-uses everything. It may be worth considering relations of this if it results in more busywork and less efficiency, but the wins can be substantial when expressions re-use complex subexpressions.


Canonicalizes MFPs and performs common sub-expression elimination.