Currently, Exprs in a fragment are scattered through the TPlanNode in a fragment. Expr is supposed to be shared by all threads but they are always accessed through thread-private state ExprContext. With multi-threading, an Expr in a fragment and its generated IR function should be shared among all instances of it.
As part of IMPALA-4080, all Expr in a fragment will be moved to query-wide state instead of having multiple copies of them in the exec nodes of each instances. In addition, moving Expr to query-wide state prevents the mistakes of baking in thread private states (e.g. ExprContext pointers) into the generated IR code for an Expr.