ir/TODO
Dmitry Stogov dd5a3a3b72 Add flexible support for temporary registers.
Get rid of hardcoded temporary registers (incomplete)
2022-05-05 22:35:39 +03:00

81 lines
2.2 KiB
Plaintext

- 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
- Folding after SCCP (see combo4.ir)
- local scheduling according to data dependencies, register presure and pipeline stalls
- basic block trace scheduling
? instruction selection
- xor, btsl=INCL, btrl=EXCL, btl=IN, bsr, maxss, maxsd, minss, minsd
- MOVZX to avoid a SHIFT and AND instruction
- Use CMOVcc to remove branches
- BURS ???
? register allocation
- do we need UsePositions for Phi (at Phi position or at block start position), DESSA use positions, LOOP?
+ linear scan
+ allocate scratch registers first
- temporary registers
- separate INT and FP allocation phases
- constraints
- kill
- restricted regset
+ must be in register
? temporary registers
- switch
- arguments loading
- parameter passing
- dessa
? spills
- spill slot allocation (packed/aligned according to SpillRange)
? splitting
+ find optimal split position
- resolution
- splinting
- spill only at cold path if possible
? hints
- hints propagation
- hints and low priority
? code generation
- OVERFLOW
- MIN, MAX, COND
- CAST
? ir_last_use
- update memory (binop_int, mul_div_mod_pwr2, shift, shift_const, op_int, copy_int/fp?)
? operands swap (binop_int, binop_sse, binop_avx, cmp_int, cmp_fp, cmp_br_int)
+ temporary register (e.g. for unsupported immediate operand in mul, div, and 64-bit constants)
? temporary register for swap (dessa3.ir)
+ temporary register for spill loads and stores
- stack arguments and parameters
- return merge/split
? binary code emission without DynAsm
- 32-bit x86 code
? 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