diff Python/peephole.c @ 49747:ed0dac26b396

Issue 2260: Small peephole optimization -- eliminate unnecessary POP_TOP /JUMP_FORWARD 1 pairs.
author Raymond Hettinger <python@rcn.com>
date Tue, 18 Nov 2008 00:07:10 +0000
parents 85b67fb5672b
children 643d8d4fc8eb
line wrap: on
line diff
--- a/Python/peephole.c	Mon Nov 17 22:55:16 2008 +0000
+++ b/Python/peephole.c	Tue Nov 18 00:07:10 2008 +0000
@@ -430,6 +430,16 @@
 				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.