@@ -2553,6 +2553,125 @@ def test_unoptimized_if_aliased(self):
25532553 ]
25542554 self .check (insts , insts )
25552555
2556+ def test_consume_no_inputs (self ):
2557+ insts = [
2558+ ("LOAD_FAST" , 0 , 1 ),
2559+ ("GET_LEN" , None , 2 ),
2560+ ("STORE_FAST" , 1 , 3 ),
2561+ ("STORE_FAST" , 2 , 4 ),
2562+ ]
2563+ self .check (insts , insts )
2564+
2565+ def test_consume_some_inputs_no_outputs (self ):
2566+ insts = [
2567+ ("LOAD_FAST" , 0 , 1 ),
2568+ ("GET_LEN" , None , 2 ),
2569+ ("LIST_APPEND" , 0 , 3 ),
2570+ ]
2571+ self .check (insts , insts )
2572+
2573+ def test_check_exc_match (self ):
2574+ insts = [
2575+ ("LOAD_FAST" , 0 , 1 ),
2576+ ("LOAD_FAST" , 1 , 2 ),
2577+ ("CHECK_EXC_MATCH" , None , 3 )
2578+ ]
2579+ expected = [
2580+ ("LOAD_FAST" , 0 , 1 ),
2581+ ("LOAD_FAST_BORROW" , 1 , 2 ),
2582+ ("CHECK_EXC_MATCH" , None , 3 )
2583+ ]
2584+ self .check (insts , expected )
2585+
2586+ def test_for_iter (self ):
2587+ insts = [
2588+ ("LOAD_FAST" , 0 , 1 ),
2589+ top := self .Label (),
2590+ ("FOR_ITER" , end := self .Label (), 2 ),
2591+ ("STORE_FAST" , 2 , 3 ),
2592+ ("JUMP" , top , 4 ),
2593+ end ,
2594+ ("END_FOR" , None , 5 ),
2595+ ("POP_TOP" , None , 6 ),
2596+ ("LOAD_CONST" , 0 , 7 ),
2597+ ("RETURN_VALUE" , None , 8 ),
2598+ ]
2599+ self .cfg_optimization_test (insts , insts , consts = [None ])
2600+
2601+ def test_load_attr (self ):
2602+ insts = [
2603+ ("LOAD_FAST" , 0 , 1 ),
2604+ ("LOAD_ATTR" , 0 , 2 ),
2605+ ]
2606+ expected = [
2607+ ("LOAD_FAST_BORROW" , 0 , 1 ),
2608+ ("LOAD_ATTR" , 0 , 2 ),
2609+ ]
2610+ self .check (insts , expected )
2611+
2612+ # Method call, leaves self on stack unconsumed
2613+ insts = [
2614+ ("LOAD_FAST" , 0 , 1 ),
2615+ ("LOAD_ATTR" , 1 , 2 ),
2616+ ]
2617+ expected = [
2618+ ("LOAD_FAST" , 0 , 1 ),
2619+ ("LOAD_ATTR" , 1 , 2 ),
2620+ ]
2621+ self .check (insts , expected )
2622+
2623+ def test_super_attr (self ):
2624+ insts = [
2625+ ("LOAD_FAST" , 0 , 1 ),
2626+ ("LOAD_FAST" , 1 , 2 ),
2627+ ("LOAD_FAST" , 2 , 3 ),
2628+ ("LOAD_SUPER_ATTR" , 0 , 4 ),
2629+ ]
2630+ expected = [
2631+ ("LOAD_FAST_BORROW" , 0 , 1 ),
2632+ ("LOAD_FAST_BORROW" , 1 , 2 ),
2633+ ("LOAD_FAST_BORROW" , 2 , 3 ),
2634+ ("LOAD_SUPER_ATTR" , 0 , 4 ),
2635+ ]
2636+ self .check (insts , expected )
2637+
2638+ # Method call, leaves self on stack unconsumed
2639+ insts = [
2640+ ("LOAD_FAST" , 0 , 1 ),
2641+ ("LOAD_FAST" , 1 , 2 ),
2642+ ("LOAD_FAST" , 2 , 3 ),
2643+ ("LOAD_SUPER_ATTR" , 1 , 4 ),
2644+ ]
2645+ expected = [
2646+ ("LOAD_FAST_BORROW" , 0 , 1 ),
2647+ ("LOAD_FAST_BORROW" , 1 , 2 ),
2648+ ("LOAD_FAST" , 2 , 3 ),
2649+ ("LOAD_SUPER_ATTR" , 1 , 4 ),
2650+ ]
2651+ self .check (insts , expected )
2652+
2653+ def test_send (self ):
2654+ insts = [
2655+ ("LOAD_FAST" , 0 , 1 ),
2656+ ("LOAD_FAST" , 1 , 2 ),
2657+ ("SEND" , end := self .Label (), 3 ),
2658+ ("LOAD_CONST" , 0 , 4 ),
2659+ ("RETURN_VALUE" , None , 5 ),
2660+ end ,
2661+ ("LOAD_CONST" , 0 , 6 ),
2662+ ("RETURN_VALUE" , None , 7 )
2663+ ]
2664+ expected = [
2665+ ("LOAD_FAST" , 0 , 1 ),
2666+ ("LOAD_FAST_BORROW" , 1 , 2 ),
2667+ ("SEND" , end := self .Label (), 3 ),
2668+ ("LOAD_CONST" , 0 , 4 ),
2669+ ("RETURN_VALUE" , None , 5 ),
2670+ end ,
2671+ ("LOAD_CONST" , 0 , 6 ),
2672+ ("RETURN_VALUE" , None , 7 )
2673+ ]
2674+ self .cfg_optimization_test (insts , expected , consts = [None ])
25562675
25572676
25582677
0 commit comments