1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
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 frenklingar 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">lngsamma</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. knd mltavla)
<LI> Save/restore-placering: datafldesanalys, interaktion m. catch-frames
<LI> Loop optimeringar
<UL>
<LI> Dominatorer (se dominatorer fr 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 frgning</a>
<LI> Optimistisk frgning (kan sls p i samma fil som pessimistisk
frgning ovan).
<LI> Bttre berkning 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> Begrnsad predicated execution med movcc
</UL>
<LI> Kodlayout: statiska frutsgelser om riktning av hopp,
layout, stta 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 rknare i CFG:er (per block, per bge)
<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, kodfrflyttning frn het till kall CFG.
<LI> Spawn-time specialization
</UL>
|