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