Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3dfd53b

Browse files
committed
Add "if (x != NULL) continue;" (or similar for err==0) before the
break to most cases, as suggested by Tim Peters. This gives another 8-10% speedup.
1 parent 04f2b45 commit 3dfd53b

1 file changed

Lines changed: 60 additions & 18 deletions

File tree

Python/ceval.c

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -649,14 +649,14 @@ eval_code2(co, globals, locals,
649649
case POP_TOP:
650650
v = POP();
651651
DECREF(v);
652-
break;
652+
continue;
653653

654654
case ROT_TWO:
655655
v = POP();
656656
w = POP();
657657
PUSH(v);
658658
PUSH(w);
659-
break;
659+
continue;
660660

661661
case ROT_THREE:
662662
v = POP();
@@ -665,47 +665,52 @@ eval_code2(co, globals, locals,
665665
PUSH(v);
666666
PUSH(x);
667667
PUSH(w);
668-
break;
668+
continue;
669669

670670
case DUP_TOP:
671671
v = TOP();
672672
INCREF(v);
673673
PUSH(v);
674-
break;
674+
continue;
675675

676676
case UNARY_POSITIVE:
677677
v = POP();
678678
x = pos(v);
679679
DECREF(v);
680680
PUSH(x);
681+
if (x != NULL) continue;
681682
break;
682683

683684
case UNARY_NEGATIVE:
684685
v = POP();
685686
x = neg(v);
686687
DECREF(v);
687688
PUSH(x);
689+
if (x != NULL) continue;
688690
break;
689691

690692
case UNARY_NOT:
691693
v = POP();
692694
x = not(v);
693695
DECREF(v);
694696
PUSH(x);
697+
if (x != NULL) continue;
695698
break;
696699

697700
case UNARY_CONVERT:
698701
v = POP();
699702
x = reprobject(v);
700703
DECREF(v);
701704
PUSH(x);
705+
if (x != NULL) continue;
702706
break;
703707

704708
case UNARY_INVERT:
705709
v = POP();
706710
x = invert(v);
707711
DECREF(v);
708712
PUSH(x);
713+
if (x != NULL) continue;
709714
break;
710715

711716
case BINARY_POWER:
@@ -715,6 +720,7 @@ eval_code2(co, globals, locals,
715720
DECREF(v);
716721
DECREF(w);
717722
PUSH(x);
723+
if (x != NULL) continue;
718724
break;
719725

720726
case BINARY_MULTIPLY:
@@ -724,6 +730,7 @@ eval_code2(co, globals, locals,
724730
DECREF(v);
725731
DECREF(w);
726732
PUSH(x);
733+
if (x != NULL) continue;
727734
break;
728735

729736
case BINARY_DIVIDE:
@@ -733,6 +740,7 @@ eval_code2(co, globals, locals,
733740
DECREF(v);
734741
DECREF(w);
735742
PUSH(x);
743+
if (x != NULL) continue;
736744
break;
737745

738746
case BINARY_MODULO:
@@ -742,6 +750,7 @@ eval_code2(co, globals, locals,
742750
DECREF(v);
743751
DECREF(w);
744752
PUSH(x);
753+
if (x != NULL) continue;
745754
break;
746755

747756
case BINARY_ADD:
@@ -751,6 +760,7 @@ eval_code2(co, globals, locals,
751760
DECREF(v);
752761
DECREF(w);
753762
PUSH(x);
763+
if (x != NULL) continue;
754764
break;
755765

756766
case BINARY_SUBTRACT:
@@ -760,6 +770,7 @@ eval_code2(co, globals, locals,
760770
DECREF(v);
761771
DECREF(w);
762772
PUSH(x);
773+
if (x != NULL) continue;
763774
break;
764775

765776
case BINARY_SUBSCR:
@@ -769,6 +780,7 @@ eval_code2(co, globals, locals,
769780
DECREF(v);
770781
DECREF(w);
771782
PUSH(x);
783+
if (x != NULL) continue;
772784
break;
773785

774786
case BINARY_LSHIFT:
@@ -778,6 +790,7 @@ eval_code2(co, globals, locals,
778790
DECREF(v);
779791
DECREF(w);
780792
PUSH(x);
793+
if (x != NULL) continue;
781794
break;
782795

783796
case BINARY_RSHIFT:
@@ -787,6 +800,7 @@ eval_code2(co, globals, locals,
787800
DECREF(v);
788801
DECREF(w);
789802
PUSH(x);
803+
if (x != NULL) continue;
790804
break;
791805

792806
case BINARY_AND:
@@ -796,6 +810,7 @@ eval_code2(co, globals, locals,
796810
DECREF(v);
797811
DECREF(w);
798812
PUSH(x);
813+
if (x != NULL) continue;
799814
break;
800815

801816
case BINARY_XOR:
@@ -805,6 +820,7 @@ eval_code2(co, globals, locals,
805820
DECREF(v);
806821
DECREF(w);
807822
PUSH(x);
823+
if (x != NULL) continue;
808824
break;
809825

810826
case BINARY_OR:
@@ -814,6 +830,7 @@ eval_code2(co, globals, locals,
814830
DECREF(v);
815831
DECREF(w);
816832
PUSH(x);
833+
if (x != NULL) continue;
817834
break;
818835

819836
case SLICE+0:
@@ -834,6 +851,7 @@ eval_code2(co, globals, locals,
834851
XDECREF(v);
835852
XDECREF(w);
836853
PUSH(x);
854+
if (x != NULL) continue;
837855
break;
838856

839857
case STORE_SLICE+0:
@@ -855,6 +873,7 @@ eval_code2(co, globals, locals,
855873
DECREF(u);
856874
XDECREF(v);
857875
XDECREF(w);
876+
if (err == 0) continue;
858877
break;
859878

860879
case DELETE_SLICE+0:
@@ -875,6 +894,7 @@ eval_code2(co, globals, locals,
875894
DECREF(u);
876895
XDECREF(v);
877896
XDECREF(w);
897+
if (err == 0) continue;
878898
break;
879899

880900
case STORE_SUBSCR:
@@ -886,6 +906,7 @@ eval_code2(co, globals, locals,
886906
DECREF(u);
887907
DECREF(v);
888908
DECREF(w);
909+
if (err == 0) continue;
889910
break;
890911

891912
case DELETE_SUBSCR:
@@ -895,6 +916,7 @@ eval_code2(co, globals, locals,
895916
err = assign_subscript(v, w, (object *)NULL);
896917
DECREF(v);
897918
DECREF(w);
919+
if (err == 0) continue;
898920
break;
899921

900922
case PRINT_EXPR:
@@ -929,6 +951,7 @@ eval_code2(co, globals, locals,
929951
softspace(w, 0);
930952
}
931953
DECREF(v);
954+
if (err == 0) continue;
932955
break;
933956

934957
case PRINT_NEWLINE:
@@ -1294,6 +1317,7 @@ eval_code2(co, globals, locals,
12941317
#endif
12951318
INCREF(x);
12961319
PUSH(x);
1320+
if (x != NULL) continue;
12971321
break;
12981322

12991323
case STORE_FAST:
@@ -1307,7 +1331,7 @@ eval_code2(co, globals, locals,
13071331
}
13081332
#endif
13091333
SETLOCAL(oparg, v);
1310-
break;
1334+
continue;
13111335

13121336
case DELETE_FAST:
13131337
#ifdef SUPPORT_OBSOLETE_ACCESS
@@ -1325,7 +1349,7 @@ eval_code2(co, globals, locals,
13251349
}
13261350
#endif
13271351
SETLOCAL(oparg, NULL);
1328-
break;
1352+
continue;
13291353

13301354
case BUILD_TUPLE:
13311355
x = newtupleobject(oparg);
@@ -1335,6 +1359,7 @@ eval_code2(co, globals, locals,
13351359
SETTUPLEITEM(x, oparg, w);
13361360
}
13371361
PUSH(x);
1362+
continue;
13381363
}
13391364
break;
13401365

@@ -1348,12 +1373,14 @@ eval_code2(co, globals, locals,
13481373
break;
13491374
}
13501375
PUSH(x);
1376+
continue;
13511377
}
13521378
break;
13531379

13541380
case BUILD_MAP:
13551381
x = newdictobject();
13561382
PUSH(x);
1383+
if (x != NULL) continue;
13571384
break;
13581385

13591386
case LOAD_ATTR:
@@ -1362,6 +1389,7 @@ eval_code2(co, globals, locals,
13621389
x = getattro(v, w);
13631390
DECREF(v);
13641391
PUSH(x);
1392+
if (x != NULL) continue;
13651393
break;
13661394

13671395
case COMPARE_OP:
@@ -1371,6 +1399,7 @@ eval_code2(co, globals, locals,
13711399
DECREF(v);
13721400
DECREF(w);
13731401
PUSH(x);
1402+
if (x != NULL) continue;
13741403
break;
13751404

13761405
case IMPORT_NAME:
@@ -1405,6 +1434,7 @@ eval_code2(co, globals, locals,
14051434
x = call_object(x, w);
14061435
DECREF(w);
14071436
PUSH(x);
1437+
if (x != NULL) continue;
14081438
break;
14091439

14101440
case IMPORT_FROM:
@@ -1417,6 +1447,7 @@ eval_code2(co, globals, locals,
14171447
}
14181448
err = import_from(x, v, w);
14191449
locals_2_fast(f, 0);
1450+
if (err == 0) continue;
14201451
break;
14211452

14221453
#ifdef SUPPORT_OBSOLETE_ACCESS
@@ -1433,27 +1464,33 @@ eval_code2(co, globals, locals,
14331464

14341465
case JUMP_FORWARD:
14351466
JUMPBY(oparg);
1436-
break;
1467+
continue;
14371468

14381469
case JUMP_IF_FALSE:
14391470
err = testbool(TOP());
14401471
if (err > 0)
14411472
err = 0;
14421473
else if (err == 0)
14431474
JUMPBY(oparg);
1444-
break;
1475+
else
1476+
break;
1477+
continue;
14451478

14461479
case JUMP_IF_TRUE:
14471480
err = testbool(TOP());
14481481
if (err > 0) {
14491482
err = 0;
14501483
JUMPBY(oparg);
14511484
}
1452-
break;
1485+
else if (err == 0)
1486+
;
1487+
else
1488+
break;
1489+
continue;
14531490

14541491
case JUMP_ABSOLUTE:
14551492
JUMPTO(oparg);
1456-
break;
1493+
continue;
14571494

14581495
case FOR_LOOP:
14591496
/* for v in s: ...
@@ -1470,6 +1507,7 @@ eval_code2(co, globals, locals,
14701507
PUSH(x);
14711508
DECREF(w);
14721509
PUSH(u);
1510+
if (x != NULL) continue;
14731511
}
14741512
else {
14751513
DECREF(v);
@@ -1478,8 +1516,10 @@ eval_code2(co, globals, locals,
14781516
but also an error: */
14791517
if (err_occurred())
14801518
why = WHY_EXCEPTION;
1481-
else
1519+
else {
14821520
JUMPBY(oparg);
1521+
continue;
1522+
}
14831523
}
14841524
break;
14851525

@@ -1488,20 +1528,20 @@ eval_code2(co, globals, locals,
14881528
case SETUP_FINALLY:
14891529
setup_block(f, opcode, INSTR_OFFSET() + oparg,
14901530
STACK_LEVEL());
1491-
break;
1531+
continue;
14921532

14931533
case SET_LINENO:
14941534
#ifdef LLTRACE
14951535
if (lltrace)
14961536
printf("--- %s:%d \n", filename, oparg);
14971537
#endif
14981538
f->f_lineno = oparg;
1499-
if (f->f_trace != NULL) {
1500-
/* Trace each line of code reached */
1501-
f->f_lasti = INSTR_OFFSET();
1502-
err = call_trace(&f->f_trace, &f->f_trace,
1503-
f, "line", None);
1504-
}
1539+
if (f->f_trace == NULL)
1540+
continue;
1541+
/* Trace each line of code reached */
1542+
f->f_lasti = INSTR_OFFSET();
1543+
err = call_trace(&f->f_trace, &f->f_trace,
1544+
f, "line", None);
15051545
break;
15061546

15071547
case CALL_FUNCTION:
@@ -1619,6 +1659,7 @@ eval_code2(co, globals, locals,
16191659
DECREF(w);
16201660
}
16211661
PUSH(x);
1662+
if (x != NULL) continue;
16221663
break;
16231664
}
16241665

@@ -1656,6 +1697,7 @@ eval_code2(co, globals, locals,
16561697
DECREF(v);
16571698
XDECREF(w);
16581699
PUSH(x);
1700+
if (x != NULL) continue;
16591701
break;
16601702

16611703

0 commit comments

Comments
 (0)