2022-04-08 15:40:28 +02:00
|
|
|
- type casting nodes
|
|
|
|
- overflow detection nodes
|
|
|
|
- va_arg nodes
|
|
|
|
- BSTART, BEND nodes (to free data allocated by ALLOCA)
|
|
|
|
- ENTRY node for multy-entry units
|
|
|
|
- IJMP
|
|
|
|
- guards
|
|
|
|
- variable name binding
|
|
|
|
|
|
|
|
- VLOAD, VSTORE -> SSA
|
|
|
|
|
|
|
|
? reassociation folding rules
|
|
|
|
- folding engine improvement (one rule for few patterns)
|
|
|
|
|
|
|
|
- irreducable loops detection
|
|
|
|
- irreducable loops support
|
|
|
|
|
|
|
|
- range inference and PI node
|
|
|
|
- SCCP edge cases
|
2022-04-08 18:02:11 +02:00
|
|
|
- Folding after SCCP (see combo4.ir)
|
2022-04-08 15:40:28 +02:00
|
|
|
|
|
|
|
- local scheduling according to data dependencies, register presure and pipeline stalls
|
|
|
|
- basic block trace scheduling
|
|
|
|
|
|
|
|
? C code generation
|
|
|
|
- VLOAD, VSTORE
|
|
|
|
|
|
|
|
? instruction selection
|
|
|
|
- xor, btsl=INCL, btrl=EXCL, btl=IN, bsr, maxss, maxsd, minss, minsd
|
|
|
|
- MOVZX to avoid a SHIFT and AND instruction
|
|
|
|
- Using CMOVcc to remove branches
|
|
|
|
|
|
|
|
? register allocation
|
|
|
|
+ linear scan
|
2022-04-15 13:22:35 +02:00
|
|
|
+ allocate scratch registers first
|
2022-04-08 15:40:28 +02:00
|
|
|
- separate INT and FP allocation phases
|
|
|
|
+ use positions
|
|
|
|
? fixed registers constraints
|
|
|
|
+ fixed input
|
|
|
|
+ fixed output
|
|
|
|
+ fixed tmp
|
|
|
|
+ fixed intervals for parameters
|
|
|
|
- accurate fixed interval construction
|
|
|
|
- constraints
|
|
|
|
- kill
|
|
|
|
- restricted regset
|
|
|
|
- temporary registers
|
|
|
|
? spills
|
|
|
|
+ spill slot allocation ( uniqe for each VREG)
|
|
|
|
- uniqe for each VREG
|
|
|
|
- SpillRange ???
|
2022-04-15 13:22:35 +02:00
|
|
|
? splitting
|
2022-04-08 15:40:28 +02:00
|
|
|
- splinting
|
|
|
|
- spill only at cold path if possible
|
|
|
|
? hints
|
|
|
|
+ hints for fixed input/outpu registers
|
|
|
|
+ hints for parameter nodes
|
2022-04-15 13:22:35 +02:00
|
|
|
+ hints for call arguments
|
2022-04-08 15:40:28 +02:00
|
|
|
- hints propagation
|
|
|
|
- hints and low priority
|
|
|
|
|
|
|
|
? code generation
|
2022-04-14 22:03:30 +02:00
|
|
|
- POW, NEG (fp), ABS, OVERFLOW, MIN, MAX, COND
|
2022-04-15 15:44:12 +02:00
|
|
|
+ TAILCALL
|
2022-04-14 22:03:30 +02:00
|
|
|
- ALLOCA, VLOAD, VSTORE, LOAD, STORE
|
2022-04-12 09:37:20 +02:00
|
|
|
+ SWITCH
|
2022-04-08 15:40:28 +02:00
|
|
|
- ir_last_use
|
|
|
|
- binop_int $imm, mem
|
|
|
|
- commutative insns and swap (binop_int, mul, binop_sse, binop_avx, cmp_int, cmp_fp, cmp_br_int)
|
|
|
|
- param_move
|
2022-04-19 13:11:07 +02:00
|
|
|
- temporary register (e.g. for unsupported immediate operand in mul, div, and 64-bit constants)
|
|
|
|
? temporary register for swap (dessa3.ir)
|
2022-04-12 09:37:20 +02:00
|
|
|
- temporary register for spill loads and stores
|
2022-04-08 15:40:28 +02:00
|
|
|
- parallel parameter loading
|
2022-04-12 14:08:17 +02:00
|
|
|
+ parallel argument passing
|
2022-04-19 13:11:07 +02:00
|
|
|
- stack arguments
|
2022-04-08 15:40:28 +02:00
|
|
|
- return merge/split
|
|
|
|
? binary code emission
|
|
|
|
+ DynAsm
|
|
|
|
- BinAsm
|
2022-04-12 09:37:20 +02:00
|
|
|
- 32-bit x86 code
|
2022-04-08 15:40:28 +02:00
|
|
|
|
|
|
|
? disassembler
|
|
|
|
- .rodata section and relative data labels
|
|
|
|
|
|
|
|
- modules (functions, data objecs, import, export, prototypes, forward declarations, memory segments, ref data, expr data)
|
|
|
|
- C compiler
|
|
|
|
- interpreter
|
|
|
|
- alias analyzes
|
|
|
|
|
|
|
|
- PHP support
|
|
|
|
|