[Python-ideas] Exposing flat bytecode representation to optimizers

Yury Selivanov yselivanov.ml at gmail.com
Fri Feb 5 17:26:02 EST 2016



On 2016-02-05 3:35 PM, Serhiy Storchaka wrote:
>>
>> I don't think we need to expose the intermediate representation any 
>> farther along than the `PyCode_Optimize` step.[^4] Just moving the 
>> optimize one step earlier in the chain solves more than enough to be 
>> worth it.
>
> LGTM. I did have the same idea when added specialized 8-bit opcodes.

Agree.

>
> Some optimization (like constant folding) it is worth to move yet one 
> step earlier, to AST.
>
> Other idea - instead of EXTENDED_ARG have two sets of instructions: 
> short 16-bit with 8-bit arg, and long 32-bit with 24-bit arg. For 
> simplicity initially only long instructions are emitted (if it makes 
> sense). After optimization the code is packed using short instructions 
> if possible (now we have all needed information and can do this in one 
> pass). At the same time NOPs are removed. For later stages we easy can 
> unpack the code back to long form. 

I also had this idea (don't know if it's good or not):

1. have 16 bits per opcode
2. first 8 bits encode the opcode number
3. next 7 bits encode the arg (most args don't need more than 7 bits 
anyways)
4. if the 16th bit is 1 then the next opcode is the EXTENDED_ARG

We can then encode EXTENDED_ARG to follow the same format -- first 15 
bits are for the arg, the last one is to add one more EXTENDED_ARG.

Yury


More information about the Python-ideas mailing list