New submission from Neal Norwitz:

>>> def fo():
...   if a:
...     if b:
...      if c:
...        print
... 
>>> dis.dis(fo)
  2           0 LOAD_GLOBAL              0 (a)
              3 POP_JUMP_IF_FALSE       28

  3           6 LOAD_GLOBAL              1 (b)
              9 POP_JUMP_IF_FALSE       28

  4          12 LOAD_GLOBAL              2 (c)
             15 POP_JUMP_IF_FALSE       25

  5          18 PRINT_NEWLINE       
             19 JUMP_ABSOLUTE           25
             22 JUMP_ABSOLUTE           28
        >>   25 JUMP_FORWARD             0 (to 28)
        >>   28 LOAD_CONST               0 (None)
             31 RETURN_VALUE        

The 2 JUMP_ABSOLUTEs should be optimized away since the code is equivalent to: 
if a and b and c: as in:

>>> dis.dis(fo)
  2           0 LOAD_GLOBAL              0 (a)
              3 POP_JUMP_IF_FALSE       22
              6 LOAD_GLOBAL              1 (b)
              9 POP_JUMP_IF_FALSE       22
             12 LOAD_GLOBAL              2 (c)
             15 POP_JUMP_IF_FALSE       22

  3          18 PRINT_NEWLINE       
             19 JUMP_FORWARD             0 (to 22)
        >>   22 LOAD_CONST               0 (None)
             25 RETURN_VALUE

----------
messages: 184245
nosy: Neal.Norwitz
priority: normal
severity: normal
status: open
title: missed peephole optimization
type: performance
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17430>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to