Skip to content

Commit db7a773

Browse files
committed
Add more hints for register allocator
1 parent c774619 commit db7a773

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

ext/opcache/jit/zend_jit.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,27 @@ static int zend_jit_compute_liveness(const zend_op_array *op_array, zend_ssa *ss
13671367
zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use);
13681368
}
13691369
break;
1370+
case ZEND_SUB:
1371+
case ZEND_ADD:
1372+
case ZEND_MUL:
1373+
case ZEND_BW_OR:
1374+
case ZEND_BW_AND:
1375+
case ZEND_BW_XOR:
1376+
if (i == ssa->ops[line].result_def) {
1377+
if (ssa->ops[line].op1_use >= 0 &&
1378+
intervals[ssa->ops[line].op1_use] &&
1379+
ssa->ops[line].op1_use_chain < 0 &&
1380+
!ssa->vars[ssa->ops[line].op1_use].phi_use_chain) {
1381+
zend_jit_add_hint(intervals, i, ssa->ops[line].op1_use);
1382+
} else if (opline->opcode != ZEND_SUB &&
1383+
ssa->ops[line].op2_use >= 0 &&
1384+
intervals[ssa->ops[line].op2_use] &&
1385+
ssa->ops[line].op2_use_chain < 0 &&
1386+
!ssa->vars[ssa->ops[line].op2_use].phi_use_chain) {
1387+
zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use);
1388+
}
1389+
}
1390+
break;
13701391
}
13711392
}
13721393
}

ext/opcache/jit/zend_jit_trace.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2643,6 +2643,27 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
26432643
zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use);
26442644
}
26452645
break;
2646+
case ZEND_SUB:
2647+
case ZEND_ADD:
2648+
case ZEND_MUL:
2649+
case ZEND_BW_OR:
2650+
case ZEND_BW_AND:
2651+
case ZEND_BW_XOR:
2652+
if (i == ssa->ops[line].result_def) {
2653+
if (ssa->ops[line].op1_use >= 0 &&
2654+
intervals[ssa->ops[line].op1_use] &&
2655+
ssa->ops[line].op1_use_chain < 0 &&
2656+
!ssa->vars[ssa->ops[line].op1_use].phi_use_chain) {
2657+
zend_jit_add_hint(intervals, i, ssa->ops[line].op1_use);
2658+
} else if (opline->opcode != ZEND_SUB &&
2659+
ssa->ops[line].op2_use >= 0 &&
2660+
intervals[ssa->ops[line].op2_use] &&
2661+
ssa->ops[line].op2_use_chain < 0 &&
2662+
!ssa->vars[ssa->ops[line].op2_use].phi_use_chain) {
2663+
zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use);
2664+
}
2665+
}
2666+
break;
26462667
}
26472668
}
26482669
}

0 commit comments

Comments
 (0)