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
dde8309108
Use reference to previous instruction instead of its length
2022-11-18 13:59:49 +03:00
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
17c603eeed
CFG construction optimization
2022-11-09 21:56:31 +03:00
Dmitry Stogov
3535fd2fc4
Fix compilation warnings and signed/unsigned mess
2022-11-08 23:09:35 +03:00
Dmitry Stogov
cc56f12f13
Add LICENSE and copyright notices
2022-11-08 11:32:46 +03:00
Dmitry Stogov
d2a0347b21
Merge basic blocks by removing connected END to BEGIN nodes
2022-10-05 16:29:49 +03:00
Dmitry Stogov
dce017f0ed
Replace calloc() by malloc()
2022-09-15 11:57:01 +03:00
Dmitry Stogov
b344d2ee0f
Remove useless memset()
2022-09-15 11:24:50 +03:00
Dmitry Stogov
96234f5257
Take into account ENTRY nodes, but prefer paths from START
2022-09-14 23:59:54 +03:00
Dmitry Stogov
8fd8913fcc
Use loop only for MERGE and LOOP_BEGIN
2022-09-05 19:21:07 +03:00
Dmitry Stogov
6c7889ebd1
Simplify IF->IF_TRUE/IF_FALSE search
2022-09-02 11:00:40 +03:00
Dmitry Stogov
3a20a8130c
JMP optimization. Better ENETR block placement.
2022-08-31 14:29:34 +03:00
Dmitry Stogov
5e4503b624
Fix JMP optimization for MERGE/N and last basic block
2022-08-31 00:01:15 +03:00
Dmitry Stogov
32198c00b7
Reimplement JMP optimization
2022-08-30 23:15:20 +03:00
Dmitry Stogov
d55154d998
Introduce ir_bitqueue API
2022-08-12 19:25:10 +03:00
Dmitry Stogov
9ff5d74778
Introduce ir_bitset_pop_first_ex() and ir_bitset_incl_ex() to avoid repatable checks of the first bitset elements.
2022-08-12 18:01:15 +03:00
Dmitry Stogov
253b99ae74
Eliminate useless ir_bitset_empty() checks
2022-08-11 20:42:03 +03:00
Dmitry Stogov
7552732d65
ws
2022-07-20 11:39:05 +03:00
Dmitry Stogov
0ed7f7b41e
Fix CFG construction
2022-06-20 23:31:32 +03:00
Dmitry Stogov
5ef1e97261
Better support for unreachable basic blocks
2022-06-20 16:34:44 +03:00
Dmitry Stogov
1c78c3a2c2
Fix CFG consruction when some BB cannot be find using backward serach
...
(e.g. function with an infinity loop and without return)
2022-06-17 12:20:15 +03:00
Dmitry Stogov
68477b7d7c
Add assertion
2022-06-17 09:41:06 +03:00
Dmitry Stogov
3f6c1ee0f5
cleanup
2022-06-15 22:48:19 +03:00
Dmitry Stogov
5cafe50d36
Initial support for PHP
2022-06-10 00:16:29 +03:00
Dmitry Stogov
ad052c59ab
cleanup
2022-06-06 22:36:11 +03:00
Dmitry Stogov
41f3e43cf7
cleanup
2022-05-27 13:18:04 +03:00
Dmitry Stogov
9215162833
Ger rid of ir_ctx.bb_num and double neaning of ir_ctx.prev_insn_len
2022-05-25 11:58:35 +03:00
Dmitry Stogov
ddd5b739db
Update tasks
2022-05-24 12:59:57 +03:00
Dmitry Stogov
04667faf22
Reorder blocks according to branch probability
2022-05-24 12:47:39 +03:00
Dmitry Stogov
d3c1e4a02f
Reorder basic blocks to reduce number of jumps and improve code locality
2022-05-24 00:43:35 +03:00
Dmitry Stogov
2937993190
Initial import
2022-04-06 00:19:23 +03:00