File tree Expand file tree Collapse file tree 2 files changed +16
-2
lines changed Expand file tree Collapse file tree 2 files changed +16
-2
lines changed Original file line number Diff line number Diff line change @@ -964,7 +964,7 @@ static zend_lifetime_interval *zend_jit_sort_intervals(zend_lifetime_interval **
964
964
if (ival ) {
965
965
if ((ival -> range .start > last -> range .start ) ||
966
966
(ival -> range .start == last -> range .start &&
967
- ((!ival -> hint && last -> hint ) ||
967
+ ((!ival -> hint && last -> hint && last -> hint != ival ) ||
968
968
ival -> range .end > last -> range .end ))) {
969
969
last -> list_next = ival ;
970
970
last = ival ;
@@ -979,7 +979,7 @@ static zend_lifetime_interval *zend_jit_sort_intervals(zend_lifetime_interval **
979
979
break ;
980
980
} else if ((ival -> range .start < (* p )-> range .start ) ||
981
981
(ival -> range .start == (* p )-> range .start &&
982
- ((ival -> hint && !(* p )-> hint ) ||
982
+ ((ival -> hint && !(* p )-> hint && ival -> hint != * p ) ||
983
983
ival -> range .end < (* p )-> range .end ))) {
984
984
ival -> list_next = * p ;
985
985
* p = ival ;
Original file line number Diff line number Diff line change @@ -2641,12 +2641,26 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
2641
2641
intervals [ssa -> ops [line ].op1_use ] &&
2642
2642
ssa -> ops [line ].op1_use_chain < 0 &&
2643
2643
!ssa -> vars [ssa -> ops [line ].op1_use ].phi_use_chain ) {
2644
+
2645
+ zend_ssa_phi * phi = ssa -> vars [ssa -> ops [line ].op1_use ].definition_phi ;
2646
+ if (phi &&
2647
+ intervals [phi -> sources [1 ]] &&
2648
+ intervals [phi -> sources [1 ]]-> hint == intervals [ssa -> ops [line ].op1_use ]) {
2649
+ break ;
2650
+ }
2644
2651
zend_jit_add_hint (intervals , i , ssa -> ops [line ].op1_use );
2645
2652
} else if (opline -> opcode != ZEND_SUB &&
2646
2653
ssa -> ops [line ].op2_use >= 0 &&
2647
2654
intervals [ssa -> ops [line ].op2_use ] &&
2648
2655
ssa -> ops [line ].op2_use_chain < 0 &&
2649
2656
!ssa -> vars [ssa -> ops [line ].op2_use ].phi_use_chain ) {
2657
+
2658
+ zend_ssa_phi * phi = ssa -> vars [ssa -> ops [line ].op2_use ].definition_phi ;
2659
+ if (phi &&
2660
+ intervals [phi -> sources [1 ]] &&
2661
+ intervals [phi -> sources [1 ]]-> hint == intervals [ssa -> ops [line ].op2_use ]) {
2662
+ break ;
2663
+ }
2650
2664
zend_jit_add_hint (intervals , i , ssa -> ops [line ].op2_use );
2651
2665
}
2652
2666
}
You can’t perform that action at this time.
0 commit comments