]> granicus.if.org Git - python/commitdiff
Issue 2260: Small peephole optimization -- eliminate unnecessary POP_TOP /JUMP_FORWAR...
authorRaymond Hettinger <python@rcn.com>
Tue, 18 Nov 2008 00:07:10 +0000 (00:07 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 18 Nov 2008 00:07:10 +0000 (00:07 +0000)
Python/peephole.c

index b9b26fc0a70a5f8c1ac8e123da2483d0add4b40a..d31c89b86e9f1eb5bc795e0532863be4b3b98424 100644 (file)
@@ -430,6 +430,16 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
                                cumlc = 0;
                                break;
 
+                               /* Replace POP_TOP JUMP_FORWARD 1 POP_TOP 
+                                  with    NOP NOP NOP NOP POP_TOP.           */
+                       case POP_TOP:
+                               if (UNCONDITIONAL_JUMP(codestr[i+1]) &&
+                                       GETJUMPTGT(codestr, i+1) == i+5 &&
+                                       codestr[i+4] == POP_TOP &&
+                                       ISBASICBLOCK(blocks,i,4))
+                                               memset(codestr+i, NOP, 4);
+                               break;
+
                                /* Try to fold tuples of constants (includes a case for lists
                                   which are only used for "in" and "not in" tests).
                                   Skip over BUILD_SEQN 1 UNPACK_SEQN 1.