- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 33.3k
 
Open
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-JITtype-featureA feature request or enhancementA feature request or enhancement
Description
Proposal:
We should have a JIT constant pool and a JIT directive in the optimizer_bytecodes.c to promote certain values to constants. This would unlock significantly more future optimizations.
Steps needed:
- Add a constant pool to the executor object, so we can keep promoted constant alive. We already need this to unlock more constant propagation opportunities. The pool would be a 
PyListObjectliving in the vmdata field here https://github.com/python/cpython/blob/main/Include/internal/pycore_optimizer.h#L43 . - Introduce a new optimizer macro: 
PROMOTE_TO_CONST_POOLand associated functionpromote_to_const_pool(ctx, obj)inoptimizer_symbols.c. This macro will store any value it receives as a constant in the constant pool. This allows us to promote contants we see to the constant pool. This takes inspiration from RPython'shint(obj, promote=True) 
What optimizations does this unlock?
- More constant propagation: we can now constant propagate not just immortal stuff but non-immortal things as well.
 - Refcount removal. Anything in the the pool can use the cheaper 
_LOAD_CONST_INLINE_BORROW. Which will automatically benefit this work Eliminate redundant refcounting in the JIT #134584 and vice versa. Ie, we automatically make it cheaper to load and store these values! 
We should also perhaps explore promoting globals to pool constants. Though that's a little risky, since we don't want to hold large objects around longer than needed.
The first PR should implement the first two steps and optimization 1. Optimization 2 should be a separate PR.
Linked PRs
corona10 and chris-eiblSacul0457
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-JITtype-featureA feature request or enhancementA feature request or enhancement