aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe/TODO
blob: f166472df6d8b76d23389eea64936bbee49276c6 (plain) (blame)
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 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>