- 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 ? 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 ? operands swap (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