Commit Graph

47 Commits

Author SHA1 Message Date
Dmitry Stogov
d07a2db592 Improve GCM to schedule floating nodes that depends only on constants
(e.g. COPY(CONST)) to the last common ancestor.

Previously these nodes went to the first block.
2023-02-15 15:18:42 +03:00
Dmitry Stogov
29da69cf25 Fix CASE_VAL scheduling (mark op2 as used constant). 2023-01-18 09:38:18 +03:00
Dmitry Stogov
6a4e239773 Create a sparate pass to remove unreachableble CFG blocks.
SCCP pass removes unreachable blocks before CFG construction.
In case of -O0 or -O1 pipeline (without SCCP) it's simpler and faster
to unlink unreachable CFG blocks once, then check for reachability
in almost any compilation pass.
-O2 pipeline (with SCCP) don't need this pass.
2022-11-29 20:02:07 +03:00
Dmitry Stogov
3f40e70ac9 Don't delay moving up 2022-11-24 17:05:56 +03:00
Dmitry Stogov
a137adfdf9 Separate ir_build_prev_refs(). It's necessary only for -O0 pipeline. 2022-11-24 12:55:16 +03:00
Dmitry Stogov
7fd1ccf48b Eliminte useless checks 2022-11-24 12:23:05 +03:00
Dmitry Stogov
6f8012756e Reuse ir_ctx.prev_ref if the schedule wasn't changed 2022-11-23 16:30:29 +03:00
Dmitry Stogov
b94f907907 Create ir_ctx.orev_ref[] array in ir_schedule() 2022-11-23 16:15:05 +03:00
Dmitry Stogov
c5220fdf8d evisit and improve ir_schedule() 2022-11-23 10:22:37 +03:00
Dmitry Stogov
93172a487d Add special case for functions with single Basic Block 2022-11-11 17:43:44 +03:00
Dmitry Stogov
406b08030d Revisit and optimize GCM implementation
Use two different queues to schedule early and late
2022-11-11 16:17:56 +03:00
Dmitry Stogov
27fe71c344 Improve CFG builder and reuse ctx->cfg_map for GCM 2022-11-10 22:45:12 +03:00
Dmitry Stogov
3535fd2fc4 Fix compilation warnings and signed/unsigned mess 2022-11-08 23:09:35 +03:00
Dmitry Stogov
cc73788981 Fix compilation warnings 2022-11-08 18:17:29 +03:00
Dmitry Stogov
cc56f12f13 Add LICENSE and copyright notices 2022-11-08 11:32:46 +03:00
Dmitry Stogov
ecb9719e8b Fix "long" PHI handling 2022-10-12 14:01:56 +03:00
Dmitry Stogov
c74cac2556 Fix support for "long" PHIs 2022-10-12 11:59:49 +03:00
Dmitry Stogov
23caf1e0d1 Fix incorrect starting operand number 2022-09-20 10:38:59 +03:00
Dmitry Stogov
367e47ac30 Support for preallocated stack (ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE in PHP VM) 2022-09-15 15:39:15 +03:00
Dmitry Stogov
ad59556d85 Add support for binding IR nodes to "external" spill slots (e.g. PHP VM stack slots) 2022-09-15 15:26:43 +03:00
Dmitry Stogov
a80fac2cab Add assertion if there are no common antecessor
(this is possible for code with multiple EMTRY-es)
2022-09-14 17:30:11 +03:00
Dmitry Stogov
11db21a98c Allow SCCP to grow use_lists (through reallocation) 2022-09-14 15:14:18 +03:00
Dmitry Stogov
443ca46958 Fix GCM.
PHI nodes must be pinned together with CONTROL nodes, before any other DATA nodes.
2022-09-07 17:14:22 +03:00
Dmitry Stogov
76028e8855 Fix compilation warnings 2022-09-05 22:43:27 +03:00
Dmitry Stogov
e0e5838a4b GCM optimization 2022-09-05 21:26:27 +03:00
Dmitry Stogov
d29a51a979 Remove unused "flags" 2022-09-01 13:04:54 +03:00
Dmitry Stogov
dd271af057 Speedup local scheduling by loop unrolling 2022-09-01 12:48:10 +03:00
Dmitry Stogov
6329e48b28 Use malloc() instead of calloc() 2022-08-11 19:56:42 +03:00
Dmitry Stogov
0637bae796 Avoid useless reallocation 2022-08-11 15:53:47 +03:00
Dmitry Stogov
36a5bdaf43 Improve support for fixed prologue/epilogue 2022-08-11 13:32:44 +03:00
Dmitry Stogov
cb4ae29a1b Optimize ir_schedule() 2022-08-10 23:40:48 +03:00
Dmitry Stogov
7f50fe93b1 Fix incorrect sheduling 2022-08-09 13:06:57 +03:00
Dmitry Stogov
999d7d6aa9 Fix loop termination condition 2022-07-20 18:16:18 +03:00
Dmitry Stogov
fe333adfa1 Add ability to force fix/restore some predefied registers 2022-06-23 22:39:00 +03:00
Dmitry Stogov
c9fa87e6c4 Support for fastcall caling convention.
(this should be reimplemented through function prototypes)
2022-06-23 13:14:30 +03:00
Dmitry Stogov
ef3ffff81b Fix CALL/1 copying. Fallback to CALL+RETURN when we can't generate code for TAILCALL. 2022-06-22 17:57:31 +03:00
Dmitry Stogov
082bcf89c9 Use ir_ctx.fixed_regset to limit available registers 2022-06-21 16:13:14 +03:00
Dmitry Stogov
5ef1e97261 Better support for unreachable basic blocks 2022-06-20 16:34:44 +03:00
Dmitry Stogov
ac5c3981e5 Allow LOOP_BEGIN to have multiple input back-edges 2022-06-16 12:31:23 +03:00
Dmitry Stogov
ab220de623 Fitsr and last instructions of BB and leading PARAM, PHI, PI, VAR instructions don't need to be scheduled. 2022-05-25 09:43:53 +03:00
Dmitry Stogov
463002107a Rename "gcm_blocks" into "cfg_map" 2022-05-25 09:33:47 +03:00
Dmitry Stogov
87e9780a5b Fixed handling of constant references 2022-05-25 09:30:26 +03:00
Dmitry Stogov
58b67fec18 Topological sort of nodes in each basic block 2022-05-24 18:04:38 +03:00
Dmitry Stogov
04667faf22 Reorder blocks according to branch probability 2022-05-24 12:47:39 +03:00
Dmitry Stogov
2b9e793b4e Add debug options 2022-04-27 14:47:52 +03:00
Dmitry Stogov
6b60d8fba9 Code generation for VLOAD and VSTORE 2022-04-19 22:35:29 +03:00
Dmitry Stogov
2937993190 Initial import 2022-04-06 00:19:23 +03:00