Commit Graph

487 Commits

Author SHA1 Message Date
Dmitry Stogov
b56f1f5298 Refactor CFG construction algorithm to mark all BB starts in two passes.
First we perform a backwad DFS search from "stop" nodes. This pass may
leak some CFG paths ended by infinite loops. To support these paths we
record their possible roots and perform forward DFS search starting from
them.
2022-11-11 10:25:59 +03:00
Dmitry Stogov
47ddea00ac Use better conditions 2022-11-11 02:56:16 +03:00
Dmitry Stogov
a4b09dd3ce Improve CFG builder 2022-11-11 00:19:17 +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
78cc14aca9 Fix ir_worklist_clear() 2022-11-10 22:44:29 +03:00
Dmitry Stogov
2e7f567feb Add a reference to PHP development branch 2022-11-10 13:24:17 +03:00
Dmitry Stogov
02f8b2508f Add ir_unique_const_addr() to allow external hashing 2022-11-10 00:24:33 +03:00
Dmitry Stogov
17c603eeed CFG construction optimization 2022-11-09 21:56:31 +03:00
Dmitry Stogov
c8dc4e9e74 Move ir_input_edges_count(phi) out of the loop, because all PHIs inherit their arity from MERGE/LOOP_BEGIN 2022-11-09 21:54:01 +03:00
Dmitry Stogov
889f7741d4 Reorder control instruction according to their kind
(BB_START, BB_END, BB_TERM)
2022-11-09 21:52:08 +03:00
Dmitry Stogov
142cdb4b8b SCCP cleanup and optimization 2022-11-09 13:24:37 +03:00
Dmitry Stogov
f484b5d16b micro-optimization 2022-11-09 13:23:30 +03:00
Dmitry Stogov
6507758530 Use deines instead of magic constants 2022-11-09 13:13:15 +03:00
Dmitry Stogov
8660c3cd8b micro-optimization 2022-11-09 09:12:16 +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
bac5fc340a typo 2022-11-08 16:24:53 +03:00
Dmitry Stogov
582c62b83b Verify consistecy of use_lists 2022-11-08 16:08:31 +03:00
Dmitry Stogov
4c536aae20 Extend SCCP to perform Dead Load Elimination 2022-11-08 15:39:00 +03:00
Dmitry Stogov
551ea4d2a0 Fix incorrect RSTORE flags 2022-11-08 15:25:01 +03:00
Dmitry Stogov
37dececa71 Add more tests (8 tests ara failed on 32-bit x86) 2022-11-08 11:56:22 +03:00
Dmitry Stogov
cc56f12f13 Add LICENSE and copyright notices 2022-11-08 11:32:46 +03:00
Dmitry Stogov
2ff0617db6 Perform iterative folding and DCE as a final pass of SCCP 2022-11-08 00:41:08 +03:00
Dmitry Stogov
5ba4050248 cleanup SCCP 2022-11-08 00:37:28 +03:00
Dmitry Stogov
ef6b6c3e26 Prevent CSE for (ADD/SUB/MUL)_OV 2022-11-03 15:58:51 +03:00
Dmitry Stogov
56c22a205f Constant folding for ADD_OV/SUB_OV 2022-11-03 14:30:49 +03:00
Dmitry Stogov
22385c1528 Allocate and reuse spill slots using simple linear-scan (without holes) 2022-11-02 21:53:05 +03:00
Dmitry Stogov
0a5bb4a571 Better condition 2022-11-02 21:28:56 +03:00
Dmitry Stogov
802ec945ad Reorder conditions for the most common case 2022-11-02 16:27:26 +03:00
Dmitry Stogov
364669a0a1 Add/fix comments 2022-11-02 16:27:16 +03:00
Dmitry Stogov
d619efa0ad Add support for ENDBR 2022-10-27 12:58:04 +03:00
Dmitry Stogov
66330273b1 Add "endbr" instruction 2022-10-27 11:13:50 +03:00
Dmitry Stogov
3af9e1a062 Move some common code into ir_emit.c 2022-10-26 22:52:19 +03:00
Dmitry Stogov
1b84570aa3 Intoduce ir_emit.c that shuould keep common part for different targets 2022-10-26 22:06:07 +03:00
Dmitry Stogov
62c981a091 remove hardcoded dependencies 2022-10-26 21:26:24 +03:00
Dmitry Stogov
74debb0bf4 Add "ir_load.c" to allow build without llk.php and initial multi-platform support 2022-10-26 19:52:14 +03:00
Dmitry Stogov
95e6cafe7c cleanup 2022-10-26 16:06:16 +03:00
Dmitry Stogov
9b7835a05e Use ir_emit_exitgroup() helper API instead of IR_EXITGROUP node 2022-10-26 15:46:59 +03:00
Dmitry Stogov
2dea40bfab Add API to patch native code 2022-10-26 13:44:44 +03:00
Dmitry Stogov
edd7bc7101 Access ctx->rules[] trough inline function with assertion
Fix incorrect accesses
2022-10-26 12:49:34 +03:00
Dmitry Stogov
b99d98979f Limit CMP+GUARD fusing 2022-10-25 22:09:32 +03:00
Dmitry Stogov
006bee10c7 Add checks for constant references before checking the corresponding rule 2022-10-25 20:36:22 +03:00
Dmitry Stogov
4b114914dc Prevent register clobbering 2022-10-25 12:24:05 +03:00
Dmitry Stogov
ba90e2825e SNAPSHOT data shouldn't be in registers 2022-10-25 12:22:49 +03:00
Dmitry Stogov
265ebc1000 Fix two LSRA edge cases 2022-10-24 21:55:59 +03:00
Dmitry Stogov
9f472c1c91 Add support for deoptimization and binding to multiple slots 2022-10-21 17:16:25 +03:00
Dmitry Stogov
6667b7efae Fix register allocation (one of operands MUST be in a register) 2022-10-21 12:02:31 +03:00
Dmitry Stogov
22cd9265d3 Check if the register is necessary at all 2022-10-18 22:02:09 +03:00
Dmitry Stogov
1dcfe127e1 Allow save/load "null" references 2022-10-18 15:52:25 +03:00
Dmitry Stogov
3d175e1576 Fix fuse load 2022-10-18 13:53:00 +03:00