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) ======================================================== <h1>Experimental implementations</h1> <h2>RTL</h2> <UL> <LI> Algebraiska f�renklingar av uttryck (ex. reducera integer multiply, ta bort addition med 0, etc) <LI> Partial redundancy elimination </UL> <h1>Unimplemented optimizations</h1> <H2>Erlang/Core source-level-optimizations</H2> <UL> <LI> "Context compilation" <LI> CDR-kodning <LI> List reuse <LI> Compilation by transformation </UL> <H2>Icode-optimizations</H2> <UL> <LI> Convertion to loops from recursive programs <LI> Dominatorer (<a href="./thomasl/icode/dominators.erl">l�ngsamma</a>, snabba) </UL> <H2>RTL-optimizations</H2> <UL> <LI> Common subexpression elimination <LI> Ta bort redundanta tester globalt (ex. upprepade typtester) <LI> Ordna om hopp (ex. byt ordning p� nil/cons-tester) <LI> Goto eliminering (= expandera uncond. jumps m. k�nd m�ltavla) <LI> Save/restore-placering: datafl�desanalys, interaktion m. catch-frames <LI> Loop optimeringar <UL> <LI> Dominatorer (se dominatorer f�r icode) <LI> Unrolling <LI> Invariant expression removal </UL> <LI> Partial redundancy elimination by lazy code motion <LI> Partially dead code </UL> <H2>Sparc-optimizations</H2> <UL> <LI> Global register allocation <UL> <LI> <a href="./thomasl/regalloc/regalloc.erl"> Pessimistisk f�rgning</a> <LI> Optimistisk f�rgning (kan sl�s p� i samma fil som pessimistisk f�rgning ovan). <LI> B�ttre ber�kning av spillkostnader <LI> Renaming <LI> Callee-saves register <LI> Live-range splitting </UL> <LI> Instruktionsschedulering <UL> <LI> Branch delay slot scheduling <LI> Load delay slot scheduling <LI> Spekulativa loads med lduwa <LI> Kollapsa serier av tester med bpr <LI> Begr�nsad predicated execution med movcc </UL> <LI> Kodlayout: statiska f�ruts�gelser om riktning av hopp, layout, s�tta branch prediction bits i hopp, etc. <LI> Prefetching av kod med SparcV9:s bpn. </UL> <H2>Other optimizations</H2> Profile driven optimizations. <UL> <LI> Utplacering av r�knare i CFG:er (per block, per b�ge) <LI> Statiska metoder att uppskatta exekveringstid (inom och mellan proc.) <LI> Feedback till program, annotering av CFG:er med profileringsinfo. <LI> Kodlayout med profileringsinfo. <LI> Skapa superblock <LI> Skapa hyperblock <LI> Plocka fram heta block, skapa en 'het' sub-CFG som hoppar till den kalla huvud-CFG:n vid behov. <LI> Optimering av het CFG, kodf�rflyttning fr�n het till kall CFG. <LI> Spawn-time specialization </UL>