Issue 32344: Explore whether peephole.c tuple of constants folding can be an AST transformation (original) (raw)

Can the peephole optimizer's fold_tuple_on_constants() be moved to ast_opt?

It looks to me like there is sufficient information in the tree:

import ast print(ast.dump(ast.parse('c = (50+1, 60+2)')))

Module(body=[Assign(targets=[Name(id='c', ctx=Store())], value=Tuple(elts=[BinOp(left=Num(n=50), op=Add(), right=Num(n=1)), BinOp(left=Num(n=60), op=Add(), right=Num(n=2))], ctx=Load()))], docstring=None) '''

Tuples represented in AST already are optimized at AST level. But there are tuples created at compilation stage (see the code emitting BUILD_TUPLE). Inada's PR 4879 simplifies the peephole optimizer.

I tried to move this optimization at the compiler level, but it is more complex change. Making this change can have additional advantages, but is just more complex. I think at end all remaining peephole optimizations will be moved to the compiler, so that it will generate already optimized code. Many optimizations had already moved, and I have yet few unfinished patches.