forked from dstogov/ir
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTODO
More file actions
41 lines (34 loc) · 1.54 KB
/
TODO
File metadata and controls
41 lines (34 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
- Volatile variants of LOAD and STORE
? Passing and returning stuctures by value
+ in memory
- in several registers
- full ABI conformance
- Support for computed goto (like LLVM blockaddress)
- MEMCPY, MEMSET
- Consider IR cleanup (VAR -> ALLOCA, VLOAD -> LOAD, VSTORE -> STORE, LOOP_END -> END, LOOP_BEGIN -> MERGE, PI)
- long constants
- long double
- revisit ir_bind()
? reassociation folding rules
- folding engine improvement (one rule for few patterns)
- Extend SCCP to support range inference and PI node
- See "Eliminating Range Checks using SSA Form" John Gough, Herbert Klaeren
- PI nodes may be defined as %dst = BOUND_LOW/HIGH(%ctrl, %src, %low/high_bound)
- PI nodes may be inserted after IF and GUARD
- PI should not be lifted to BB with PHIs
? instruction selection
- btsl=INCL, btrl=EXCL, btl=IN, bsr
- MOVZX to avoid a SHIFT and AND instruction
- BURS ???
? register allocation
- optimisation of spill code placement (BB local or through resolution)
- separate INT and FP allocation phases (for performance)
- Try to avoid live-interval construction, see "Efficient Global Register Allocation" Ian Rogers
? code generation
- TAILCALL with stack arguments (tests/x86/tailcall_001.itr)
- 32-bit x86 back-end 64-bit integers support
(add_009.irt, conv_001.irt, conv_002.irt, conv_004.irt, conv_010.irt, sub_009.irt)
- binary code emission without DynAsm ???
? modules (functions, data objecs, import, export, prototypes, forward declarations, memory segments, ref data, expr data)
- interpreter
- alias analyzes