SF patch #884022:  dynamic execution profiling vs opcode prediction
(Contributed by Andrew I MacIntyre.)

disables opcode prediction when dynamic execution
profiling is in effect, so the profiling counters at
the top of the main interpreter loop in eval_frame()
are updated for each opcode.
diff --git a/Python/ceval.c b/Python/ceval.c
index c6e0470..f2d79e7 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -645,9 +645,18 @@
 
 	A successful prediction saves a trip through the eval-loop including
 	its two unpredictable branches, the HASARG test and the switch-case.
+
+        If collecting opcode statistics, turn off prediction so that 
+	statistics are accurately maintained (the predictions bypass 
+	the opcode frequency counter updates).
 */
 
+#ifdef DYNAMIC_EXECUTION_PROFILE
+#define PREDICT(op)		if (0) goto PRED_##op
+#else
 #define PREDICT(op)		if (*next_instr == op) goto PRED_##op
+#endif
+
 #define PREDICTED(op)		PRED_##op: next_instr++
 #define PREDICTED_WITH_ARG(op)	PRED_##op: oparg = (next_instr[2]<<8) + \
 				next_instr[1]; next_instr += 3