Description
In some cases, whole-stage codegen's subexpression elimination will do redundant subexpression evaluation. We should reduce it. For example, if we have two sub-exprs:
1. simpleUDF($"id")
2. functions.length(simpleUDF($"id"))
We should only evaluate `simpleUDF($"id")` once, i.e.
subExpr1 = simpleUDF($"id");
subExpr2 = functions.length(subExpr1);