Bugfix
======
P->current (Fix observable behaviour?)
New calling convention for guard bifs (Recognize at load time).
Long branches:
timer:tc(hipe,c,[megaco_text_parser,[{timeout,infinity}]]).
{4801210531,
{error,[{problem,too_long_branch},{address,3381732},{length,-828622}]}}
Performance
===========
Better handling of multimove in regalloc.
Faster closure creation. (Can static fields be preallocated?)
Expand pseudo-ops before scheduler (SPARC)
Stack maps for SPARC + Make frames in Sparc not in RTL.
Coalesce spill locations.
Feature
=======
Stack traces from stack maps.
Cleanup
=======
Speedup renaming and other bottlenecks in the compiler.
Only calls with fail label should end basic blocks.
Remove fail-entry-points from RTL (sparc/x86).
Cleanup hipe_*_registers.erl and interface/rules with regalloc.
HiPE in bootstrap.
Cleanup and merge loaders. (Better handling of data.)
Re-examine switching code.
Extensions
==========
Design strategy for finding all processes holding a certain closure.
Design strategy for native code unloading.
mbufs: In guards -> throw away, in bifs -> trigger special GC. (fix for native.)
Unified heap + process optimization (+ PE).
Incremental GC.
Old list compiled by Thomas Lindgren (needs cleaning up)
========================================================
Experimental implementations
RTL
- Algebraiska förenklingar av uttryck (ex. reducera integer multiply,
ta bort addition med 0, etc)
- Partial redundancy elimination
Unimplemented optimizations
Erlang/Core source-level-optimizations
- "Context compilation"
- CDR-kodning
- List reuse
- Compilation by transformation
Icode-optimizations
- Convertion to loops from recursive programs
- Dominatorer
(långsamma, snabba)
RTL-optimizations
- Common subexpression elimination
- Ta bort redundanta tester globalt (ex. upprepade typtester)
- Ordna om hopp (ex. byt ordning på nil/cons-tester)
- Goto eliminering (= expandera uncond. jumps m. känd måltavla)
- Save/restore-placering: dataflödesanalys, interaktion m. catch-frames
- Loop optimeringar
- Dominatorer (se dominatorer för icode)
- Unrolling
- Invariant expression removal
- Partial redundancy elimination by lazy code motion
- Partially dead code
Sparc-optimizations
- Global register allocation
-
Pessimistisk färgning
- Optimistisk färgning (kan slås på i samma fil som pessimistisk
färgning ovan).
- Bättre beräkning av spillkostnader
- Renaming
- Callee-saves register
- Live-range splitting
- Instruktionsschedulering
- Branch delay slot scheduling
- Load delay slot scheduling
- Spekulativa loads med lduwa
- Kollapsa serier av tester med bpr
- Begränsad predicated execution med movcc
- Kodlayout: statiska förutsägelser om riktning av hopp,
layout, sätta branch prediction bits i hopp, etc.
- Prefetching av kod med SparcV9:s bpn.
Other optimizations
Profile driven optimizations.
- Utplacering av räknare i CFG:er (per block, per båge)
- Statiska metoder att uppskatta exekveringstid (inom och mellan proc.)
- Feedback till program, annotering av CFG:er med profileringsinfo.
- Kodlayout med profileringsinfo.
- Skapa superblock
- Skapa hyperblock
- Plocka fram heta block, skapa en 'het' sub-CFG som hoppar
till den kalla huvud-CFG:n vid behov.
- Optimering av het CFG, kodförflyttning från het till kall CFG.
- Spawn-time specialization